Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry Pi | Raspberry Pi Pico

Menu
  • Smarthome
  • Gartenautomation
  • Arduino
  • ESP32 & Co.
  • Raspberry Pi & Pico
  • Solo Mining
  • Deutsch
  • English
Menu

Zwei Temperatursensoren mit Arduino nutzen – so geht’s!

Posted on 11. Februar 202510. Februar 2025 by Stefan Draeger

In meinem Beitrag „Arduino-Temperaturüberwachung: Relais per Schwellwert & Tastersteuerung mit LCD-Anzeige“ habe ich gezeigt, wie man mit einem Arduino, einem Temperatursensor und einem LCD-Display eine einfache Temperaturüberwachung realisieren kann. Ein Leser meines Blogs hatte eine großartige Idee zur Erweiterung: Ein zweiter Temperatursensor soll zusätzlich die Außentemperatur auf dem Display anzeigen.

Zwei Temperatursensoren mit Arduino nutzen – so geht’s!
Dieses Video auf YouTube ansehen.

Solche Community-Ideen sind immer willkommen, und ich freue mich, wenn meine Projekte weitergedacht und optimiert werden! In diesem Beitrag zeige ich, wie du das bestehende Setup mit einem zweiten Sensor erweiterst, sodass sowohl die Innen- als auch die Außentemperatur angezeigt werden.

Schaltung - Temperaturgesteuertes Relais am Arduino mit zwei DS18B20 Sensoren
Schaltung – Temperaturgesteuertes Relais am Arduino mit zwei DS18B20 Sensoren

Inhaltsverzeichnis

  • Was ist das Ziel?
  • Der DS18B20 Sensor im Detail
    • Pinout des Sensors
  • Erweiterung der Temperaturüberwachung: Umschalten per Taster
  • Programmieren der zwei Temperatursensoren in der Arduino IDE
    • Benötigte Bibliotheken
    • Schritt-für-Schritt Anleitung zum erweitern des Codes für einen zweiten Sensor
      • Schritt 1 – definieren der Pins für Sensor & Taster
      • Schritt 2 – Sensor initialisieren
      • Schritt 3 – Feld zum speichern der aktuellen Auswahl
      • Schritt 5 – Taster für Sensorauswahl entprellen
      • Schritt 6 – Funktion loop erweitern für die Sensorauswahl
      • Schritt 7 – Funktion writeLcdDisplay erweitern
      • fertiger Sketch zum anzeigen von zwei Sensorwerten auf einem LC-Display

Was ist das Ziel?

Das eigentliche Ziel ist die Steuerung eines Relais via Schwellwert mit einem Temperatursensor DS18B20 am Arduino. Wie das funktioniert, habe ich bereits ausführlich im oben verlinkten Beitrag erklärt. In diesem Beitrag geht es nun darum, Arduino zwei Temperatursensoren hinzuzufügen, sodass du sowohl die Innen- als auch die Außentemperatur messen und auf dem Display anzeigen kannst.

Der DS18B20 Sensor im Detail

Zunächst zu den technischen Daten des Sensors:

  • jeder Sensor hat einen eindeutigen und einmaligen 64Bit Code auf dem onboard ROM
  • Betriebsspannung – 3.0V bis 5.5V
  • Messbarer Temperaturbereich von -55 °C bis +125 °C
  • Toleranz – ±0.5 °C
  • Auflösung des Thermometers von 9 bis 12Bit

Den DS18B20 Sensor bekommst du als einzelnen Baustein in Form TO-92 oder vergossen in einer wasserdichten Metallkapsel.

verschiedene DS18B20 Sensoren
verschiedene DS18B20 Sensoren

Pinout des Sensors

Der Sensor besitzt eine flache sowie eine abgerundete Seite. Wenn wir ihn von oben betrachten, sodass die flache Seite nach vorne zeigt, ergibt sich folgende Pinbelegung (von links nach rechts):

  • Pin 1 – GND
  • Pin 2 – DATA
  • Pin 3 – Vdd / VCC
Pinout - Temperatursensor DS18B20
Pinout – Temperatursensor DS18B20

Erweiterung der Temperaturüberwachung: Umschalten per Taster

Die bestehende Schaltung erweitern wir um einen Temperatursensor und einen Taster. Der Taster dient später zum umschalten zwischen den Ansichten auf dem Display.

Schaltung – zwei DS18B20 LCD-Anzeige und Relais am Arduino

Programmieren der zwei Temperatursensoren in der Arduino IDE

In den nachfolgenden Abschnitten möchte ich dir erläutern wie du den bestehenden Code lauffähig machst (dazu werden ein paar Bibliotheken benötigt) und um einen zweiten Sensor & einen zusätzlichen Taster erweiterst.

Benötigte Bibliotheken

Bevor wir mit der Programmierung starten können, müssen wir einpaar Bibliotheken für die verwendeten Komponenten installieren

  • LC-Display > https://docs.arduino.cc/libraries/liquidcrystal-i2c/
  • Taster > https://github.com/thomasfredericks/Bounce2
  • Temperatursensor DS18B20 > https://github.com/RobTillaart/DS18B20_INT

Wie man eine ZIP-Bibliothek in der Arduino IDE installiert, habe ich dir bereits im Beitrag Arduino IDE, Einbinden einer Bibliothek ausführlich erläutert.

Die beiden Bibliotheken Bounce2 & DS18B20_INT findest du auch im Bibliotheksverwalter der Arduino IDE und kannst du von dort auch einfach mit einem klick installieren.

Bei der Bibliothek DS18B20_INT musst du zusätzlich die Abhängigkeit OneWire installieren und somit die Schaltfläche „ALLE INSTALLIEREN“ wählen.

Schritt-für-Schritt Anleitung zum erweitern des Codes für einen zweiten Sensor

Nachfolgend die sieben Schritte welche notwendig sind einen zweiten Temperatursensor vom Typ DS18B20 in den Code zu implementieren.

Schritt 1 – definieren der Pins für Sensor & Taster

Zunächst definieren wir die beiden Pins für jeweils den Sensor und den Taster.

//Der zweite Temperatursensor vom Typ DS18B20 ist am
//digitalen Pin D6 angeschlossen.
#define ds18b20_2 6
//Taster "sensor_select" am digitalen Pin D7 angeschlossen.
#define tasterSensorSelect 7

Schritt 2 – Sensor initialisieren

Der Sensor DS18B20 verfügt über eine eigene UID und theoretisch kann man die beiden Sensoren auch über einen digitalen Pin verwalten (siehe DS18B20-Sensoren am Raspberry Pi Pico W: Temperaturdaten auf einer Webseite anzeigen) da der Arduino genügend freie Pins hat dupliziere ich hier einfach die beiden Aufrufe.

OneWire oneWire2(ds18b20_2);
DS18B20_INT sensor2(&oneWire2);

Schritt 3 – Feld zum speichern der aktuellen Auswahl

Wenn wir den Taster zur Sensorauswahl betätigen möchte ich zwischen diesen beiden wechseln, dazu merke ich mir den Zustand als Zahl im Feld „sensorAuswahl“.

//Auswahl
//0 - Sensor "normal"
//1 - Sensor "außen" - nur lesen
int sensorAuswahl = 0;

Schritt 5 – Taster für Sensorauswahl entprellen

Den Taster habe ich wie die anderen auch ohne 10 kOhm PullUp / PullDown Widerstand angeschlossen. Dieses löse ich über den internen 10 kOhm Widerstand welcher mit der MCU verbunden ist. Zusätzlich entprelle ich den Taster über die Bibliothek Bounce2.

Bounce btnSensorSelect = Bounce();

void setup(){
...
  btnSensorSelect.attach(tasterSensorSelect, INPUT_PULLUP);
  btnSensorSelect.interval(BTN_INTERVALL);
...
}

Schritt 6 – Funktion loop erweitern für die Sensorauswahl

In der Funktion loop müssen wir nun eine zusätzliche If-Bedingung hinzufügen um auf den Statuswechsel des Tasters zu reagieren und den Wert im Feld „sensorAuswahl“ umzukehren.

Zusätzlich wird der bisherige Code nur ausgeführt wenn der Wert des Feldes „sensorAuswahl“ gleich 0 ist, andernfalls (also wenn dieser 1 ist) wird geprüft ob das Display aktualisiert werden soll und dann der Wert des Außensensors über die Funktion writeLcdDisplay angezeigt.

void loop() {
...
   btnSensorSelect.update();
   if (btnSensorSelect.fell()) {
     sensorAuswahl = sensorAuswahl == 0 ? 1 : 0;
     writeLcdDisplay();
   }

   if (sensorAuswahl == 0) {
...
} else if (sensorAuswahl == 1) {
    if ((lastUpdate + INTERVALL) < millis()) {
      //überschreiben des Wertes für die letzte Ausführung
      lastUpdate = millis();
      writeLcdDisplay();
    }
}

Schritt 7 – Funktion writeLcdDisplay erweitern

Die Funktion writeLcdDisplay dient dazu die Werte auf dem Display anzuzeigen. Hier müssen wir zusätzlich noch eine If-Bedingung implementieren in welcher wir wieder das Feld „sensorAuswahl“ prüfen.

Wenn der Außensensor angezeigt werden soll, dann wird in der ersten Zeile der Text „Aussensensor“ angezeigt und in der zweiten Zeile der Text „akt. Temp.:“ inkl. dem aktuellen Sensorwert.

void writeLcdDisplay() {
...
   if (sensorAuswahl == 0) {
...
} else if (sensorAuswahl == 1) {
    sensor2.requestTemperatures();
    printTextAt(0, 0, "Aussensensor");
    printTextAt(1, 0, ">akt. Temp.:" + String(sensor2.getTempC(), DEC));
}

fertiger Sketch zum anzeigen von zwei Sensorwerten auf einem LC-Display

Nachfolgend nun der fertige Sketch zum anzeigen von zwei Sensorwerten am Arduino inkl. Temperatursteuerung.

Programm: zwei Temperatursensoren für eine Temperatursteuerung am Arduino UNOHerunterladen

4 thoughts on “Zwei Temperatursensoren mit Arduino nutzen – so geht’s!”

  1. Harry Hofmann sagt:
    11. Februar 2025 um 20:23 Uhr

    Hallo Stefan,
    zwei Sensoren! Das ist richtig cool!
    Bin gerade am Bau meines Heizkoffers – werde meine Bauschritte und Auswahl der genutzten Heizungsfolien bzw. Schaltung sowie LiPo BMS (Schutz gegen Überladung, Überstrom und Unterspannung) zum Aufbau dokumentieren.
    Das Script ist sehr professionell –
    Vielen Dank!
    Grüße aus Stein bei Nürnberg
    Harry Hofmann

    Antworten
  2. Harry Hofmann sagt:
    17. Februar 2025 um 23:01 Uhr

    Hallo Stefan!
    ich habe zur Relays Steuerung das High und Low getauscht.
    Jetzt schaltet das Relays auch bei erreichen der „maxtemp“ ab.

    if (currentTemp <= minTemp) {
    digitalWrite(relais, HIGH);
    ……..
    digitalWrite(relais, LOW);
    Serial.println("max");

    gruß
    Harry

    Antworten
  3. Harry Hofmann sagt:
    17. Februar 2025 um 23:39 Uhr

    Hallo Stefan!
    Ein Problem besteht:
    Wenn das Display den Aussen Sensor mit seiner aktuellen Temp. anzeigt,
    schaltet das Relay bei erreichen der mintemp nicht mehr ein und beim MaxWert nicht mehr aus!
    Erst wenn der Button Sensor Auswahl gedrückt wird, aktualisiert der Wert und das Relay schaltet.
    Wie kann ich das ändern?
    Gruß
    Harry

    Antworten
    1. Stefan Draeger sagt:
      18. Februar 2025 um 08:17 Uhr

      Hi,
      oh den test habe ich garnicht gemacht. Aber der Fix dafür ist einfach.

      Du musst den Code aus der inneren If-Bedingung wo geprüft wird „if (sensorAuswahl == 0)“ nach außen ziehen.
      Also quasi vor die If-Bedingung verschieben.

      //Wenn der Zeitpunkt der letzten Ausführung plus dem Wert
      //des INTERVALLs kleiner als die aktuellen Millisekunden sind, dann...
      if ((lastUpdate + INTERVALL) < millis()) { //anfordern der Temperaturwerte sensor.requestTemperatures(); //auslesen der Temperatur in Grad Celsius currentTemp = sensor.getTempC(); //überschreiben des Wertes für die letzte Ausführung lastUpdate = millis(); //nur wenn die Auswahl auf 2 steht dann soll das LCD-Display aktualisiert werden //(Auswahl 2 zeigt die aktuelle Temperatur an) if (auswahl == 2) { writeLcdDisplay(); } //Wenn die gelesene Temperatur kleiner / gleich als der Wert der Konstante MIN_TEMP ist, //dann soll das Relais aktiviert werden. if (currentTemp <= minTemp) { digitalWrite(relais, LOW); Serial.println("min"); } else if (currentTemp >= maxTemp) {
      //Ist der gelesene Wert jedoch größer / gleich als der Wert der Konstante MAX_TEMP so
      //soll das Relais deaktiviert werden.
      digitalWrite(relais, HIGH);
      Serial.println("max");
      }
      }

      Antworten

Schreibe einen Kommentar Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Fragen oder Feedback?

Du hast eine Idee, brauchst Hilfe oder möchtest Feedback loswerden?
Support-Ticket erstellen

Newsletter abonnieren

Bleib auf dem Laufenden: Erhalte regelmäßig Updates zu neuen Projekten, Tutorials und Tipps rund um Arduino, ESP32 und mehr – direkt in dein Postfach.

Jetzt Newsletter abonnieren

Unterstütze meinen Blog

Wenn dir meine Inhalte gefallen, freue ich mich über deine Unterstützung auf Tipeee.
So hilfst du mit, den Blog am Leben zu halten und neue Beiträge zu ermöglichen.

draeger-it.blog auf Tipeee unterstützen

Vielen Dank für deinen Support!
– Stefan Draeger

Kategorien

Tools

  • Unix-Zeitstempel-Rechner
  • ASCII Tabelle
  • Spannung, Strom, Widerstand und Leistung berechnen
  • Widerstandsrechner
  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator

Links

Blogverzeichnis Bloggerei.de TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com

Stefan Draeger
Königsberger Str. 13
38364 Schöningen

Tel.: 01778501273
E-Mail: info@draeger-it.blog

Folge mir auf

  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Cookie-Richtlinie (EU)
©2025 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb
Cookie-Zustimmung verwalten
Wir verwenden Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wir tun dies, um das Surferlebnis zu verbessern und um personalisierte Werbung anzuzeigen. Wenn Sie diesen Technologien zustimmen, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn Sie Ihre Zustimmung nicht erteilen oder zurückziehen, können bestimmte Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Verwalten von {vendor_count}-Lieferanten Lese mehr über diese Zwecke
Einstellungen anzeigen
{title} {title} {title}