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.

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, dass 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 ‚Spannung liegt an‘ (HIGH) oder ‚keine Spannung liegt an‘ (LOW) senden. Eine Bewegung wird dann erkannt, wenn eine positive Flanke gemessen wird. Also wenn eine Spannungsänderung von LOW auf HIGH gemessen wird.

Anschließen

Anschlüsse am PiAnschlüsse am Sensor
5VVCC
GPIO 4Data
GNDGND
$ nano pir.py
import RPi.GPIO as gpio
import time

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

try:
  while True:
    if gpio.input(pir) == 0:
      print("Bereit zum messen!")
      while gpio.input(pir) == 0:
        time.sleep(0.01)
      print("Bewegung erkannt")
    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.

In Zeile 8 kommt auch wieder try vor. Es wird also alles ausgeführt, was eingerückt ist, solange nicht die except-Bedingungen in Zeile 17 eingetreten ist. Wenn das der Fall ist, wird alles ausgeführt, was in Zeile 18 und 19 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 10 fragen wir ab, ob der Sensor-Pin LOW ist und der Sensor somit bereit zum Messen ist. Wenn nicht, dann warten wir 10ms, landen wieder am Anfang der while-Schleife und versuchen es nochmal. Sollte der Pin jetzt LOW sein, dann schreiben wir in die Konsole, dass unser Sensor jetzt bereit ist. Dadrauf folgt in Zeile 12 und 13 eine while Schleife, die einfach nur so lange wartet, bis der Pin nicht mehr LOW ist, also eine Spannung (HIGH) anliegt. Wenn das der Fall ist, haben wir eine Bewegung erkannt und scheiben das in Zeile 14 in die Konsole.

Du bist dran: Jetzt kannst du messen, wenn sich Menschen im Raum bewegen! Wie wär’s mit einer Alarmanlage oder einer selbstauslösenden Kamera?