Raspberry Pi – Temperatur-Sensor 18B20
Im letzten Artikel habe ich ein Sensoren Set mit 37 unterschiedlichen Sensoren vorgestellt, dass ich mir bereits vor einiger Zeit zugelegt habe. In diesem Artikel beschäftige ich mich mit dem ersten dieser Sensoren, dem Temperatur-Sensor 18B20. Damit können wir die aktuelle Raumtemperatur messen und uns jederzeit ausgeben lassen. Ich zeuge wie man den Sensor am Raspberry Pi verwendet und über ein Python Skript dessen Messwert auslesen kann.
Temperatur-Sensor 18B20
Der Temperatur-Sensor 18B20 wird auch als DS18B20 bezeichnet und ist genau wie die beiden verwandten Sensoren DS18S20 und DS1822 ein so genannter 1-wire Sensor. Das bedeutet er hat 3 Leitungen, wobei sich diese auf Spannung (+5V), Masse (GND) und Daten aufteilen. Die Messdaten werden somit von einer einzigen Leitung abgefragt.
Die Hardware
Der DS18B20 Sensor ist ein digitaler Thermometer, welcher die Temperatur in Grad Celsius misst. Er hat folgende Eigenschaften:
- die Temperatur wird in tausendstel Grad Celsius gemessen und ausgegeben
- Temperaturen von -55 bis +125 Grad Celsius können gemessen werden
- zwischen -10 und +85 Grad Celsius haben die Messwerte eine Genauigkeit von ±0,5 Grad Celsius
- über eine Prüfziffer wird bestätigt ob eine Messung korrekt verlaufen ist
Für die Messung von Temperatur (draußen oder innen) ist dieses Bauteil perfekt geeignet. Für genaue Messungen bei industriellen Geräten ist dieser Sensor zu ungenau.
Versuchsaufbau
Dank der Ausführung als eigene kleine Platine können wir den Temperatur-Sensor 18B20 ohne weiteren Widerstand direkt mit der GPIO Schnittstelle des Raspberry Pis verwenden. Das heißt man kann diesen direkt mit 3 weiblich-weiblich Steckdrähte an die Schnittstelle anstecken. Da ich aber leider keine weiblich-weiblich Steckdrähte besitze verwende ich folgendes:
- 3 weiblich-männlich Steckdrähte
- 1 Steckbrett (Breadboard)
- Temperatur-Sensor 18B20
Der Versuchsaufbau ist im Bild zu sehen. Ich verwende die GPIO Pins 2 (+5V) als Stromversorgung, 4 (GND) als Masse und 7 (GPIO4) als Datenleitung. Diese muss man mit den 3 Pins am Sensor korrekt verbinden. Man beachte, dass eine kleine LED auf der Platine ganz schwach leuchtet (diese blinkt später während der Messung kurz auf).
Die erste Messung
Ist der Sensor korrekt an den Raspberry Pi angeschlossen, dann können wir mit nur wenigen Kommandos die Temperatur messen. Raspbian Linux stellt für die GPIO Schnittstelle und 1-wire Sensoren eigene Kernel Module bereit. Wir müssen diese aktivieren:
sudo modprobe w1-gpio pullup=1 sudo modprobe w1-therm
Um die Kernel Module aktivieren zu können benötigen wir root Rechte! Diese Aktivierung der Kernel Module hat zur Folge, dass alle 1-wire Sensoren die an der GPIO Schnittstelle angeschlossen sind und erkannt wurden nun unter /sys/bus/w1/devices aufgelistet werden. Die Ausgabe des Verzeichnisses zeigt in meinem Fall folgendes Bild:
cd /sys/bus/w1/devices/ ls
Es finden sich in dem Verzeichnis zwei symbolische Links mit den Namen w1_bus_master1 und 28-00000593a3a0. Mein 18B20 Temperatur-Sensor wird also mit der kryptischen Bezeichnung 28-00000593a3a0 erkannt! Das ist keine zufällige Kombination aus Ziffern und Buchstaben sondern dessen eindeutige Identifikationsnummer. DS18B20 Sensoren beginnen beispielsweise immer mit der Zahl 28, DS1820 und DS18S20 mit der Zahl 10 usw. Anhand der Nummer kann man erkennen welchen Typ Sensor man besitzt.
Die Messung der aktuellen Temperatur ist nun relativ einfach. Wir wechseln in das verlinkte Verzeichnis und finden dort die Datei w1_slave. Sobald wir dessen Inhalt ausgeben, führt der Sensor eine Messung durch und liefert uns das Ergebnis. In meinem Fall sieht das folgendermaßen aus:
Es wurde eine Temperatur von 22812 tausendstel Grad gemessen, was 22,812 Grad Celsius entspricht. Geht man von einer Ungenauigkeit von ±0,5 Grad aus kann man sagen, dass es aktuell bei mir rund 23 Grad Celsius hat. Über eine Prüfsumme (crc=70) wird noch geprüft ob die Messung korrekt funktioniert hat. In diesem Fall zeigt uns das „YES“ an, dass es so gewesen ist.
Die Kernel Module müssen nach jedem Systemstart wieder neu aktiviert werden. Damit wir auf der Kommandozeile schneller messen können steht uns die Datei /etc/modules zur Verfügung. Wenn wir die beiden Modul dort eintragen, dann werden sie automatisch beim Systemstart geladen:
# /etc/modules w1-gpio pullup=1 w1-therm
Fazit
Eine einfache Messung der aktuellen Temperatur ist dank dem Temperatur-Sensor 18B20 relativ einfach zu bewerkstelligen. In dem Artikel habe ich gezeigt wie man diesen an die GPIO Schnittstelle anschließt und eine Messung über die Kommandozeile mit der Hilfe zweier Kernel Module durchführt. Im nächsten Teil zeige ich euch, wie ihr mit Python diese Messung vereinfachen und automatisieren könnt. Es wäre doch recht interessant diese Messung zum Beispiel jede Stunde durchzuführen und das Ergebnis zu protokollieren.
Hallo Werner, oder wer immer dies liest,
ich habe die Temperatursensoren angeschlossen um meine Solaranlage zu steuern. Hat zunächst alles gut geklappt. Nun nach einiger Zeit erscheinen die Fühler-Ids nicht mehr richtig und der Link W1-Slave fehlt in meinem Rasbian. Ich habe dann mehrmals versucht, eventuelle Korrosionen zu bearbeiten, dann alle 3 Fühler entfernt, andere angeschlossen usw. dann ging es wieder. Dann wieder zurück zu den in die Solaranlage eingebauten und alles klappte wieder. Nun geht wieder nichts mehr. Erst nach alleinigem Anschluss eines neuen Fühler, wurde der wieder erkannt. Ich habe z.T. lange Kabel, aber wenn die Kiste erst einmal sauer ist, werden auch die kurzen nicht mehr angezeigt. Ich habe auch die beiden modprobe gpi.. und therm neu aufgerufen. Hilft auch nichts. Hat jemand Ahnung? Vielen Dank! Bitte per mail antworten, wenn möglich. Herzlicher Gruß
Michael
Hallo Michael, oder wer immer das liest,
ich weiß ja nicht wie Aktuell diese Frage noch ist,
aber ich habe genau das gleiche Problem.
Konnte dieses Problem gelöst werden?
Kann mir da jemand Helfen?
Google will mir da auch nicht wirklich was zu sagen.
Oder ich bin in der Sache zu Doof zum suchen.
Vielen Dank schon mal im Voraus.
Gruß Jan
Das ist zwar ein Temperatursensor aber KEIN DS18B20. Einfach mal Google fragen
also laut Beschreibung ist das ein 18B20 Sensor. Möglicherweise ist die Bauform des DS18B20 eine andere.
Wenn du zu dem DS18(B)20 einen BMP180 nimmst, kannst du auch direkt einen BME280 anschließen. Der hat, im gleichen Package wie der BMP180, alle Sensoren vereint und ist nicht wirklich teurer.