Raspberry Pi

Raspberry Pi: 1-wire Temperatursensor DS1820 ansteuern

Raspberry Pi und Temperatursensor DS1820

Ein großer Vorteil von Einplatinencomputern, wie dem Raspberry Pi, ist die Möglichkeit der freien Programmierung und Nutzung von GPIO-Pins. Die meisten Minirecher unterstützen außerdem eine Reihe von gängigen Bussystemen. Dadurch können verschiedene kompatible Geräte über ein Leitungssystem mit unterschiedlichen Befehlen angesteuert werden. Das sogenannte 1-wire Bussystem ist ein möglicher Bus, den der Pi unterstützt. Bei diesm findet der Datenaustausch über eine Signalleitung statt.

Temperatursensor DS1820

Ein beliebtes Projekt unter den Pi-Anwendern ist die Messung der Raum- und Außentemperatur mit Hilfe des Temperatursensors DS1820. Verwandte Temperatursensoren sind der DS18S20 und DS18B22. Die integrierten Schaltkreise sind in einem TO-92 Gehäuse untergebracht und beinhalten den Temperatursensor, einen Analog-Digitalwandler und ein 1-wire Interface. Die genannten Sensoren unterscheiden sich prinzipiell im Preis und der Messgenauigkeit.

Für unser Tutorial verwenden wir den Temperatursensor DS1820. Dieser ist bei diversen Händlern erhältlich, unteranderem auch bei AmazonRaspberry Pi: 1-wire Temperatursensor DS1820 ansteuern. Der Sensor besitzt 3 Pins und kann mit wenig Aufwand vom Pi angesteuert werden. Folgende drei Anschlüsse sind vorzufinden:

DS1820 (Bild: kompf.de)

DS1820 (Bild: kompf.de)

  • Pin 1: GND, Masse
  • Pin 2: DQ, Daten
  • Pin 3: VDD, Betriebsspannung

Schaltungsaufbau Temperatursensor DS1820

Üblicherweise wird der Sensor mit einer Betriebsspannung (Pin 3) zwischen 3 und 5 Volt betrieben, daher verbinden wir den Pin 3 mit dem 3,3 Volt-Pin des Raspberry Pi. Weiterhin schließen wir den Ground Pin 1 an einen Ground vom Pi (Pin 9), sowie die Datenleitung DQ des Sensors (Pin 2) mit dem GPIO Pin 4. Zwischen die Datenleitung und die 3,3 Volt Spannungsversorgung schalten wir einen 4k7 Ohm Widerstand. Weitere Temperatursensoren können auf gleichem Weg parallel über den 1-wire Bus angeschlossen und ausgelesen werden. Unabhängig davon, wie viele Sensoren wir verwenden, ist insgesamt nur ein 4k7 Ohm Wiederstand notwendig. Das GPIO-Headerlayout kann hier nachgelesen werden.

Aus den Angaben ergibt sich nun folgende Schaltung zur Ansteuerung von einem oder mehreren Sensoren.

DS1820 Ansteuerung

DS1820 Ansteuerung

Software: Auslesen des DS1820 1-wire

Für das Auslesen der Temperatur verwenden wir einen Raspberry Pi mit dem Betriebssystem Raspbian. Softwareseitig bringt die Raspbian Linux Distribution bereits die benötigten 1-Wire Kernel-Module mit. Diese sind notwendig um auf den 1-Wire Bus zugreifen zu können.

Mit den folgenden Terminalbefehlen können die notwendigen Module geladen werden:

sudo modprobe wire
sudo modprobe w1_gpio
sudo modprobe w1_therm

Zur Überprüfung können wir mit dem Befehl lsmod nachvollziehen, ob die gerade gewählten 1-Wire Module geladen wurden. Es sollte sich in etwa folgende Ausgabe ergeben:

Screenshot lsmod

Screenshot lsmod

Damit die gerade genannten 1-Wire Kernel-Module nach jedem Systemstart automatisch geladen werden, müssen wir diese in die Datei /etc/modules eintragen. Dazu verwenden wir den Editor nano.

sudo nano /etc/modules

In die Datei fügen wir folgende Zeilen ein:

wire
w1-gpio
w1-therm

Nach der Bearbeitung von /etc/modules können wir die Datei speichern und schließen.

Da wir mit dem 1-Wire-Bus arbeiten, können mehrere Sensoren nach der oben gezeigten Schaltung am Pi ausgelesen werden. Zur Identifikation besitzt jeder Temperatursensor einen vom Hersteller eindeutig vergebenen Code. Jeder angeschlossene Sensor bekommt im Verzeichnis /sys/bus/w1/devices/ sein eigenes Unterverzeichnis. Innerhalb des Verzeichnisses eines Sensor findet man immer die Datei w1_slave. Mit dem cat Befehl können wir daraus (via Terminal) die Temperatur auslesen. Wie das geau funktioniert wird nun nochmal Schritt für Schritt beschrieben.

Zunächst mal müssen wir herausfinden welche Identifikationsnummer unser Sensor hat. Damit erfahren wir auch wie das dazugehörige Verzeichnis heißt. Wir wechseln also zunächst in das Verzeichnis /sys/bus/w1/devices/ und lassen uns dort alle drin befindlichen Ordner und Dateien anzeigen.

cd /sys/bus/w1/devices/
ls

In meinem Fall habe ich einen Sensor angeschlossen mit der Identifikationsnummer 10-000802b5ab54. Anschließend wechseln wir in das gleichnamige Verzeichnis. Dort sehen wir das die genannte Datei w1_slave vorhanden ist.

cd /sys/bus/w1/devices/10-000802b5ab54
ls

Mit dem cat Befehl lesen wir anschließend die Datei und damit die momentane Temperatur aus. Es ergibt sich insgesamt folgender Verlauf und die im Bild dargestellte Ausgabe.

cat /sys/bus/w1/devices/10-000802b5ab54/w1_slave

Sreenshot Temperatur DS1820

Sreenshot Temperatur DS1820

Am Ende der Ausgabe finden wir die Angabe t=18250. Teilen wir diese Zahl durch 1000 ergibt sich eine aktuelle Temperatur von 18,250 °C.

Temperaturdaten mit PHP verarbeiten

Jetzt wo wir wissen wie man die Temperatur mit dem Sensor DS1820 ermittelt, kann man dies in vielen Varianten und Programmiersprachen umsetzen. An dieser Stelle möchte ich zeigen wie man mittels PHP die Temperatur auslesen und anschließend weiterverarbeiten könnte. Die Weiterverarbeitung der Temperatur in Form von einem Datenlogger mit einer Datenbank und einem entsprechendem Webinterface ist möglich und mit wenig Aufwand realisierbar. Vorraussetzung für eine Lösung mit PHP ist ein eingerichteter Webserver, wie zum Beispiel der Apache, mit den entsprechenden PHP Modulen.

Das auslesen der Temperatur kann in PHP mit folgenden Zeilen erledigt sein. Im Webinterface sollte damit die aktuelle Temperatur in °C ersichtlich werden.

<?php

$temp = exec('cat /sys/bus/w1/devices/10-000802b5ab54/w1_slave |grep t=');
$temp = explode('t=',$temp);
$temp = $temp[1] / 1000;
$temp = round($temp,2);

echo $temp . " &#x00B0;C";

?>

Quellen: it-adviser.net, Bild DS1820: kompf.de

Hinterlasse eine Antwort

Kommentar