Raspberry Pi: Mit Sensoren und GPIO arbeiten

28 Feb
28. Februar 2015

Den Raspberry Pi kann man um die Hardwarefamilie der Sensoren mittels GPIO erweitern. Diese liefern Daten, die man auswerten kann und daraus resultierend Aktionen verschiedenster Art ausführen lassen kann. Nahezu alle verfügbaren Sensoren mit Pin-Anschlüssen sind theoretisch am Raspberry Pi verwendbar. Jedoch bedarf es dazu häufig zusätzlichen Treibern, um die einzelnen Sensoren ansprechen zu können. Im Folgenden erkläre ich anhand von zwei Sensoren wie man diese prinzipiell ansprechen kann.

Verwendete Sensoren
Bei einem Versuchsaufbau verwendete ich den PIR Bewegungssensor und den DHT11 Temperatur- und Luftfeuchtigkeitssensor. Diese beiden Sensoren sind recht günstig und dennoch hochwertig. Der technische Hauptunterschied liegt (neben der anderen Funktion) darin, dass der DHT11, im Gegensatz zum PIR, zusätzliche Treiber benötigt.

PIR Bewegungssensor
Der PIR (Passiv Infrared Sensor) ist einer der gängigsten Bewegungsmelder Sensoren. Meist besitzt er eine milchfarbene wabenartige Kuppel. Der Sensor reagiert auf Temperaturveränderungen in seinem Sichtfeld, kann jedoch nur Veränderungen aufnehmen und keine konkreten Werte. Bleibt ein Objekt an einer Stelle, so reagiert er nicht, sofern sich dessen Temperatur nicht signifikant verändert.

Der Sensor besitzt in der Regel drei Pins, die man mit der GPIO-Schnittstelle des Raspberry Pis verbindet:

  • VCC: Versorgungsspannung 5V
  • OUT: Digitaler Ausgang
  • GND: Masse (0V)

Das Ausgangssignal des Sensors (OUT) gibt lediglich einen logischen Wert (0 oder 1) auf einem 3,3V-Pegel aus (entspricht GPIO-Pin). Die Versorgungsspannung des Sensors muss bei diesem Sensor zwischen 4,5V und 20V liegen, weshalb wir den VCC Pin mit einem der 5V Pins des Raspberry Pis verbinden.

Auf dem Sensormodul befinden sich an der Unterseite in der Regel zwei Potis (Schraubregler). Meist kann man mit dem S beschrifteten Poti die Empfindlichkeit des Sensors (min. 3m Reichweite, max. 7m Reichweite) einstellen. Der mit T beschriftete Poti bestimmt die Verzögerungszeit des Outputs. Das bedeutet, dass die Zeit geregelt wird wie lange der Sensor den gesetzten Wert beibehält, wenn er eine Bewegung erkannt hat (min. 5s, max. 300s).

Der PIR Bewegungssensor lässt sich in Python recht einfach ansprechen. Es werden unter Raspbian keine weitere Treiber benötigt. Im Folgenden ein Script, dass auf Pin 25 (änderbar in Zeile 6) den OUT des PIR hat und die Bewegung erkennt. In der Funktion motion() bzw. motionGone() lassen sich Aktionen definieren, wenn deine Bewegung erkannt wurde bzw. nicht mehr passiert.

nano ~/pir.py

DHT11 Temperatur- und Luftfeuchtigkeitssensor
Der DHT11 Temperatur- und Luftfeuchtigkeitssensor ist ein recht kleiner Sensor, der sein eigenes Gehäuse mitbringt. Der Messbereich liegt zwischen 20% und 90% Luftfeuchtigkeit (Toleranz +-5%) wie auch Temperatur 0°C bis 50°C (Toleranz +-2°C). Die Auflösung des Sensors liegt bei 1% Luftfeuchtigkeit bzw. 1°C Temperatur.

Der Sensor besitzt vier Pins, die man mit der GPIO-Schnittstelle des Raspberry Pis verbindet:

  • VCC: Versorgungsspannung 5V
  • Data: Digitaler Ausgang bzw. frei programmierbarer GPIO Pin
  • NC: Nicht verbunden (irrelevant)
  • GND: Masse (0V)
Step 1

Zur Nutzung des Sensors benötigen wir eine Python-Library von Adafruit. Da das dafür nötige Kernelmodul nicht im Betriebssystem (Raspbian) integriert ist, müssen wir dieses herunterladen, kompilieren und installieren. Zum Zeitpunkt als dieser Artikel verfasst wurde, war auf Airspayce.com Version 1.38 der Treiber aktuell.

wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.38.tar.gz
tar zxvf bcm2835-1.38.tar.gz
cd bcm2835-1.38
./configure
make
sudo make check

sudo make install
cd ..
sudo rm -r bcm2835-1.38

Step 2

Wir müssen nun mittels des Paketmanager APT Pakete installieren, die von der Adafruit Python-Library benötigt werden bzw. wir benötigen um sie herunterzuladen.

sudo apt-get install git python-dev

Step 3

Jetzt können wir die Python-Library von Adafruit aus deren Git Repository herunterladen und das Setup Script ausführen.

git clone https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code.git
cd Adafruit-Raspberry-Pi-Python-Code/Adafruit_DHT_Driver_Python
python setup.py build

Step 4
In dem Verzeichnis build/lib.linux-armv6l-2.7 befindet sich nun die dhtreader.so Datei, die in dasselbe Verzeichnis muss, in der später das Python Script geschrieben wird. Im Beispiel legen wir sie in das Home-Verzeichnis des Benutzers.

cp build/lib.linux-armv6l-2.7/dhtreader.so ~

Den DHT11 Temperatur- und Luftfeuchtigkeitssensor können wir nun auch mittels eines Python Scripts ansprechen. Im folgenden Script ist der Sensor mit seinem Data Ausgang auf Pin 4 (änderbar in Zeile 6) angeschlossen. Das Script beinhaltet eine Schleife, da der Sensor gelegentlich keine richtigen Daten sendet. In diesem Fall versucht das Script die Daten zehnmal anzufordern und wenn auch dies nicht funktioniert, gibt es sowohl eine Temperatur als auch eine Luftfeuchtigkeit von 0 aus.

nano ~/dht.py

Allgemeiner Hinweis zu weiteren Sensoren
Wie man an den beiden Beispielen sehen kann, ist es gar nicht so schwer mit Sensoren auf dem Raspberry Pi zu arbeiten. Insbesondere wenn man in Python schreiben kann ist dies um ein vielfaches einsteigerfreundlicher als C und C++ Code.

Bevor man sich einen Sensor kauft sollte man sich also am besten informieren ob man zusätzliche Treiber benötigt und woher man deren Code zum Kompilieren bekommt. Außerdem ist es empfehlenswert zu sehen ob es eine Möglichkeit gibt, den Sensor in Python anzusprechen und ggf. nach einem anderen Sensor mit derselben Funktion Ausschau halten.

Beim Kauf selbst sollte man vergleichen wo man diesen kauft, da es häufig mehrere Versionen gibt, die im Kern jedoch auf derselben Elektronik basieren und man an dieser Stelle nicht selten deutlich sparen kann.

Dir hat der Artikel gefallen?
Teile ihn mit deinen Freunden!
12 Antworten
  1. Stephan says:

    Danke für deine Anleitung gerade für den Temperatur Sensor!
    Jetzt aber noch meine Frage (bin noch anfänger) wie kann man das schön auslesen das man zum Beispiel per Browser auf den PI geht und alles schön Grafisch angezeigt bekommt .

    Grüße

    Stephan

    Antworten
    • Jan Karres says:

      Dazu müsstest du dir ein Webinterface bauen, dass dir die ermittelten Werte entsprechen aufbereitet. Das ist auch ein Thema, dass ich gerne in den kommenden Monaten im Blog Stück für Stück angehen möchte.

      Antworten
  2. Stephan says:

    Vielen Dank für die Anleitung. Ich habe diese und auch andere bereits getestet. Leider passiert bei mir beim Aufruf des Python Scriptes nichts. Der Raspi scheint in einer Endlosschleife hängen zu bleiben. Konkret geschieht dies, nach Aufruf des Kommandos dhtreader.read(TYPE,PIN)
    Vielleicht hast Du einen Tipp?

    Vielen Dank!

    Antworten
    • Stephan says:

      Ich habe den Fehler gefunden. Es hat sich wieder eine Wahrheit bewiesen: Wer lesen kann, ist klar im Vorteil. Ich habe falsch verkabelt. Jetzt funktionier alles. Heißt aber auch: Bei Aufruf des Skriptes OHNE angeschlossenen DHT22 hilft zum Beenden nur noch das KILL-Kommando.

      Antworten
  3. Maik says:

    Wenn ich das richtig sehe, benötigt man für den DHT11 noch ein Widerstand, richtig?

    Antworten
  4. Kleinhirn says:

    Perfekte Anleitung, hat auf Anhieb auch für den DHT22 funktioniert!
    Der DHT22 gibt auch eine Dezimalstelle aus. Das erhöht zwar nicht Messgenauigkeit, ist aber für die Trenderkennung sehr nützlich. Hierzu nur folgende Anpassungen:
    type=22

    temperature = „%3.1f“ % value[0]
    humidity = „%3.1f“ % value[1]

    Antworten
  5. Peter says:

    Hallo,

    ich hätte eine Frage …. ich benutze den DHT22 Sensor und wenn ich den PIn4 mit
    sudo ./Adafruit_DHT 22 4 auslese bekomme ich nur die folgende Meldung:
    Die komplette Installation der Treiber etc. lief problemlos durch …

    Adafruit_DHT 22 4
    Using pin #4
    Data (0) : 0x0 0x0 0x0 0x0 0x0

    in diversen Beispiel sollte hier eigentlich auch Temperatur und Feuchtigkeit angezeigt werden.

    Frage: Ist das Teil defekt?

    Wenn ich das Programm oben laufen lassen, dann bricht es mit einem Fehler Syntax Error ab und zwar zweitletzte Zeile markiert ist das Hochkommata temperature?

    Danke schon mal Voraus

    Gruss

    Peter

    Antworten
  6. niwu says:

    Hallo
    ich versuche grade mich an deinen Scripten .

    Speziell PIR Bewegungssensor

    ich komme da nicht weiter.
    Zeile 15 – zeile 18

    ich möchte das dort ein sh script aufgeführt wird.

    Hast du da eine Idee?

    Nils

    Antworten
  7. Patti4832 says:

    Der Downloadlink von Adafruit funktioniert nicht mehr. Es wird nur eine README.md Datei runtergeladen. Gibt es noch eine weitere Möglichkeit?

    Antworten

Antworten

Kommentar verfassen

JanKarres.de © 2007-2018