5.2 - Temperaturmessung mit einem DS18B20
Der DS18B20 ist ein digitaler Tempertursensor mit einem Messbereich von -55°c - 125°C und einer Genauigkeit von +- 0,5°C, der über einen 1-Wire Bus angeschlossen wird.
Der Vorteil dieses Sensors ist sein relativ günstiger Preis (zwar teurer als ein NTC aber immer noch günstig), seine Genauigkeit und der Anschluss über den 1-Wire Bus, da man mehrere Temperatursensoren an nur einem einzigen Arduino Pin anschließen kann.
Ich werde als Beispiel drei DS18B20 anschließen, da das ja der Vorteil ist. Allerdings ändert sich der Code in meinem Beispiel nicht, egal wieviel Sensoren angeschlossen werden.
Um die DS18B20 ansprechen zu können, müssen vorher erst zwei Bibliotheken in die Arduino IDE eingebunden werden.
Ich werde als Beispiel drei DS18B20 anschließen, da das ja der Vorteil ist. Allerdings ändert sich der Code in meinem Beispiel nicht, egal wieviel Sensoren angeschlossen werden.
Um die DS18B20 ansprechen zu können, müssen vorher erst zwei Bibliotheken in die Arduino IDE eingebunden werden.
- OneWire Library von Paul Stoffregen → DOWNLOAD
- Dallas Temperatur Control Library vom Miles Burton → DOWNLOAD
Teileliste
-
Arduino IDE (Tutorial wurde mit 1.6 erstellt)
-
Arduino Uno (oder ein anderes Modell)
- Temperatursensor DS18B20
Anschlussplan
Code
#include <OneWire.h> // OneWire-Bibliothek einbinden #include <DallasTemperature.h> // DS18B20-Bibliothek einbinden // Konstanten const int owPin = 2; // Pin für OneWire Bus definieren const int intervall = 1000; // Intervall wie oft die Temperatur abgefragt wird (millisekunden) // Variablen unsigned long letzteMillis = 0; // Speichert die letzte Zeit (millis) der Temperaturabfrage OneWire oneWire(owPin); // OneWire Referenz setzen DallasTemperature sensors(&oneWire); // DS18B20 initialisieren void setup() { Serial.begin(9600); // Baudrate für die Ausgabe am Serial Monitor sensors.begin(); // DS18B20 starten //Anzahl der angeschlossenen Sensoren ausgeben Serial.print("Sensoren: "); Serial.println(sensors.getDeviceCount()); } void loop() { // Erfasst die aktuelle Zeit für den Abfrageinterval unsigned long aktuelleMillis = millis(); // Löst bei erreichen der Intervalzeit die Temperaturerfassung aus if(aktuelleMillis - letzteMillis >= intervall) { letzteMillis = aktuelleMillis; // speichert die Zeit der letzten Abfrage sensors.requestTemperatures(); // Temperatursensoren auslesen // Temperaturen der Sensoren auslesen for(int i = 0; i < sensors.getDeviceCount(); i++) { show_temperature(i + 1, sensors.getTempCByIndex(i)); } } } // Temperatur am Seriellen Monitor ausgeben void show_temperature(byte num,float temp) { Serial.print("Sensor "); Serial.print(num); Serial.print(": "); Serial.print(temp); Serial.print(" "); Serial.write(176); // damit wird das °-Zeichen dargestellt Serial.println("C"); }
Als erstes werden die oben erwähnten Bibliotheken eingebunden, damit die Sensoren angesprochen werden können.
Merke: Ale Befehle die mit "sensors.***" anfangen, gehören zum Funktionsumfang der Bibliotheken und können bei Interesse auf den oben verlinkten Webseiten nachgeschlagen werden.
Kommen wir zu den wichtigen Konstanten und Bibliothekseinstellungen.
Merke: Ale Befehle die mit "sensors.***" anfangen, gehören zum Funktionsumfang der Bibliotheken und können bei Interesse auf den oben verlinkten Webseiten nachgeschlagen werden.
Kommen wir zu den wichtigen Konstanten und Bibliothekseinstellungen.
- intervall legt fest, wie oft die Temperatur ausgelesen wird.
- "OneWire oneWire(owPin)" und "DallasTemperature sensors(&oneWire)" werden von den beiden Bibliotheken benötigt
Im setup werden mit sensors.begin(); die Temperatursensoren initialisiert. Zur Kontrolle lassen wir uns die Anzahl der erkannten Sensoren mit dem Befehl sensors.getDeviceCount(); im Seriellen Monitor ausgeben um eventuelle Fehler frühzeitig zu erkennen.
Im loop angekommen wird erst einmal abgefragt ob die Zeit von intervall erreicht wurde. Wenn ja, wird mit sensors.requestTemperatures(); die Temperatur der Sensoren ausgelesen. In der folgenden for Schleife wird dann für jeden angeschlossenen Sensor die Befehlskette show_temperature ausgeführt, in der die Temperatur am Seriellen Monitor ausgegeben wird.
Im loop angekommen wird erst einmal abgefragt ob die Zeit von intervall erreicht wurde. Wenn ja, wird mit sensors.requestTemperatures(); die Temperatur der Sensoren ausgelesen. In der folgenden for Schleife wird dann für jeden angeschlossenen Sensor die Befehlskette show_temperature ausgeführt, in der die Temperatur am Seriellen Monitor ausgegeben wird.
Das war es auch schon
Einen Kommentar verfassen
Einloggen um Kommentare zu verfassen
Als Gast kommentieren