5.2 - Temperaturmessung mit einem DS18B20

 
ds18b20intro 5.2
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.
 
 
    1. OneWire Library von Paul Stoffregen → DOWNLOAD
    2. Dallas Temperatur Control Library vom Miles Burton → DOWNLOAD
 
 
 
 

Teileliste

 
 
 

Anschlussplan

 
Anschlussplan 5.2     Schaltplan 5.2     DS18B20 Pinbelegung
 
 
 
 

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. 
  • 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.
 
 
Das war es auch schon  fertig
 
 
 
 
downloadbutton arduino
 
 
 
 

Seitennavigation
 
arrow button prev               arrow button up               arrow button next

Einen Kommentar verfassen

Als Gast kommentieren

0
  • Keine Kommentare gefunden