Cambox - Introduction
Introduction to CamBox - the project for capturing video and images with a Raspberry Pi, Camera and a PIR sensor.
Such projects have a simple premise: have a motion triggered camera to record wildlife, both day and night (or serve as a security camera). If you wish to search for inspiration, try also trailcam.
There are quite some off-the-shelf trailcams available, but we are here to create and improve stuff, right?
The CamBox guides are broken down into multiple sections. Step by step we build and improve the appliance. You can follow those articles elsewhere, the sequence start-to-end is as follows:
- CamBox Introduction (this article)
- Connect the PIR sensor - we start with a new Raspbian and attach the first hardware - the movement detector. This is the second step for our Cambox project. It is time now to plugin the PIR motion sensor and test it out. You can find a detailed description on how to do this in our article Connecting the PIR Sensor
- CamBox - Mounting the PiCamera - we attach the camera of our choice, in this case the PiCamera. This is the third step for our Cambox project. Obviously any other USB Camera or similar can be used instead. You can find a tutorial on how to handle this steps in the article Mount PiCamera
- In the fourth step of our project, we will Connect the PIR sensor to the Camera and gather some screenshots whenever a movement is detected. Check the below section Modifying the PIR Sensor code for details.
- [optional]: Setup WIFI on Raspberry Pi - You might wish to add a WIFI dongle and configure your PI to be more mobile
- [optional]: Disable Red Led on Raspberry Pi Camera - whenever you take a screenshot, the red led on the PiCamera blinks. You can disable this behavior, though with a properly designed enclosure, this might not be necessary
- Autorun Python Script - It's time to make sure your working and tested (and optimized) program is lauched whenver the Pi boots
Modifying the PIR Sensor code
This section describes in detail how to modify the PIR code described in Connecting the PIR Sensor to achieve functionality required by our Cambox project. This is step four of our project outlined in the above section.
In the previous sections, we have connected the PIR sensor to the Raspberry PI and we have also attached the Camera. The PIR sensor is working and throwing console messages. This section now extends the Python script and on every movement triggers a screen capture.
Modifying the PIR code
Basically, all we have to add is a small piece of code which stores the camera image whenever movement is detected. As we are testing, it stores into the current directory. So we need to add the following code somewhere, and add handling of filename generation (we do not wish to overwrite the current picture again and again).
The code fragments to add look something like this:
- Initialize Camera
piccounter = 0 camera = picamera.PiCamera() camera.resolution = (1024, 768) camera.hflip = True camera.vflip = True
- Capture Image
# capture image now camera.capture('image' + str(piccounter) + '.jpg') piccounter = piccounter + 1
That's it. Our new code may look something like this:
#!/usr/bin/python #+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ #|R|a|s|p|b|e|r|r|y|P|i|-|S|p|y|.|c|o|.|u|k| #+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ # # pir_2.py # Measure the holding time of a PIR module # # Author : Matt Hawkins # Date : 20/02/2013 # Import required Python libraries import time import RPi.GPIO as GPIO import picamera # Use BCM GPIO references # instead of physical pin numbers GPIO.setmode(GPIO.BCM) # Define GPIO to use on Pi GPIO_PIR = 7 print "PIR Module Holding Time Test (CTRL-C to exit)" # Set pin as input GPIO.setup(GPIO_PIR,GPIO.IN) # Echo Current_State = 0 Previous_State = 0 try: print "Waiting for PIR to settle ..." # Loop until PIR output is 0 while GPIO.input(GPIO_PIR)==1: Current_State = 0 print " Ready" piccounter = 0 camera = picamera.PiCamera() camera.resolution = (1024, 768) camera.hflip = True camera.vflip = True # Loop until users quits with CTRL-C while True : # Read PIR state Current_State = GPIO.input(GPIO_PIR) if Current_State==1 and Previous_State==0: # PIR is triggered start_time=time.time() print " Motion detected!" # Record previous state Previous_State=1 # !!! modified pir_2.py here !!! # capture image now camera.capture('image' + str(piccounter) + '.jpg') piccounter = piccounter + 1 elif Current_State==0 and Previous_State==1: # PIR has returned to ready state stop_time=time.time() print " Ready ", elapsed_time=int(stop_time-start_time) print " (Elapsed time : " + str(elapsed_time) + " secs)" Previous_State=0 except KeyboardInterrupt: print " Quit" # Reset GPIO settings GPIO.cleanup()
What we need to get started is rather trivial:
- Raspberry Pi (showing Raspberry Pi 3)
- PIR sensor
- Raspberry Pi Camera
- An Inclosure: Anything will do, see the inspiration section. Below is my Iteration 01 3D Printout of Thingiverse Trail Cam
I wanted to make something similar to Nature Bytes camera kit. See below the enclosures.
The first prototype is built on top of an open source model from tiaanwessels found on thingiverse.