Maker.io main logo

IoT Bird Feeder with Camera

93

2025-01-10 | By Adafruit Industries

License: See Original Project 3D Printing Proximity STEMMA

Courtesy of Adafruit

Guide by Ruiz Brothers and 1 other contributor

Overview

 

birdfeeder_1

WiFi Bird Feeder Camera

This project captures images of birds that you can view on an ‎Adafruit IO feed or dashboard.‎

We designed and 3D printed a bird feeder to house the Adafruit ‎MEMENTO, a large battery, and a PIR sensor. It’s got a tray for ‎holding birdseed and a perch so birds can visit and have a meal.‎

camera_2

Adafruit IO Camera Feed

When the PIR sensor detects motion, the MEMENTO takes a photo ‎and sends a JPEG to Adafruit IO.‎

On the Adafruit IO website, you can view the image within seconds ‎of it being captured. Using Adafruit IO’s Actions feature, you can ‎receive email notifications whenever a new photo is uploaded.‎

feed_3

Capture Wildlife

The bird feeder isn’t exclusive to just birds - squirrels and chipmunks ‎are fans too and they seem to be a bit more photogenic!‎

Our build features a large battery that has about eight hours of run ‎time and can be recharged over the MEMENTO USB port.‎

captrure_4

captrure_5

Parts

The following parts are useful, but optional for completion of this ‎project.‎

Hardware

The following hardware is necessary for the case assembly.‎

  • ‎2x M2.5 x 6mm long machine screws‎

  • ‎2x M3 x 10mm long FF standoffs‎

  • ‎10x M3 x 6mm long machine screws‎

  • ‎4x M3 x 10mm long machine screws‎

  • ‎6x M3 hex nuts‎

Text editor powered by tinymce.‎

Wiring

Connect PIR Sensor to JST PH 3-Pin ‎Plug

In the wiring diagram below, the PIR sensor is connected to one of ‎the MEMENTO's JST PH 3-Pin sockets. However, it's not as simple as ‎the diagram makes it out to be. The PIR sensor comes with a 30cm ‎cable ending in a socket.‎

There are a few options for connecting this cable to the MEMENTO's ‎JST-PH socket:‎

Alligator Clips

This option requires no soldering. Simply follow the wiring diagram ‎and connect the JST PH cable's alligator clips to the wires from the ‎PIR sensor's cable.‎

DIY Wiring Harness

This option requires soldering. However, it is permanent and elegant ‎compared to the alligator clips.‎

You'll need the following parts for this step:‎

Using wire cutters, cut a JST PH 2mm 3-pin Plug-Plug cable in half. ‎Then, add heat shrink tubing over the cable.‎

adafruit_products_cut_cable_add_hs-ezgif

Solder each wire of the JST PH cable to the corresponding wire on ‎the PIR sensor's harness. ‎

adafruit_products_solder_hs-ezgif

Then, slide the heat shrink tubing over the soldering joint and apply ‎heat.‎

adafruit_products_hs_tube-ezgif2

After soldering and applying heat shrink to all three cables, your PIR ‎sensor is ready to be plugged into the MEMENTO.‎

solder_6

Wiring Diagram

diagram_6

After connecting the PIR sensor to a JST cable, connect the cable to ‎the MEMENTO.‎

The wiring for this project is as follows:‎

  • PIR Sensor VCC to Memento A0 VIN

  • PIR Sensor GND to Memento A0 GND

  • PIR Sensor Output to Memento A0 Signal

Text editor powered by tinymce.‎

CAD Files

‎3D Printed Parts‎

STL files for 3D printing are oriented to print "as-is" on FDM style ‎machines. Parts are designed to 3D print without any support ‎material using PLA filament. Original design source may be ‎downloaded using the links below.‎

printed_7

Download STLs.zip

CAD_Source.zip

Build Volume

The parts require a 3D printer with a minimum build volume.‎

  • ‎182mm (X) x 128mm (Y) x 92mm (Z)‎

build_8

CAD Assembly

The PIR sensor and battery is secured to brackets using machine ‎screws. The brackets are secured to the MEMENTO using machine ‎screws. The MEMENTO is secured to the front half of the enclosure ‎using machine screws. The back half of the enclosure is secured to ‎the house plate using screws, hex nuts and standoffs. The roof and ‎feeding tray are secured to the house plate using machine screws ‎and hex nuts. The front and back enclosure parts snap fit together.‎

adafruit_products_CAD

Design Source Files

The project assembly was designed in Fusion 360. This can be ‎downloaded in different formats like STEP, STL and more.‎

Electronic components like Adafruit's boards, displays, connectors ‎and more can be downloaded from the Adafruit CAD parts GitHub ‎Repo.‎

adafruit_products_5420_MEMENTO

Text editor powered by tinymce.‎

Get Started with Adafruit IO

Adafruit IO is integrated with your adafruit.com account so you don't ‎need to create yet another online account! You need an Adafruit ‎account to use Adafruit IO because we want to make sure the data ‎you upload is available to only you (unless you decide to publish your ‎data).‎

I have an Adafruit.com Account ‎already

If you already have an Adafruit account, then you already have ‎access to Adafruit IO. It doesn't matter how you signed up, your ‎account will make all three available.‎

To access Adafruit IO, simply visit https://io.adafruit.com to start ‎streaming, logging, and interacting with your data.‎

Create an Adafruit Account (for ‎Adafruit IO)‎

An Adafruit account makes Adafruit content and services available ‎to you in one place. Your account provides access to the Adafruit ‎shop, the Adafruit Learning System, and Adafruit IO. This means only ‎one account, one username, and one password are necessary to ‎engage with the content and services that Adafruit offers.‎

If you do not have an Adafruit account, signing up for a new Adafruit ‎account only takes a couple of steps.‎

Begin by visiting https://accounts.adafruit.com.‎

Click the Sign Up button under the "Need An Adafruit Account?" ‎title, below the Sign In section.‎

signup_9

This will take you to the Sign Up page.‎

Fill in the requested information and click the Create Account ‎button.‎

create_10

This takes you to your Adafruit Account home page. From here, you ‎can access all the features of your account.‎

You can also access the Adafruit content and services right from this ‎page. Along the top of the page, you'll see a series of links beginning ‎with "Shop". To access any of these, simply click the link.‎

shop_11

For example, to begin working with Adafruit IO, click the IO link to ‎the right of the rest of the links. This is the same for the other links as ‎well.‎

That's all there is to creating a new Adafruit account and navigating ‎to Adafruit IO.‎

links_12

Text editor powered by tinymce.‎

Create Adafruit IO Feed

These steps are REQUIRED to use the birdfeeder camera. Skipping it ‎will result in errors!‎

Feeds are the core of the Adafruit IO system. A feed ‎holds data and meta-data that you have sent to Adafruit IO.‎

  • Data is the information you want Adafruit IO to store. For ‎example, image data from the MEMENTO's camera.‎

  • Meta-data includes settings for the data such as privacy ‎settings and data retention options.‎

Before using the IoT Birdfeeder, a new Adafruit IO Feed must be ‎created to store the MEMENTO camera's image. Then, the feed's ‎history must be disabled to allow larger data points to be sent to ‎Adafruit IO, such as a large amount of data to represent an image. ‎

To create a feed, navigate to your Adafruit IO Feeds page. Then, ‎click New Feed.‎

feed_13

Name the feed birdfeeder and click Create.‎

name_14

The feeds list now lists a birdfeeder feed. Click this feed.‎

feedname_15

Disable Feed History

On the camera feed's sidebar, click Feed History.‎

sidebar_16

Set History to OFF and click Save. This will change the feed's data ‎storage from 1KB to 100KB, large enough to store image data.‎

history_17

Text editor powered by tinymce.‎

Create Your settings.toml File

CircuitPython works with WiFi-capable boards to enable you to ‎make projects that have network connectivity. This means working ‎with various passwords and API keys. As of CircuitPython 8, there is ‎support for a settings.toml file. This is a file that is stored on ‎your CIRCUITPY drive, which contains all of your secret network ‎information, such as your SSID, SSID password and any API keys for ‎IoT services. It is designed to separate your sensitive information ‎from your code.py file so you are able to share your code without ‎sharing your credentials.‎

CircuitPython previously used a secrets.py file for this purpose. ‎The settings.toml file is quite similar.‎

Your settings.toml file should be stored in the main directory of your ‎CIRCUITPY drive. It should not be in a folder.

CircuitPython settings.toml File

This section will provide a couple of examples of what ‎your settings.toml file should look like, specifically for CircuitPython ‎WiFi projects in general.‎

The most minimal settings.toml file must contain your WiFi SSID ‎and password, as that is the minimum required to connect to WiFi. ‎Copy this example, paste it into your settings.toml, and update:‎

  • your_wifi_ssid

  • your_wifi_password

‎Download File

Copy Code
CIRCUITPY_WIFI_SSID = "your_wifi_ssid"
CIRCUITPY_WIFI_PASSWORD = "your_wifi_password"

Many CircuitPython network-connected projects on the Adafruit ‎Learn System involve using Adafruit IO. For these projects, you ‎must also include your Adafruit IO username and key. Copy the ‎following example, paste it into your settings.toml file, and update:‎

  • your_wifi_ssid

  • your_wifi_password

  • your_aio_username

  • your_aio_key

Download File

Copy Code
CIRCUITPY_WIFI_SSID = "your_wifi_ssid"
CIRCUITPY_WIFI_PASSWORD = "your_wifi_password"
ADAFRUIT_AIO_USERNAME = "your_aio_username"
ADAFRUIT_AIO_KEY = "your_aio_key"

Some projects use different variable names for the entries in ‎the settings.toml file. For example, a project might ‎use ADAFRUIT_AIO_ID in the place of ADAFRUIT_AIO_USERNAME. If you ‎run into connectivity issues, one of the first things to check is that ‎the names in the settings.toml file match the names in the code.‎

Not every project uses the same variable name for each entry in the ‎settings.toml file! Always verify it matches the code.‎

settings.toml File Tips

Here is an example settings.toml file.‎

‎Download File

Copy Code
# Comments are supported
CIRCUITPY_WIFI_SSID = "guest wifi"
CIRCUITPY_WIFI_PASSWORD = "guessable"
CIRCUITPY_WEB_API_PORT = 80
CIRCUITPY_WEB_API_PASSWORD = "passw0rd"
test_variable = "this is a test"
thumbs_up = "\U0001f44d"

In a settings.toml file, it's important to keep these factors in mind:‎

  • Strings are wrapped in double quotes; ex: "your-string-here"

  • Integers are not quoted and may be written in decimal with ‎optional sign (+1, -1, 1000) or hexadecimal (0xabcd).‎

    • Floats, octal (0o567) and binary (0b11011) are not ‎supported.‎

  • Use \u escapes for weird characters, \x and \ooo escapes are ‎not available in .toml files

    • Example: \U0001f44d for 👍 (thumbs up emoji) ‎and \u20ac for € (EUR sign)‎

  • Unicode emoji, and non-ASCII characters, stand for themselves ‎as long as you're careful to save in "UTF-8 without BOM" format‎

When your settings.toml file is ready, you can save it in your text ‎editor with the .toml extension.‎

file_18

Accessing ‎Your settings.toml Information ‎in code.py

In your code.py file, you'll need to import the os library to access ‎the settings.toml file. Your settings are accessed with ‎the os.getenv() function. You'll pass your settings entry to the ‎function to import it into the code.py file.‎

Download File

Copy Code
import os

print(os.getenv("test_variable"))

access_19

In the upcoming CircuitPython WiFi examples, you'll see how ‎the settings.toml file is used for connecting to your SSID and ‎accessing your API keys.‎

Text editor powered by tinymce.‎

Code

code_20

Once you've finished setting up your MEMENTO camera with ‎CircuitPython, you can access the code and necessary libraries by ‎downloading the Project Bundle.‎

To do this, click on the Download Project Bundle button in the ‎window below. It will download to your computer as a zipped folder.‎

‎Download Project Bundle

Copy Code
# SPDX-FileCopyrightText: 2023 Brent Rubell for Adafruit Industries
# SPDX-License-Identifier: MIT
#
# An open-source IoT birdfeeder camera with Adafruit MEMENTO

import os
import ssl
import binascii
import board
import digitalio
import socketpool
import wifi
import adafruit_pycamera
import adafruit_requests
from adafruit_io.adafruit_io import IO_HTTP, AdafruitIO_RequestError

print("MEMENTO Birdfeeder Camera")

### WiFi ###
# Add settings.toml to your filesystem CIRCUITPY_WIFI_SSID and CIRCUITPY_WIFI_PASSWORD keys
# with your WiFi credentials. DO NOT share that file or commit it into Git or other
# source control.

# Set your Adafruit IO Username, Key and Port in settings.toml
# (visit io.adafruit.com if you need to create an account,
# or if you need your Adafruit IO key.)
aio_username = os.getenv("ADAFRUIT_AIO_USERNAME")
aio_key = os.getenv("ADAFRUIT_AIO_KEY")

#print(f"Connecting to {os.getenv('CIRCUITPY_WIFI_SSID')}")
wifi.radio.connect(os.getenv("CIRCUITPY_WIFI_SSID"), os.getenv("CIRCUITPY_WIFI_PASSWORD"))
#print(f"Connected to {os.getenv('CIRCUITPY_WIFI_SSID')}!")

pool = socketpool.SocketPool(wifi.radio)
requests = adafruit_requests.Session(pool, ssl.create_default_context())

# Initialize an Adafruit IO HTTP API object
io = IO_HTTP(aio_username, aio_key, requests)

try:
    # Get the 'birdfeeder' feed from Adafruit IO
    feed_camera = io.get_feed("birdfeeder")
except AdafruitIO_RequestError:
    # If no 'birdfeeder' feed exists, create one
    feed_camera = io.create_new_feed("birdfeeder")

# initialize camera
pycam = adafruit_pycamera.PyCamera()
# turn off the display backlight
pycam.display.brightness = 0.0
# set photo resolution
pycam.resolution = 3
# set focus to estimated bird location
pycam.autofocus_vcm_step = 145

# initialize PIR sensor
pir = digitalio.DigitalInOut(board.A0)
pir.direction = digitalio.Direction.INPUT

def send_jpeg_to_io():
    # before we send the image to IO, it needs to be encoded into base64
    encoded_data = binascii.b2a_base64(jpeg).strip()
    # then, send the encoded_data to Adafruit IO camera feed
    print("Sending image to IO...")
    io.send_data(feed_camera["key"], encoded_data)
    print("Sent image to IO!")

print("Waiting for movement...")
old_pir_value = pir.value
while True:
    pir_value = pir.value
    # if we detect movement, take a photo
    if pir_value:
        if not old_pir_value:
            print("Movement detected, taking picture!")
            # take a picture and save it into a jpeg bytes object
            jpeg = pycam.capture_into_jpeg()
            # if the camera successfully captured a jpeg, send it to IO
            if jpeg is not None:
                send_jpeg_to_io()
            else:
                print("ERROR: JPEG capture failed!")
    else:
        if old_pir_value:
            print("Movement ended")
        # update old_pir_value
    old_pir_value = pir_value

View on GitHub

After downloading the Project Bundle, plug your MEMENTO into the ‎computer's USB port with a known good USB data+power cable. You ‎should see a new flash drive appear in the computer's File Explorer ‎or Finder (depending on your operating system) called CIRCUITPY. ‎Unzip the folder and copy the following items to the ‎MEMENTO's CIRCUITPY drive.‎

  • lib folder

  • code.py

Your MEMENTO CIRCUITPY drive should look like this after copying ‎the lib folder and the code.py file.‎

drive_21

Code Walkthrough

The following code snippet connects the MEMENTO camera to a ‎WiFi network.‎

‎Download File

Copy Code
### WiFi ###
# Add settings.toml to your filesystem CIRCUITPY_WIFI_SSID and CIRCUITPY_WIFI_PASSWORD keys
# with your WiFi credentials. DO NOT share that file or commit it into Git or other
# source control.

# Set your Adafruit IO Username, Key and Port in settings.toml
# (visit io.adafruit.com if you need to create an account,
# or if you need your Adafruit IO key.)
aio_username = os.getenv("ADAFRUIT_AIO_USERNAME")
aio_key = os.getenv("ADAFRUIT_AIO_KEY")

print(f"Connecting to {os.getenv('CIRCUITPY_WIFI_SSID')}")
wifi.radio.connect(
    os.getenv("CIRCUITPY_WIFI_SSID"), os.getenv("CIRCUITPY_WIFI_PASSWORD")
)
print(f"Connected to {os.getenv('CIRCUITPY_WIFI_SSID')}!")

The io object is created to interface with the Adafruit IO HTTP API.‎

‎Download File

Copy Code
pool = socketpool.SocketPool(wifi.radio)
requests = adafruit_requests.Session(pool, ssl.create_default_context())

# Initialize an Adafruit IO HTTP API object
io = IO_HTTP(os.getenv("ADAFRUIT_AIO_USERNAME"), os.getenv("ADAFRUIT_AIO_KEY"), requests)

We'll attempt to get the birdfeeder feed from Adafruit IO. If it does not exist on the account, the Adafruit IO CircuitPython library will automatically create one.‎

Download File

Copy Code
# Manage Adafruit IO Feed
try:
    # Get the 'birdfeeder' feed from Adafruit IO
    feed_camera = io.get_feed("birdfeeder")
except AdafruitIO_RequestError:
    # If no 'birdfeeder' feed exists, create one
    feed_camera = io.create_new_feed("birdfeeder")

The camera is initialized and its display backlight is disabled.

Download File

Copy Code
# initialize camera
pycam = adafruit_pycamera.PyCamera()
# turn off the display backlight
pycam.display.brightness = 0.0

The PIR sensor is initialized as a digital input on the MEMENTO's A0 ‎port.‎

‎Download File

Copy Code
# initialize PIR sensor
pir = digitalio.DigitalInOut(board.A0)
pir.direction = digitalio.Direction.INPUT

The loop reads the value of the PIR sensor. If the value of the PIR ‎sensor has changed, movement is detected, and the MEMENTO ‎takes a photo. The photo is saved into a JPEG (bytes) object.‎

‎Download File

Copy Code
print("Waiting for movement...")
old_pir_value = pir.value
while True:
  pir_value = pir.value
  # if we detect movement, take a photo
  if pir_value:
    if not old_pir_value:
      print("Movement detected, taking picture!")
      # force camera autofocus
      pycam.autofocus()
      # take a picture and save it into a jpeg bytes object
      jpeg = pycam.capture_into_jpeg()

If the camera successfully captures a photo, the jpeg object will be ‎full of bytes. The code checks if the jpeg capture was successful and ‎then calls a function to send the jpeg data to Adafruit IO.‎

If the image is not captured, an error will be printed to the REPL.‎

Download File

Copy Code
# if the camera successfully captured a jpeg, send it to IO
      if jpeg is not None:
        send_jpeg_to_io()
      else:
        print("ERROR: JPEG capture failed!")

The following function, send_jpeg_to_io(), is called by the snippet ‎above. In this function, the jpeg data gets encoded from bytes into a ‎base 64 object to reduce its size. Then, the encoded data is sent to ‎the Adafruit IO feed we specified earlier.‎

‎Download File

Copy Code
def send_jpeg_to_io():
  """ Sends a JPEG image to Adafruit IO. """
  # before we send the image to IO, it needs to be encoded into base64
  encoded_data = binascii.b2a_base64(jpeg).strip()
  # then, send the encoded_data to Adafruit IO camera feed
  print("Sending image to IO...")
  io.send_data(feed_camera["key"], encoded_data)
  print("Sent image to IO!")

Finally, if the new value detected by the PIR sensor was the previous ‎value, we'll print to the REPL that movement has stopped being ‎detected. The old_pir_value is updated each loop iteration.‎

‎Download File

Copy Code
else:
    if old_pir_value:
      print("Movement ended")
# update old_pir_value
old_pir_value = pir_value

Text editor powered by tinymce.‎

Assembly

Wired PIR Sensor

The PIR sensor cable is shorted to be 3.5 inches (8.9mm) long to ‎better fit inside the 3D printed enclosure. (See Wiring page in this ‎guide for more info.)‎

wired_22

PIR Sensor Bracket

Use the following hardware to secure the PIR sensor to the 3D ‎printed bracket.‎

  • ‎2x M2.5 x 6mm long machine screws‎

wired_23

wired_24

Secure PIR Sensor

Place the PIR sensor PCB over the 3D printed bracket using the ‎photo to reference the correct placement and orientation.‎

Install and fasten the machine screws to secure the PIR sensor to the ‎‎3D printed bracket.‎

secure_25

secure_26

Secure PIR Sensor Bracket

Use two M3 x 6mm long screws to secure to the 3D printed PIR ‎sensor bracket to the back side of the MEMENTO.‎

The 3D printed bracket for the PIR sensor is placed below the two ‎lower standoffs on the MEMENTO PCB.‎

Install and fasten the M3 machine screws to secure the PIR sensor ‎bracket to the MEMENTO.‎

bracket_27

bracket_28

Connect PIR Sensor ‎

Plug the 3-pin JST connector from the PIR sensor to the JST ‎connector on the side of the MEMENTO labeled A0. ‎

Take a moment to ensure the bracket is tightly secured and the PIR ‎sensor is connected to the correct port on the MEMENTO.‎

connect_29

connect_30

Battery Bracket

Use the following hardware to secure the battery bracket to the ‎MEMENTO.‎

  • ‎2x M3 x 6mm long machine screws‎

battery_31

Secure Battery Bracket

Place the 3D printed battery bracket over the two upper standoffs on ‎the back side of the MEMENTO.‎

Use the M3 machine screws to secure the 3D printed battery bracket ‎to the MEMENTO.‎

Plug in the cable from the 2200mAh battery to the battery port on ‎the front side of the MEMENTO.‎

place_32

place_33

Install Battery

Press or slide the 2200mAh battery into the clip on the 3D printed ‎battery bracket.‎

Take a moment to ensure the battery and bracket are installed ‎correctly.‎

install_34

Front Case

Use the following hardware to secure the MEMENTO to the front half ‎of the 3D printed enclosure.‎

  • ‎4x M3 x 6mm long machine screws ‎

Fit the MEMENTO into the 3D printed enclosure with the front side ‎facing down.‎

front_35

front_36

Secure Memento

Install and fasten the M3 machine screws to secure the MEMENTO to ‎the front half of the 3D printed enclosure.‎

The lens and PIR sensor should fit through the corresponding ‎cutouts.‎

Ensure the print-in-place slide switch is positioned to actuate the ‎built-in ON/OFF slide switch onboard the MEMENTO.‎

fasten_37

fasten_38

House and Tray

Use the following hardware to secure the 3D printed house plate to ‎the feeder tray.‎

  • ‎2x M3 x 10mm long machine screws‎

  • ‎2x M3 hex nuts‎

house_39

Secure Tray to House

Slide the feeder tray into the bottom of the house plate and line up ‎the mounting holes.‎

Insert and fasten the M3 screws through the side of the 3D printed ‎house plate.‎

Use the M3 hex nuts to secure the house plate to the feeder tray.‎

tray_40

tray_41

House & Roof

Use the following hardware to secure the 3D printed house plate to ‎the 3D printed roof.‎

  • ‎2x M3 x 10mm long screws‎

  • ‎2x M3 hex nuts‎

roof_42

Secure Roof to House Plate

Place the 3D printed roof over the top of the 3D printed house plate ‎and line up the mounting holes. ‎

Insert and fasten the M3 screws through the side of the 3D printed ‎roof.‎

Use the M3 hex nuts to secure the 3D printed roof to the house plate.‎

secure_43

secure_44

Back Case

Use the following hardware to secure the back half of the 3D printed ‎enclosure.‎

  • ‎6x M3 x 6mm long machine screws‎

  • ‎2x M3 hex nuts‎

  • ‎2x M3 x 10mm long FF standoffs

back_45

Install Standoffs

Secure the two M3 standoffs using two M3 machine screws to the ‎two upper mounting holes on the 3D printed house plate.‎

standoffs_46

Secure Back Case

Place the back half of the 3D printed enclosure over the standoffs ‎with the side indentation oriented towards the right side.‎

Install and fasten two M3 screws to secure the back half of the ‎enclosure to the standoffs on the 3D printed house plate.‎

case_47

case_48

Secured Case

Install and fasten two M3 screws to the remaining mounting holes.‎

Use two M3 hex nuts to secure the back half of the 3D printed ‎enclosure to the 3D printed house plate.‎

Take a moment to ensure the parts are correctly oriented.‎

secured_49

secured_50

Snap Fit Case Closed

Orient the front half of the 3D printed enclosure to match the back ‎half.‎

Line up the edges and firmly press the two halves to snap fit them ‎together.‎

Congratulations on building your IoT Bird Feeder!‎

closed_51

closed_52

Text editor powered by tinymce.‎

Usage

usage_53

Using Outdoors

The 3D printed enclosure is not fully weatherproof and should only ‎be used outdoors during the day under dry conditions. ‎

Add your preferred bird food to the 3D printed tray.‎

Birds can be very cautious when eating. Allow a few days for birds to ‎be conformable with your location before expecting them to feed.‎

outdoor_54

Viewing the latest photo on Adafruit ‎IO

The MEMENTO takes a photo when a bird (or any other object) is ‎detected by the feeder's motion sensor. This photo is then uploaded ‎to Adafruit IO.‎

To view the image from the camera, navigate to your Adafruit IO ‎Feeds page and click on the birdhouse feed.‎

feed_55

The image captured by the camera should appear on the feed as a ‎data-point and an image preview will be visible.

feed_56

If the PIR sensor is not detecting motion in front of it, or if it's too ‎sensitive, follow the instructions below to adjust the sensor's settings.‎

Adjusting PIR Sensor Sensitivity ‎

The PIR sensor sold by Adafruit has two potentiometers on the back, ‎with one labeled SENSITIVITY. You can adjust the sensitivity if your ‎PIR is too sensitive or not sensitive enough.‎

Turning the potentiometer clockwise makes it more sensitive and ‎turning it counter-clockwise makes it less sensitive. ‎

adjusting_57

Adjusting PIR Sensor Pulse Time and ‎Timeout Length

There are two 'timeouts' associated with the PIR sensor. One is the ‎‎"Tx" timeout: how long the LED is lit after it detects movement - this ‎is easy to adjust on Adafruit PIR sensors because there's a ‎potentiometer labeled TIME.‎

PIR Motion Sensor

By Lady Ada

Testing a PIR

View Guide

sensor_58

Text editor powered by tinymce.

制造商零件编号 5420
MEMENTO - PYTHON PROGRAMMABLE DI
Adafruit Industries LLC
制造商零件编号 189
PIR (MOTION) SENSOR
Adafruit Industries LLC
USB TO 2.1MM MALE BARREL JACK CA
制造商零件编号 2697
USB TO 2.1MM MALE BARREL JACK CA
Adafruit Industries LLC
制造商零件编号 4474
CABLE A PLUG TO C PLUG 3'
Adafruit Industries LLC
制造商零件编号 1649
MULTI-COLORED HEAT SHRINK PACK
Adafruit Industries LLC
制造商零件编号 4030
CBL ASSY RECT 3P PL-GATOR 0.63'
Adafruit Industries LLC
制造商零件编号 4336
JST PH 3-PIN PLUG-PLUG CABLE
Adafruit Industries LLC
Add all DigiKey Parts to Cart
Have questions or comments? Continue the conversation on TechForum, DigiKey's online community and technical resource.