the hedgehogs are back in our garden:
This is a combination of the PiNoIR camera (v.1) along with this IR motion detector (the sensor is expensive because it’s digital), and some near-IR LEDs. Below is a picture of the older model – the newer one runs on an A+ (for size and power reasons) and has been updated to Jessie, and now the LEDs are switchable by GPIO via a mosfet to provide lighting for the camera only when needed. The upgrade to Jessie means she boots without WiFi at night, and the next morning, I can add the WiFi dongle to connect and check the results.
Code
#!/usr/bin/env python # NiteLite - a python daemon process started at system boot, and stopped on shutdown # - the default LED pattern is twinkling but if motion is detected, one of 4 # different patterns are chosen and these are used for 10s after motion detection # # Please see our GitHub repository for more information: https://github.com/pistuffing/nitelite/piglow # import signal import time import RPi.GPIO as GPIO import os from datetime import datetime import subprocess #------------------------------------------------------------ # Set up the PIR movement detection #------------------------------------------------------------ GPIO_PIR = 18 GPIO_IR_LED = 12 GPIO.setmode(GPIO.BOARD) GPIO.setup(GPIO_PIR, GPIO.IN, GPIO.PUD_DOWN) GPIO.setup(GPIO_IR_LED, GPIO.OUT) GPIO.output(GPIO_IR_LED, GPIO.LOW) #------------------------------------------------------------ # Final steps of setup #------------------------------------------------------------ keep_looping = True def Daemonize(): os.setpgrp() #------------------------------------------------------------ # Once booted, give the user a couple of minutes to place the camera #------------------------------------------------------------ time.sleep(2 * 60.0) try: while keep_looping: #---------------------------------------------------- # Block waiting for motion detection #---------------------------------------------------- GPIO.wait_for_edge(GPIO_PIR, GPIO.RISING) #---------------------------------------------------- # Turn on the IR LED #---------------------------------------------------- GPIO.output(GPIO_IR_LED, GPIO.HIGH) #---------------------------------------------------- # Take a snap #---------------------------------------------------- now = datetime.now() now_string = now.strftime("%y%m%d-%H%M%S") camera = subprocess.Popen(["raspistill", "-rot", "180", "-o", "/home/pi/Pictures/img_" + now_string + ".jpg", "-n", "-ISO", "800", "-ex", "night", "-ifx", "none"], preexec_fn = Daemonize) #---------------------------------------------------- # Turn off the IR LED after 5s #---------------------------------------------------- time.sleep(5) GPIO.output(GPIO_IR_LED, GPIO.LOW) #---------------------------------------------------- # Wait 30s before checking for motion again #---------------------------------------------------- time.sleep(30.0) except KeyboardInterrupt, e: pass GPIO.cleanup()
Save it as /home/pi/hogcam.py and make it executable:
chmod 775 /home/pi/hogcam.py
Load on boot
Raspian uses systemd for running on boot. In /etc/systemd/system, create a new file called hogcam.service:
[Unit] Description=HogCam [Service] ExecStart=/home/pi/hogcam.py [Install] WantedBy=multi-user.target
Save it off. You can then enable, start and stop it thus. It will also start on boot.
sudo systemctl enable hogcam.service sudo systemctl start hogcam.service sudo systemctl stop hogcam.service