Nachtaufnahmen mit dem Raspberry Pi

Alternativ zu dem Raspberry Pi Kamera-Modul V2.1 gibt es auch eine Variante, die Bilder und Videos im Infrarot-Spektrum bei ca. 800nm aufnehmen kann. Sie eignet sich also daher gut, um nächtliche Aufnahmen machen zu können, z.B. von Tieren. Um jedoch nicht etliche Stunden an Videomaterial aufzunehmen und sichten zu müssen, kann ein PIR-Sensor verwendet werden, um die Kamera nur dann für eine gewisse Zeit auszulösen, wenn eine Bewegung in der Nähe der Kamera erkannt wird.

Verwendete Bauteile

Infrarot-Kamera

Raspberry Pi IR-Kamera 1080p
Abb: Die hier verwendete Kamera ist ein Raspberry Pi IR-Camera 1080p

Technische Spezifikationen

LED der Kamera ausschalten

Gerade in dunkler Umgebung kann die kleine, rote LED stören, die immer dann aufleuchtet, sobald der Auslöser aktiv ist. Dies könnte z.B. Tiere verschrecken oder bei einer Sicherheitskamera einen mutmaßlichen Einbrecher auf die Position der Kamera hinweisen.
Zum deaktivieren der LED editiert man die Datei /boot/config.txt und fügt folgende Zeile hinzu:
disable_camera_led=1
Nach dem Speichern der Datei muss der RPi neugestartet werden, damit die Änderung wirksam wird.

Weitere Infos zur Kamera

Vergleich IR zu sichtbares Spektrum

In den folgenden zwei Bildern wird die "Magic Mushrooms II." zunächst im sichtbaren Licht, dann im Infrarot-Licht gezeigt:

Magic Mushrooms II. in normalem Licht
Abb.: Magic Mushrooms II. in normalem Licht
Magic Mushrooms II. in IR-Licht
Abb.: Magic Mushrooms II. in IR-Licht (Raum vollständig abgedunkelt)
Video: Magic Mushrooms II. wird mit dem IR-Licht einer Fernbedienung angeblitzt (1,8MB)

PIR-Sensor

Statt den üblichen PIR-Sensoren mit weißer Streulinse habe ich mich für die Verwendung eines etwas selteneren PIR-Moduls entschieden. Hier gibt es nur drei Anschlüsse (GND, VCC und OUT) und es können keine Feineinstellungen gemacht werden.

PIR-Sensor BTE16-19
Abb.: PIR-Sensor BTE16-19

Aufbau

(siehe: Setup des RPi)
Die Kamera wird mit dem (mitgelieferten) 15-poliges FFC-Kabel wie üblich verbunden. Die Anschlüsse des PIR-Moduls habe ich wie folgt mit dem Raspberry Pi verbunden:

PIR-Sensor RaspberryPi 3 Model B+
GND GND (z.B. Pin #6)
OUT GPIO 23 (Pin #16)
VCC 5V (Pin #2 oder #4)
Aufbau mit dem RPi
Abb: Anschluss des PIR-Sensors am Raspberry Pi

Programmierung

Wie in dem Beitrag Kamera mit Bewegungsmeldungssensor und Raspberry Pi zu lesen sind, müssen noch einige Vorbereitungen getroffen werden, damit die folgenden Python-Scripte funktionieren.

Test des Bewegungs-Sensors

Nach dem Hochfahren des RPi habe ich zunächst separat die Funktionalität des PIR-Moduls getestet. Dazu erstellt man eine Datei pir_test.py mit folgendem Inhalt:

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-%dT%H:%M:%S')
    print('Motion detected! (%s)' % dt)

try:
    GPIO.add_event_detect(PIN_SENSOR, GPIO.FALLING, callback=motionEvent)
    while True:
        time.sleep(100)
except KeyboardInterrupt:
    print('Exit.')
GPIO.cleanup()

Je nach verwendetem PIR-Modul muss entweder die steigende oder abfallende Flanke im Interrupt verwendet werden. Hier wurde GPIO.FALLING benutzt. Zur Ausführung des Script wird folgender Befehl verwendet:
$ python pir_test.py
Nun sollte auf der SSH-Konsole immer dann ein Text angezeigt werden, wenn der PIR-Sensor eine Bewegung erkannt hat.

Test des Kamera-Moduls

Das folgende Script video_test.py soll ein 10-sekündiges Video aufzeichnen und auf der SD-Karte speichern:

from picamera import PiCamera

camera = PiCamera()
camera.resolution = (1024, 768)
camera.start_recording("./video.h264")
camera.wait_recording(10)
camera.stop_recording()

Nach dem Ausführen des Scripts sollte die Datei video.h264 entstanden sein. Um das Video später in einem Player besser ansehen zu können, kann man es noch vorher zu MP4 konvertieren:
$ MP4Box -add video.h264 video.mp4

Hinweis: Hier wird als "Warte-Funktion" camera.wait_recording() verwendet und nicht time.sleep(), wie in vielen anderen Beispielen angegeben. Dies hat den Vorteil, dass die hier benutzte Methode während der Pausierung der Ausführung des Scripts weiterhin Sicherheitschecks wegen auftretender Fehler durchführt, z.B. wenn die SD-Karte voll ist.

Vollständiges Programm

Das fertige Programm prüft nun, ob über den PIR-Sensor eine Bewegung erkannt wurde und löst dann die Kamera für eine Video-Aufnahme von 30 Sekunden aus.

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()
camera.resolution = (1920, 1080)

def motionEvent(channel):
    dt = datetime.utcfromtimestamp(time.time()).strftime('%Y-%m-%dT%H%M%S')
    videoPath = './video_' + dt + '.h264'
    print('Motion detected! (%s)' % dt)
    camera.start_recording(videoPath)
    camera.wait_recording(30)
    camera.stop_recording()
    print('Stopped recording')

try:
    GPIO.add_event_detect(PIN_SENSOR, GPIO.FALLING, callback=motionEvent)
    while True:
        time.sleep(100)
except KeyboardInterrupt:
    print('Exit.')
GPIO.cleanup()

Mir sind bisher noch keine nennenswerten Aufnahmen mit nachtaktiven Tieren gelunden, werden aber das Setup in ein entsprechendes Gehäuse verpacken und mich demnächst auf die Lauer legen...

zurück