PIR Sensor am Raspberry Pi

PIR Sensor am Raspberry Pi Titelbild


Der Bewegungssensor

Der PIR ist ein Sensor, der Infrarotstrahlung erfassen und somit Bewegungen erkennen kann. Das Tolle daran ist, dass dieser Sensor so auch Bewegungen registrieren kann, wenn gar kein Licht vorhanden ist. Infrarotstrahlung ist nämlich nichts anderes als Wärmestrahlung. Da die meisten Lebewesen irgendwie Wärme ausstrahlen, können wir mit diesem Sensor prüfen, ob verdeckt operierende Geheimagenten-Ninjas in unsere Umgebung spionieren.

Aufbau PIR Bewegungssensor

Bevor wir den Sensor anschließen und programmieren, wäre es sehr hilfreich zu wissen, wie dieser überhaupt funktioniert. Oder glaubst du, da würden kleine Wesen drin sitzen, die 24/7 nach Bewegung Ausschau halten und das im Zweifelsfall an den Raspberry Pi mitteilen? Nein, das gibt es, zum Glück, nicht! Der Sensor misst wie viele Infrarotstrahlen aus den unterschiedlichen Gegenden zu ihm kommen. Das kann der Sensor messen, da diese den Stromfluss in dem Sensor beeinflussen. Wir müssen uns zum Glück nicht um das Auslesen dieser Messungen kümmern. Der Sensor macht das von alleine. Aber wie wird jetzt die Bewegung gemessen? Bewegung (von Menschen) verändert die Menge der Infrarotstrahlen, die der Sensor misst. Das heißt, wenn sich von dem einen auf den anderen Moment etwas ändert, hat der Sensor eine Bewegung erkannt und teilt das mit. Gleichzeitig ist der Sensor aber schon so schlau, das er kleine Veränderungen im Zimmer, zum Beispiel einen langsamen Anstieg der Temperatur, einfach ignoriert, da das sehr vermutlich keine bewegenden Menschen sind. Aber wie bekommen wir jetzt konkret mit, wenn der Sensor gemessen hat, dass sich etwas bewegt? Über den Data Pin kann der Sensor nur das Signal 'keinen Strom' oder 'Strom' senden. Eine Bewegung wird dann erkannt, wenn nach 'keinen Strom', Strom durch den Sensor fließt. Also auf 0 eine 1 bei der Messung folgt.

Anschließen

PIR Bwegungssensor am Raspberry Pi

Anschlüsse am Pi Anschlüsse am Sensor
5V VCC
GPIO 4 Data
GND GND



nano pir.py


import RPi.GPIO as gpio
import time

gpio.setmode(gpio.BCM)
pir = 4
gpio.setup(pir,gpio.IN)

jetzigerStatus  = 0
vorherigerStatus = 0

try:
  while gpio.input(pir)==1:
    jetzigerStatus  = 0
  print("Bereit zum messen")
  while True :
    jetzigerStatus = gpio.input(pir)
    if jetzigerStatus == 1 and vorherigerStatus==0:
      print("Es gibt Bewegung")
      vorherigerStatus = 1
    elif jetzigerStatus == 0 and vorherigerStatus==1:
      print("Bereit zum Messen")
      vorherigerStatus = 0
    time.sleep(0.01)

except KeyboardInterrupt:
  print("Beendet")
  gpio.cleanup()
sudo python3 pir.py



Schritt für Schritt

In den ersten beiden Zeilen importieren wir die benötigten Bibliotheken.

In Zeile 5 speichern wir in der Variablen pir ab, dass wir den GPIO-Pin 4 mit dem Data Anschluss am Sensor verbunden haben.

In Zeile 6 legen wir fest, dass wir am GPIO-Pin 4 den Input messen wollen und keinen Output geben werden.

Bevor wir mit dem richtigen Auslesen des Sensors anfangen können, müssen wir erst noch zwei Variablen definieren und beide auf 0 setzen. Einmal jetzigerStatus und vorherigerStatus. Wie oben schon erklärt, wissen wir nur, ob sich etwas bewegt hat, wenn wir zuerst keinen Strom (0) und dann Strom (1) vom Sensor messen.

In Zeile 11 kommt auch wieder try vor. Es wird also alles ausgeführt, was eingerückt ist, solange nicht die except-Bedingungen in Zeile 25 eingetreten ist. Wenn das der Fall ist, wird alles ausgeführt, was in Zeile 26 und 27 steht. Dann geben wir nur eine kleine Benachrichtigung für den User aus, dass das Programm beendet wurde und räumen dann noch einmal die Belegungen der GPIO-Pins auf.

In Zeile 12 lesen wir solange den Input vom Sensor, bis wir Strom (1) messen. Dadurch wissen wir, dass der Sensor bereit ist zum Messen und legen den jetzigerStatus noch einmal auf 0.

Nach der Nachricht an den Benutzer in Zeile 14, dass wir jetzt wirklich messen, machen wir das auch mit der while-Schleife in Zeile 15. Diese ist so eingestellt, dass sie solange läuft, bis das Programm beendet wird. In Zeile 16 wird der Variablen jetzigerStatus der Wert zugewiesen, den wir vom Sensor mit gpio.input() messen. Das kann wieder nur eine 1 oder eine 0 sein.
In Zeile 17 startet die if-Abfrage. Wenn die Variable jetzigerStatus 1 ist und die andere Variable vorherigerStatus 0, wissen wir, dass es eine Bewegung gab. Momentan geben wir einfach nur in Zeile 18 eine Nachricht aus. Hier könnten wir aber zum Beispiel auch eine Funktion ausführen. Dann ist wichtig, dass wir die Variable vorherigerStatus auf 1 setzen, damit wir wissen, dass wir etwas gemessen haben und jetzt wieder darauf warten müssen, dass der Sensor sich wieder "erholt". Das ist der Fall, wenn die Bedingung in Zeile 20 erfüllt ist. Dann muss natürlich die Variable vorherigerStatus gleich 0 sein. Nach der if-Abfrage lassen wir das ganze Programm für zehn Millisekunden pausieren, denn selbst wenn wir den Sensor schneller abfragen, werden sich die Werte nicht verbessern.

Du bist dran: Jetzt kannst du messen, wenn sich Menschen im Raum bewegen! Wie wär's mit einer Alarmanlage oder einem Selfi-Bewegungs-Automaten?

Noch Fragen oder Feedback?

Bevor du eine Frage stellen kannst musst du dich zuerst Anmelden oder Regestrieren!