Zum Inhalt springen

Temperaturmessung mit dem DS18B20

    Der DS18B20 ist ein digitaler Temperatursensor, der zur präzisen Messung von Temperaturen in einem breiten Bereich von -55°C bis +125°C verwendet wird. Er kommuniziert über ein 1-Wire-Protokoll, was bedeutet, dass er mit nur einer Datenleitung (plus Masse und Versorgungsspannung) betrieben werden kann. Dies ermöglicht die einfache Verbindung mehrerer Sensoren an einem einzigen Bus.

    Wichtige Merkmale des DS18B20:

    Messbereich: -55°C bis +125°C

    Genauigkeit: ±0,5°C im Bereich von -10°C bis +85°C

    Auflösung: Konfigurierbar von 9 bis 12 Bit (entspricht 0,5°C bis 0,0625°C)

    1-Wire-Schnittstelle: Ermöglicht die Datenkommunikation und Stromversorgung über eine einzelne Leitung

    Eindeutige 64-Bit-Seriennummer: Jeder Sensor hat eine einzigartige Adresse, wodurch mehrere Sensoren am gleichen Bus unterschieden werden können

    Parasitäre Stromversorgung: Kann bei Bedarf über die Datenleitung mit Strom versorgt werden


    Aufbau einer Messschaltung mit mit einem Sensor und dem ESP8266

    Benötigte Teile:

    ESP8266 (hier NodeMCU)

    DS18B20 (im Gehäuse TO-92 oder verkapselt)

    Widerstand ca. 4,7 KOhm

    Eine Steckplatine (Breadboard)

    Drähte (Jumper)


    Der Aufbau der Schaltung gestaltet sich recht einfach:
    Ich nutze gerne zum Aufbau von Versuchsschaltungen Lochrasterplatinen mit Headerpins. Dieser Aufbau kann dann immer wieder verwendet werden um z.B. weitere Bauelemente einzubeziehen. Die Beschaltung des DS18B20 ist ebenfalls dargestellt (G=Ground; D=Datenleitung; V=Versorgungsspannung)

    Fritzing Schaltung ESP32 mit DS18b20
    Logo Fitzing.org
    Aufbau_ESP_DS18B20 auf Lochraster - front
    Aufbau_ESP_DS18B20 auf Lochraster - back

    Programmierung mit der Arduino IDE

    Voraussetzung -> Installierte Arduino IDE
    Erforderliche Bibliotheken (Libraries) installieren.

    Im Code erforderlich sind die 2 Bibliotheken OneWire.h und die DallasTemperature.h. diese sind, falls noch nicht geschehen, zu installieren. Nachfolgende Screenshots zeigen dir die Installation.
    Gehe bitte auf den Bibliotheksverwalter und suche nach „OneWire“. Es wird dir die OneWire aufgelistet, wie ich sie markiert habe. die siehst die aktuelle Version und den „Installieren“-Button. Diesen klickst du auch an.

    Einbinden der Onewire Library

    Mit der 2. Bibliothek verfährst du genauso. Hier suchst du nach DallasTemperature und findest diese Bibliothek.
    Installiere diese bitte ebenfalls. Danach starte die Arduino IDE bitte einmal neu.

    Einbinden der Dallas Library

    Der Code zum Auslesen der Temperatur


    Hochladen des getesteten Codes

    Prüfung des Codes mit Schaltflächen

    Syntaktisch geprüft wird der Code mit der linken Schaltfläche. Den Code kompilieren und auf das Board hochladen, erledigst du mit der Pfeil nach rechts.

    Ausgabe des Prozesses Kompilieren und Hochladen
    Ausgabe des abgefragten Sensorwertes

    Und hier haben wir dann die Ausgabe unseres Sketches.
    Alle 10 Sekunden wird eine Messung ausgelöst und uns ausgegeben


    Erweiterung der Schaltung um einen Sensor

    Es ist sehr einfach, einen weiteren Sensor in die Schaltung zu integrieren. Schematisch zeige ich dir das auf dem Breadboard.

    Erweiterung der Schaltung auf 2 Sensoren
    Logo Fitzing.org

    Hier stelle ich die Loop-Schleife aus oben genannten Code mit der Erweiterung zum Auslesen eines weiteres Sensors vor.

    void loop()
    {
      // Aufruf sensors.requestTemperatures(), um eine globale Temperaturmessung auszulösen
      // alle Sensoren am Bus werden abgefragt
      Serial.print("Requesting temperatures...");
      sensors.requestTemperatures(); // Temperaturmessung auslösen 
      Serial.println("DONE");
      Serial.print("Temperature for the device 1 (index 0) is: ");
      Serial.println(sensors.getTempCByIndex(0)); // Warum "byIndex"?
      // Wir können mehr als einen Sensor am Bus betreiben.  
      // 0 verweist auf den ersten Sensor
      Serial.print("Temperature for the device 2 (index 1) is: ");
      Serial.println(sensors.getTempCByIndex(1));  
      // Index 1 verweist auf den zweiten Sensor
      delay(10000);
    }

    Und mit weiteren kleinen Änderungen ist es auch möglich, dass wir uns nicht um die Anzahl angeschlossener Sensoren kümmern müssen. Dies kann uns eine For – Schleife abnehmen.

    void loop()
    {
      // Aufruf sensors.requestTemperatures(), um eine globale Temperaturmessung auszulösen
      // alle Sensoren am Bus werden abgefragt
      Serial.print("Requesting temperatures...");
      sensors.requestTemperatures(); // Temperaturmessung auslösen
      Serial.println("DONE");
    
      // Abfrage der Sensoren in einer Schleife
      for (int i = 0; i < sensors.getDeviceCount(); i++) {
        Serial.print("Temperature for device ");
        Serial.print(i);
        Serial.print(" is: ");
        Serial.println(sensors.getTempCByIndex(i)); 
      }
    
      delay(10000); // 10 Sekunden warten
    }


    Kurz zum Aufbau der for-Schleife.

    for (int i = 0; i < sensors.getDeviceCount(); i++) {
    …………….
    }


    i ist der Zähler und stellt gleichzeitig die Index-Nummer des Sensors dar.
    Mit sensors.getDeviceCount() fragen wir nach der Anzahl angeschlossener Sensoren.
    Und mit i++ wird i mit jedem Schleifendurchlauf um eins erhöht, damit wir den nächsten Sensor auslesen können.
    Mit dem Operator „<“ stellen wir sicher, dass die Schleife abgebrochen wird, sobald alle vorhandenen Sensoren ausgelesen sind.

    Im Ergebnis erhältst du die Ausgabe der Messwerte beider Sensoren. Sehr schön zu sehen ist die Genauigkeit der Sensoren. Beide Messwerte sind gleich, bis ich den einen Sensor kurz berührt habe.

    Ausgabe der abgefragten Sensorwerte

    Hier sind wir am Ende unseres DIYTechAdventures angekommen. Ich hoffe, du konntest alles nachvollziehen und bist zu ähnlichen Ergebnissen gekommen.

    Sollten sich Fragen ergeben, nutze bitte im Kommentar die Gelegenheit.

    0 Kommentare
    Inline Feedbacks
    View all comments