Der Raspberry Pi und viele andere Einplatinencomputer besitzen eine Reihe an GPIO-Pins, welche frei genutzt werden können. Diese unterstützen diverse Bussysteme und können mit Hilfe von verschiedenen Programmiersprachen angesteuert werden. 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.
- Stellschraube Sx (Sensitive): Sensitivität der Bewegungserkennung
- Stellschraube Tx (Time): Bestimmt die Dauer, wie lange Data auf High beibt bei Erkennung einer Bewegung
- Anschlüsse: VCC (5 Volt), Out (Data), GND
- Jumper SW1 bzw. MD: Triggerverhalten von Out (Data)
- Position H: Data wird aller einer Sekunde auf High gesetzt bei Bewegungserkennung
- Position L: Data beibt auf High, solange eine Bewegung erkannt wird (Empfehlung)
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.
Schaltungsaufbau PIR Bewegungssensor
Ü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.
- Pin 1: VCC (5 Volt)
- Pin 2: Out, Data
- Pin 3: GND, Masse
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.
- VCC (5 Volt) an Pin 2
- Out, Data an Pin 8
- GND an Pin 6
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.
#!/usr/bin/python #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()
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.
Hallo Tony,
ich habe vor kurzem mir einen Raspi besorgt und wollte nun einen BWM programmieren.
Nach mehrmaligen Versuchen mit ganz verschiedenen Python Programmen funktioniert es leider immer noch nicht. (Es müsste aber alles richtig angeschlossen sein)
Hättest du vlt. noch einen Idee woran es liegen könnte?
Vielen Dank im voraus
Dan
Hallo Dan,
da ist zunächst mal die Frage(n):
Wie sieht dein aktueller Code aus? Welche Fehler kommen? Sicher das dein Aufbau richtig ist?
HI Dan,
wir sind 12 und haben es zu dritt hinbekommen. Es ist eigentlich ganz einfach man braucht nur ein bisschen Grips.
Hochachtungsvoll ihr Senf
Hallo
Währe schön wenn Sie bei der 2ten Version auch den Zeitstembel einfügen könnten.Danke
Hi,
ich habe das zweite skript mal so übernommen – auch den boardpin angepasst, aber leider ohne erfolg.
Inzwischen habe ich 2 PIR Sensoren hier und 2 PI’s.
Es gibt immer das selbe Ergebnis:
Das Skript läuft augenscheinlich fehlerfrei, aber der PIR erkennt einfach keine Bewegung…
:(
Auf unserer Sensorplatine fehlen die Bezeichnungen VCC, Out, GND und Sx, Tx. Erstere kann man ja auf deinem Bild sehen, die letzten beiden jedoch nicht. Was ist da was?
Ah, ich habe ein Bild gefunden:
http://datasheetcafe.databank.netdna-cdn.com/wp-content/uploads/2015/12/HC-SR501-Image.gif
Also auf deinem Foto wäre links Tx und rechts Sx.