Temperatur-Messung mit dem DS18B20

By | 9. Juni 2018

Für das Messen von Temperaturen findet man verschiedenste Sensoren. In diesem Beitrag soll der Sensor DS18B20 zum Einsatz kommen. Diesen Sensor gibt es auch in einer wasserdichten Ausführung, die im folgenden an ein Arduino Board angeschlossen werden soll.

Dabei handelt es sich um einen sehr präzisen Sensor, der im Bereich von -55°C bis +125°C mit einer Auflösung von bis zu 12 Bit arbeitet. Jeder Sensor besitzt eine eindeutige 64Bit lange Serien-Nummer über die er identifiziert / angesprochen werden kann. Die Temeperatur-Werte werden über einen One-Wire-Bus mit einer maximalen Auflösung von 0,0625 Grad innerhalb 750ms berechnet und ausgegeben.

Der Anschluss erfolgt über die 3-Leitungen und einen 4,7 kOhm Widerstand von der Datenleitung gegen 5V als sogenannte parasitäre Stromversorgung. Diese wird nur einmal benötigt auch wenn man mehrere Sensoren verwendet.

Für den Arduino gibt es bereits fertige Bibliotheken, um den DS18B20 zu verwenden. Die Bibliothek zur Kommunikation per One-Wire ist in aktuellen Versionen der Arduino IDE schon enthalten. Für die darauf aufbauende Logik, um den Temperaturwert aus dem Sensor auszulesen, gibt es ebenfalls eine Bibliothek mit dem Namen “DallasTemperature”. Beide Bibliotheken können über den Bibliotheksverwalter der IDE leicht eingebunden werden. Das mitgelieferte Beispielprogramm “Tester” ermöglicht einen ersten Test nach dem der Sensor verdrahtet und mit dem Arduino verbunden wurde.

Ich möchte im folgenden den Umgang mit den Bibliotheksfunktionen etwas ausführlicher erklären. Aus diesem Grund habe ich mir einen eigenen Versuchsaufbau gebaut. Bei diesem habe 3 Sensoren über den Pin2 an den Arduino angeschlossen und ein erstes Test-Programm geschrieben, das mir angeben soll, wieviele Sensoren im Netzwerk angeschlossen sind. Nach dem die Anzahl der angeschlossenen Sensoren ermittelt wurde, müssen deren 64-Bit-Adressen ermittelt werden. Das entsprechende Programm sieht dann so aus:

Im nächsten Schritt geht es dann darum, die jeweiligen Sensoren über ihre Adressen anzusprechen und die Temperaturen auszulesen. Dies erfolgt nach dem gleichen Schema. D.h. man muss nur folgende Funktionsaufrufe zusätzlich in die Schleife einbauen:

Das führt dann zu einer ersten rudimentären Ausgabe der Temperaturen auf dem Monitor: