Blog der Heimetli Software AG

Ein passiver Infrarotsensor (PIR) am Raspberry

Dieser Sensor stammt ebenfalls aus dem Starterkit. Er hat die Bezeichnung DYP-ME003. Nach den Fotos zu urteilen ist er baugleich zum HC-SR501.

Raspberry mit PIR-Sensor

Diesen Sensoren begegnet man sehr häufig, denn die meisten Bewegungsmelder für Aussenleuchten sind nach diesem Prinzip aufgebaut. Aber auch in den Gebäuden findet man sie immer öfter, zum Beispiel um Energie für die Beleuchtung zu sparen.

Anschluss des PIR an den Pi

Drei blanke Anschlusspins ohne Bezeichnung, Ohne Google wäre da nicht viel zu machen...

Wenn man mal die Typenbezeichnung herausgefunden hat, liefert Google sowohl Links zu einem oberflächlichen Datenblatt als auch Youtube-Videos mit Beispielschaltungen. Alle Videos setzen aber auf Arduinos oder sogar diskrete Elektronik.

Das spezielle an diesem Sensor: er braucht mindestens 5V als Betriebsspannung. Das ist zwar noch möglich mit dem Pi, aber ich habe befürchtet dass der Ausgang dann auch 5V liefert. Und das ist eindeutig ungesund für einen Raspberry!

Das Schema des Moduls zeigt, dass es einen Spannungsregler auf dem Print gibt. Dieser Spannungsregler versorgt den Chip auf dem Board mit 3.3V. Der Ausgang kommt direkt von diesem Chip und müsste demgemäss ebenfalls 3.3V liefen.

So ganz habe ich der Sache immer noch nicht getraut, aber sorgfältiges Nachmessen (ohne Pi!) ergab tatsächlich 3.28V bei High-Pegel. Passt also wunderbar.

Verkabelung des Sensors (genau hinsehen, rot ist am 5V Pin!):

Steckverbinder beim Sensormodul
Steckverbinder beim Pi

Das Shell-Script zur Demonstration

Auch zu diesem Sensor gibt es ein Test-Script. Obwohl es sehr ähnlich aussieht wie das Programm zum Regensensor macht es etwas anderes.

#!/bin/bash

# Definition des Pins
PIN=4

# Den Pin exportieren wenn er nicht schon exportiert ist
if [ ! -d /sys/class/gpio/gpio$PIN ]
then
  echo $PIN > /sys/class/gpio/export
fi

# Den Pin als Eingang definieren
echo "in" > /sys/class/gpio/gpio$PIN/direction

# Den Zustand des Eingangs lesen
previous=$(cat /sys/class/gpio/gpio$PIN/value)

# Endlose Schleife
while true
do
  # Den Zustand des Eingangs lesen
  current=$(cat /sys/class/gpio/gpio$PIN/value)

  # Ausgeben wenn der Zustand geändert hat
  if [ $current -ne $previous ]
  then
    if [ $current -eq 1 ]
    then
      omxplayer /usr/share/scratch/Media/Sounds/Animal/Kitten.wav > /dev/null
    else
      omxplayer /usr/share/scratch/Media/Sounds/Effects/Plunge.wav > /dev/null
    fi
  fi

  previous=$current
  sleep 0.1
done

Und auch dieses Script soll mit sudo gestartet werden. Die Ausgabe ist uninteressant, und deshalb gibt es kein Log der Konsole.

Test des Sensors

Der Sensor funktioniert mehr oder weniger wie erwartet. Ueberrascht hat mich die Wartezeit bis der Sensor wieder anspricht.

Die Beschreibung des Jumpers ist verkehrt. Um ein Retrigger zu bekommen musste er genau umgekehrt eingesteckt werden.

Genaue Tests der Reichweite habe ich nicht gemacht, doch aus mindestens 3 Metern Entfernung hat er geschaltet, und das obwohl er einfach auf dem Tisch lag.