Raspberry Pi

Raspberry Pi: PIR Bewegungsmelder HC-SR501 ansteuern

Raspberry Pi: PIR Bewegungsmelder ansteuern

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.

PIR Bewegungssensor

PIR Bewegungssensor

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

Bewegungsmelder Python (Screenshot PuTTy)

Bewegungsmelder Python (Screenshot PuTTy)

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

Bewegungsmelder Python (Screenshot PuTTy)

Bewegungsmelder Python (Screenshot PuTTy)

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.

Hinterlasse eine Antwort

Kommentare