Um mit der Raspberry Pi Kamera Fotos aufzunehmen, die aber nur bei einer bestimmten Bewegung ausgelöst werden, kann man sich mittels eines PIR-Sensors bedienen.
In den folgenden Versuchen habe ich das Modul HC-SR501 verwendet und dabei die Anschlüsse folgendermaßen mit dem Raspberry Pi verbunden:
HC-SR501 | RaspberryPi 3 Model B+ |
---|---|
GND | GND (z.B. Pin #6) |
OUT | GPIO 23 (Pin #16) |
VCC | 5V (Pin #2 oder #4) |
Das folgende Python-Script soll den PIR-Sensor und dessen Empfindlichkeit testen, ohne dass jedoch ein Foto aufgenommen wird.
import RPi.GPIO as GPIO
import time
from datetime import datetime
PIN_SENSOR = 23
GPIO.setmode(GPIO.BCM)
GPIO.setup(PIN_SENSOR, GPIO.IN)
def motionEvent(channel):
dt = datetime.utcfromtimestamp(time.time()).strftime('%Y-%m-%d %H:%M:%S')
print('Motion detected! (%s)' % dt)
try:
GPIO.add_event_detect(PIN_SENSOR , GPIO.RISING, callback=motionEvent)
while True:
time.sleep(100)
except KeyboardInterrupt:
print "Exit."
GPIO.cleanup()
Falls noch nicht geschehen, muss zunächst das picamera-Modul für Python installiert werden:
$ sudo apt-get update
$ sudo apt-get install python-picamera python3-picamera
$ python -c "import picamera"
$ python3 -c "import picamera"
Das folgende Python-Script verarbeitet die vom PIR-Sensor erkannte Bewegung (z.B. eines Menschen) und speichert ein Foto auf die angegebene Stelle der SD-Karte.
import RPi.GPIO as GPIO
import time
from datetime import datetime
from picamera import PiCamera
PIN_SENSOR = 23
GPIO.setmode(GPIO.BCM)
GPIO.setup(PIN_SENSOR, GPIO.IN)
camera = PiCamera()
def motionEvent(channel):
global imgNo
dt = datetime.utcfromtimestamp(time.time()).strftime('%Y-%m-%d %H%M%S')
imgPath = './image_' + dt + '.jpg'
print(imgPath)
camera.resolution = (1600, 1200)
camera.capture(imgPath)
try:
GPIO.add_event_detect(PIN_SENSOR , GPIO.RISING, callback=motionEvent)
while True:
time.sleep(100)
except KeyboardInterrupt:
print "Exit."
GPIO.cleanup()
zurück