Temperaturmessung mit Dallas 18B20 am Multi Function Shield

Das Multi Function Shield, das ich ja bereits vorgestellt habe und das mittlerweile ja auch um einen Drehgeber erweitert wurde, bietet mit der Möglichkeit zur einfachen Anzeige von Daten auf seinem 4-fach-7-Segment-Display und den freien Anschlusspins eine gute Grundlage, Sensoren ausprobieren.

In meiner 37-in-one-Sensoren-Bulk-Sammlung finden sich auch ein Modul, auf dem ein Dallas 18B20 verbaut ist. Dies ist ein Chip zur Temperaturmessung.

Hardware: Dallas 18B20


Der DS18B20 bietet eine "1-wire"-Kommunikation, über die die Temperatur direkt ausgelesen werden kann. Es werden keine weiteren Bauteile benötigt. Er ist auf dem Modul KY-001 verbaut, mit dem es leicht auf ein Breadboard gesteckt oder über Dupont Kabel angeschlossen werden kann.

Außerdem verfügt das KY-001 über eine LED (samt Vorwiderstand), die anzeigt, wenn mit dem DS18B20 kommuniziert wird. Für die eigentlich Temperaturmessung ist dies aber nicht nötig. Es könnte auch ein "nackter" Dallas-Chip für diese Schaltung verwendet werden.

Die drei Anschlüsse des KY-001-Moduls (von oben nach unten, Vorderseite oben, Pins rechts) sind : Diese schließen wir im folgenden Versuchsaufbau an den 4x3-Header des Multi Function Board an, und zwar so, dass die Data-Leitung mit GPIO 5 (oberste Reihe) verbunden ist.

Das ist auch schon alles an Hardware-Aufbau. Den Rest übernimmt das MFS und die Software.


Der DS18B20 Chip hat folgende Anschlüsse (wenn man auf die Beschriftung schaut, von links nach rechts): Seine technischen Daten lauten: Jeder DS18B20 verfügt über eine eingebrannte Seriennummer, über die er adressiert werden kann. So können auch mehrere parallel auf der selben Leitung benutzt werden.

Die Kommunikation mit einem DS18B20 geschieht in 4 Schritten: Die genauen Funktionsweisen der Funktionen und die Timing sind dem Datenblatt (im Internet zu finden) zu entnehmen für Alle, die es genau wissen wollen.


Ich spare mir das an dieser Stelle, denn die nötige Funktionalität wurde bereits von jemand Anders in eine Arduino-Library gegossen. So müssen wir das Rad nicht neu erfinden, sondern es reicht, einfach die entsprechenden Bibliotheken einzubinden.

Dies sind zum Einen die OneWire Library (derzeit in Version 2.3.4)






und zum Anderen die Dallas Temperature Library (derzeit in Version 3.8.0, Homepage).

Die beiden Libraries können wir komfortabel über den Manüpunkt Sketch / Bibliotheken verwalten in der Arduino IDE suchen, auswählen und installieren.

Die ausgelesene Temperatur werden wir wieder auf der 7-Segment-Display des Multi Function Shields anzeigen.

Dann noch das untenstehenden Programm auf den Arduino laden und wir können schon mit dem Temperaturmessen loslegen:



Und das zugehörige Programm ist folgendes:

Source-Code

//////////////////////////////////////////////////////// // (C) 2019 by Oliver Kuhlemann // // Bei Verwendung freue ich mich über Namensnennung, // // Quellenangabe und Verlinkung // // Quelle: http://cool-web.de/arduino/ // //////////////////////////////////////////////////////// #include <TimerOne.h> // für Timings und Interrupts #include <MultiFuncShield.h> // API für das Multi Function Shield #include <OneWire.h> // für Dallas Temp.-Chip #include <DallasTemperature.h> // für Dallas Temp.-Chip #define PinData 5 // wo ist Data angeschlossen? OneWire oneWire(PinData); DallasTemperature sensors(&oneWire); void setup() { Timer1.initialize(); MFS.initialize(&Timer1); // initialize multi-function shield library sensors.begin(); // Dallas 18B20 initialisieren //Serial.begin (115200); } void loop() { MFS.beep(1, 5, 2); // bereit float gradC; // Temperatur in Grad Celsius while (1) { sensors.requestTemperatures(); // Temperatur vom Dallas abrufen gradC=sensors.getTempCByIndex(0); // ... und aus dem Speicher lesen MFS.write (gradC); delay(750); } }