Raspberry PI als Alarmanlage

Nutzt man den Raspberry Pi als Steuereinheit für die eigene Hausautomation, eine Alarmanalage, oder als Überwachungskamera, dann ist der Einsatz von Bewegungsmeldern bzw. Bewegungssensoren sinnvoll. Wie man am Raspberry Pi einen PIR Bewegungssensor ansteuert, wird im Folgenden erklärt.

PIR Bewegungssensor

Zur Realisierung des Bewegungsmelders nutzen wir einen PIR Bewegungssensor, zum Beispiel vom Typ HC-SR501 oder ST-ZV390-ZX. PIR steht für „passives Infrarot“. Beide Modelle sind sowohl funktional, als auch von der Optik her nahezu identisch und unterscheiden sich lediglich in Sachen Preis, Lieferzeit (ST-ZV390-ZX hat lange gedauert) und ein bisschen in der Qualität. Für diese Anleitung verwende ich den PIR Sensor ST-ZV390-ZX- im Nachhinein würde ich zum PIR Bewegungssensor HC-SR501 raten.

Der Sensor hat eine Reichweite von 7 Metern und einen Detektionswinkel von rund 100 bis 140 Grad. Weiterhin verfügt der Bewegungssensor über 3 Pins und 2 Stellschrauben zur Kalibrierung. Über diese kann sowohl die Sensibilität, als auch die Zeitverzögerung beim Auslösen des Sensors konfiguriert werden.

Weiterhin besitzt der Sensor einen Jumper, der das Schaltverhalten der Datenleitung bestimmmt. Beim Modell vom Typ ST-ZV390-ZX muss der Jumper selbst gelötet werden, beim HC-SR501 sind Pins vorinstalliert. Bei der Arbeit mit dem Sensor (ST-ZV390-ZX) war das schalten des Jumpers dennoch nicht notwendig und der Sensor funktionierte. Im Folgenden sind nochmal alle Anschlüsse und Bedienelemente zusammengefasst.

Wie schon angedeutet, konnte ich den Jumper MD (Modell ST-ZV390-ZX) auch unbeschalten lassen. Die Funktionsweise blieb erhalten und der Sensor arbeitet dann mit Position L.

Aufbau & Verkabelung

Über die 3 Pins am PIR wird der Bewegungssensor mit dem Raspberry Pi verbunden. Der Bewegungssensor kann mit einer Spannung zwischen 4,5 und 20 Volt versorgt werden. Das bedeutet, wir können den PIR mit 5 Volt vom Raspberry Pi betreiben. Die Datenleitung arbeitet mit einem Pegel von 3,3 Volt, sodass wir das Signal ohne Spannungswandlung direkt am Pi nutzen können. Der Sensor bringt folgende 3 Anschlüsse mit. Die Beschriftung ist dabei selbsterklärend.

Da wir den Sensor mit 5 Volt betreiben wollen, verbinden wir VCC mit einem 5 Volt Pin am Raspberry Pi, zum Beispiel Pin 2. Den Pin GND verbinden wir mit dem Masse-Pin 6 am Raspi. Die Datenleitung Out bw. Data des Bewegungssensors kann auf einen beliebigen GPIO-Pin gesteckt werden. Für dieses Tutrial verwende ich Pin 8 des Pi. Das GPIO-Headerlayout kann hier nachgelesen werden.

Außer ein paar Jumper-Kabeln Female / Female ist keine weitere Hardware oder Beschaltung notwendig, um den PIR Bewegungssensor mit dem Raspberry zu verbinden.

Bewegungsmelder ansteuern und auslesen

Zum Ansteuern des PIR Bewegungssensor muss die angeschlossene Datenleitung Out bzw. Data ausgewertet werden. Prinzipiell arbeitet der Sensor mit 2 Pegeln: Erkennt der Melder eine Bewegung dann liegt digitalen Ausgang Data ein High-Pegel von 3,3 Volt an – Andernfalls ist der Pegel auf 0 Volt. Zum Ansteuern mit einer beliebigen Programmiersprache muss also lediglich gewartet werden, bis am Pin, an dem die Datenleitung des PIR angeschlossen ist, einen Pegel von 3,3 Volt hat.

Bewegungssensor auslesen mit Python

Im Folgenden wird der Bewegungssensor mit Hilfe eines Python Programms ausgelesen. Das Tool ist in einer Schleife angelegt und wartet bis Pin 8, also die Datenleitung des Sensors, auf High geht.

Zum erstellen des Python-Skripts nutzen wir den Editor nano.

nano /home/pi/bewegungsmelder.py

Dort fügen wir folgenden Quellcode ein. Gespeichert wird mit der Tastenkombination Strg+X, Y und Enter.

#Import
import RPi.GPIO as GPIO
import time
import datetime
 
print "BEWEGUNGSMELDER"
print ""
 
#Board Mode: Angabe der Pin-Nummer
GPIO.setmode(GPIO.BOARD)
 
#GPIO Pin definieren fuer den Dateneingang vom Sensor
PIR_GPIO = 8
GPIO.setup(PIR_GPIO,GPIO.IN)
 
read=0
wait=0
 
try:  
 #PIR auslesen
 while GPIO.input(PIR_GPIO)==1:
   read=0
 print "WARTEN auf Bewegung..."
 
 #Abbruch ctrl+c
 while True : 
   #PIR auslesen
   read = GPIO.input(PIR_GPIO)
 
   if read==1 and wait==0: 
     print "ALARM %s: Bewegung erkannt!" % datetime.datetime.now() 
     wait=1
 
   elif read==0 and wait==1: 
     print "WARTEN auf Bewegung..." 
     wait=0
 
 time.sleep(0.01)
 
except KeyboardInterrupt:
 print "Beendet"
 GPIO.cleanup()

Zum Ausführen des Codes nutzen wir folgenden Befehl.

sudo python bewegungsmelder.py

Eine weitere Möglichkeit ist die Verwendung der Raspberry Pi Funktion Motion zum auslesen des Pinzutandes. Dabei wird der Daten-Pin so initialisiert, dass eine Veränderung, konkret ein Wechsel von Low zu High (GPIO.RISING), an das Skript übergeben wird. Der Vorteil dabei ist, das der Code nicht sekündlich den Pin-Status überprüft, sondern auf eine Meldung der Funktion wartet.

nano /home/pi/bewegungsmelder2.py
import RPi.GPIO as GPIO
import time
import datetime
import os
 
print "BEWEGUNGSMELDER"
print ""
 
#Board Mode: Angabe der Pin-Nummer
GPIO.setmode(GPIO.BOARD)
 
#GPIO Pin definieren fuer den Dateneingang vom Sensor
PIR_GPIO = 8
GPIO.setup(PIR_GPIO, GPIO.IN)
 
def MOTION(PIR_GPIO):
     os.system("echo  \"Bewegung erkannt\"")
 
print "%s - Warten auf Bewegung" % datetime.datetime.now()  
try:
     GPIO.add_event_detect(PIR_GPIO, GPIO.RISING, callback=MOTION)
     while 1:
          time.sleep(60)
except KeyboardInterrupt:
	GPIO.cleanup()


<code python>

<code>
sudo python bewegungsmelder2.py

Anwendungsmöglichkeiten

Ein Bewegunsmelder mit dem Raspberry Pi kann vielfältig eingesetzt werden. Neben einem klassischen Bewegungsmelder, welcher bei Bewegung zum Beispiel ein Licht einschaltet, kann der Bewegungsmelder in Kompination mit einer Überwachungskamera sehr nützlich sein. Außerdem kan eine normale Alarmanlage realisiert werden.

Überwachungskamera

siehe Tutorials Raspberry PI

360° Überwachungskamera

Erweitere deine Alarmanlage mit einem Servo-Motor, so dass du deine Kamera auch fernsteuern kannst.

Servo Motor Steuerung