In diesem Beitrag möchte ich dir zeigen, wie du am Arduino UNO R3 den Temperatursensor DS18B20 auslesen und temperaturabhängig ein Relais steuern kannst.
Den Temperatursensor DS18B20 habe ich dir bereits in diversen Beiträgen vorgestellt, vor allem für die Arduino Familie habe ich dir gezeigt wie dieser programmiert wird.
- Arduino Lektion 48: Temperatursensor DS18B20
- Arduino Lektion 81: ESP-01S Temperatursensorshield DS18B20
- Weekendprojekt: Relais & Temperatursensor DS18B20 steuern
- Ausgeben der Temperaturwerte des DS18B20 Sensors auf dem M5StickC
- Programmieren mit MicroPython #6: digitaler Temperatursensor DS18B20 am ESP32
Hier soll es nun darum gehen wie du die Temperatur auslesen kannst du bei einem bestimmten Wert ein Relais aktivierst und bei Erreichen einem anderen Wert das Relais wieder deaktivierst.
Die Idee dazu kam von einem Leser meines Blogs und diesem möchte ich den Beitrag widmen.
Benötigte Ressourcen für dieses Projekt
Für dieses kleine Projekt benötigst du:
- einen Arduino UNO R3*,
- ein USB Datenkabel*,
- einen Temperatursensor DS18B20*,
- ein 4,7 kOhm Widerstand*,
- ein 400 Pin Breadboard*,
- ein paar Breadboardkabel*, männlich – männlich, 10 cm
Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!
Für den Temperatursensor DS18B20 gibt es auch eine passende Adapterplatine, auf welchen du den Sensor einfach stecken kannst und somit die kleine Schaltung mit dem 4,7 kOhm Widerstand entfällt.
Pinout des Temperatursensor DS18B20
Der hier verwendete Sensor vom Typ DS18B20 verfügt über 3 Beinchen, welche wie folgt belegt sind:
Aufbau der Schaltung – Temperatursensor DS18B20 mit Relais am Arduino UNO R3
Die Schaltung am Arduino UNO R3 ist recht übersichtlich, denn der Sensor und das Relais belegen jeweils einen digitalen Pin und werden mit GND und 5V am Arduino verbunden.
Bauteil | Arduino UNO R3 |
---|---|
Sensor DS18B20 | |
GND | GND |
DATA | digitaler Pin D3 |
VCC | 5V |
Relais | |
VCC | 5V |
IN1 | digitaler Pin D4 |
GND | GND |
Die Schaltung sieht in meinem Fall wie folgt aus:
Programmieren des Sensors und des Relais
Kommen wir nun dazu, das Programm zu erstellen. Wie am Anfang erwähnt wollen wir die Temperatur messen und bei einem bestimmten minimalen Wert soll ein Relais geschaltet werden, bei Erreichen eines höheren maximalen Wertes soll das Relais wieder deaktiviert werden.
Installieren der benötigten Bibliothek für den Temperatursensor DS18B20
Zum einfachen Auslesen der Temperatur benötigen wir eine kleine Bibliothek. Diese installieren wir über den Bibliotheksverwalter der Arduino IDE, welchen du über das Hauptmenü “Sketch” > “Bibliothek einbinden” > “Bibliotheken verwalten…”
Im geöffneten Bibliotheksverwalter suchen wir zunächst nach “ds18b20” (1) und wählen in den Suchergebnissen am Eintrag “DallasTemperature by Miles Burton” die Schaltfläche “Installieren” (2) wenn alles installiert ist können wir den Dialog über die Schaltfläche “Schließen” schließen.
Für die installierte Bibliothek wird zusätzlich die Bibliothek OneWire benötigt hier müssen wir die Schaltfläche “Install all” betätigen.
Wenn alles installiert ist, wird dieses über den kleinen, grünen Text “INSTALLED” angezeigt.
Quellcode
//Bibliotheken für die Kommunikation mit dem Sensor //DS18B20 #include <OneWire.h> #include <DallasTemperature.h> //der digitale Temperatursensor vom Typ DS18B20 //ist am digitalen Pin D3 angeschlossen #define SENSOR 3 //die einfach Relaisplatine ist am //digitalen Pin D4 angeschlossen #define RELAIS 4 //minimale Temperatur const int MIN_TEMP = 26; //maximale Temperatur const int MAX_TEMP = 30; //initialisieren der Kommunikation über OneWire OneWire oneWire(SENSOR); DallasTemperature sensors(&oneWire); void setup(void) { //beginn der seriellen Kommunikation mit 9600baud //diese wird nur benötigt um die Sensordaten //auf der seriellen Schnittstelle auszugeben Serial.begin(9600); //beginn der Kommunikation mit den Sensoren sensors.begin(); //definieren das der digitale Pin des Relais //als Ausgang dient pinMode(RELAIS, OUTPUT); } void loop(void) { //Anfordern der Temperaturwerte sensors.requestTemperatures(); //Auslesen der Temperatur des ersten Sensors //da die Sensoren über eigene Adressen verfügen, können wir mehrere //Sensoren des Typs DS18B20 über eine Schnittstelle anschließen float tempC = sensors.getTempCByIndex(0); //Wenn erfolgreich eine Temperatur gelesen wurde, dann... if (tempC != DEVICE_DISCONNECTED_C) { //Ausgeben der Temperatur auf der seriellen Schnittstelle Serial.print("Temperatur des Sensors mit ID 0 ist: "); Serial.println(tempC); } else { //andernfalls soll eine Fehlermeldung ausgegeben werden Serial.println("Fehler: Es konnten keine Daten ermittelt werden!"); //verlassen der Loop Funktion return; } //Wenn die gelesene Temperatur kleiner / gleich als der Wert der Konstante MIN_TEMP ist, //dann soll das Relais aktiviert werden. if (tempC <= MIN_TEMP) { digitalWrite(RELAIS, LOW); } else if (tempC >= MAX_TEMP) { //Ist der gelesene Wert jedoch größer / gleich als der Wert der Konstante MAX_TEMP so //soll das Relais deaktiviert werden. digitalWrite(RELAIS, HIGH); } }
Super Anleitung und schnelle Reaktion.
Vielen Dank dafür.
Gruß Ralph
Hallo Stefan,
danke für die tolle Anleitung.
Habe mir zwar extra das Arduino Kochbuch zugelegt, bekomme aber das Verstellen der Sollwerte mittels Tastern nicht hin.
#define Rauftaster_PIN 7
#define Runtertaster_PIN 6
Pinmode(Rauftaster,INPUT_PULLUP);
Pinmode(Runtertaster,INPUT_PULLUP);
Ab dann klappt nichts mehr.?
Habe die gesamte Heizungssteuerung mit 8 XH-W3001 gebaut.
Leider schwimmen die Temperaturen, da die Leitungslängen der NTC wohl zu lang sind.
Vielleicht geht es ja mit den DS 18B20 besser?
Auf jeden Fall ist Dein Sketch schon mal prima um die Warmwassertemperatur anzuzeigen.
Super!
Achim
Hi, heute erscheint ein neuer Beitrag Maßgeschneidert zu deinem Thema ich denke das wird dir weiterhelfen.
Gruß
Stefan Draeger