DHT11 & DHT22 Sensoren zur Messung von Temperatur und Feuchte mit dem Arduino im Vergleich
In diesem Arduino Tutorial wird gezeigt, wie man den DHT11 oder den DHT22 Sensor zur Messung von Temperatur und Luftfeuchtigkeit mit dem Arduino verwendet.
Diese Sensoren sind sehr beliebt, da sie sehr preiswert sind. Hier sind die wichtigsten Spezifikationen und Unterschiede zwischen diesen beiden Sensoren:
Das DHT22 ist die teurere Version, die offensichtlich bessere Spezifikationen hat. Der Temperaturmessbereich reicht von -40 bis +125 °C mit einer Genauigkeit von +-0,5 Kelvin, während der Temperaturbereich des DHT11 von 0 bis 50 °C mit einer Genauigkeit von +-2 Kelvin liegt. Auch der Feuchtemessbereich des DHT22 Sensors hat einen größeren Bereich von 0 bis 100% mit 2,5% Genauigkeit, während der DHT11 Feuchtigkeitsmessbereich von 20 bis 80% mit 5% Genauigkeit besitzt.
Funktionsprinzip des DHT11 / DHT22:
Die Sensoren bestehen aus einem Feuchtesensor, einem NTC-Temperatursensor (oder Thermistor) und einem Chip auf der Rückseite des Sensors.
Zur Messung der Feuchte existieren im Feuchtigkeitssensor zwei Elektroden mit eine, feuchtigkeitshaltendem Substrat zwischen beiden. Wenn sich also die Luftfeuchtigkeit ändert, ändert sich die Leitfähigkeit des Substrats oder der Widerstand zwischen diesen Elektroden. Diese Widerstandsänderung wird vom Chip gemessen und verarbeitet, so dass sie von einem Mikrocontroller gelesen werden kann.
Zum anderen verwenden diese Sensoren zur Temperaturmessung einen NTC-Temperaturfühler oder Thermistor.
Ein Thermistor ist eigentlich ein veränderlicher Widerstand, der seinen Widerstand bei Änderung der Temperatur ändert. Diese Sensoren werden durch Sintern von Halbleitermaterialien wie Keramik oder Polymeren hergestellt, um größere Widerstandsänderungen bei geringen Temperaturänderungen zu erreichen. Der Begriff “NTC” bedeutet “Negativer Temperaturkoeffizient”, was bedeutet, dass der Widerstand mit zunehmender Temperatur abnimmt.
Weitere Informationen zum Thermistor sin in dieser Anleitung zu finden.
Aufbau der Schaltung:
Die DHTxx-Sensoren haben drei Pins, VCC, GND, und einen Data-Pin. Ein Pull-Up-Widerstand von 10K Ohm ist bereits auf den Sensorplatinen verbaut, dieser wird benötigt um die Datenleitung hoch zu halten und die Kommunikation zwischen dem Sensor und dem Arduino Board zu ermöglichen.
Die DHTxx-Sensoren verfügen über ein eigenes Single-Wire-Protokoll zur Übertragung der Daten. Dieses Protokoll erfordert ein präzises Timing und die Zeitdiagramme für die Datenbeschaffung der Sensoren sind den Datenblättern der Sensoren zu entnehmen. Allerdings müssen wir uns um diese Timing-Diagramme keine Sorgen machen, da die DHT-Bibliothek verwendet wird.
Beispielcode:
Zuerst muss die DHT-Bibliothek eingebunden werden, welche auf der offiziellen Arduino-Website zu finden ist.
#include <dht.h> #define dataPin 2 // Digitaler-IO, an welchem der Sensor mit dem Arduino verbunden ist dht DHT; // Erstellung eines Sensorobjektes void setup() { Serial.begin(9600); // Initialisierung der Seriellen Schnittstelle } void loop() { int readData = DHT.read22(dataPin); // Lesen der Sensordaten float t = DHT.temperature; // Zwischenspeichern der Temperaturdaten float h = DHT.humidity; // Zwischenspeichern der gemessenen Feuchtigkeit // Ausgabe der Messung im seriellen Terminal Serial.print("Temperatur = "); Serial.print(t); Serial.print(" °C "); Serial.print(" Feuchtigkeit = "); Serial.print(h); Serial.println(" % "); delay(2000); // Pause für 2 Sekunden, da der DHT22 eine Aufnahmerate von 0,5 Hz besitzt }
Nach dem Uploaden des Codes können die gemessenen Temperaturen und Luftfeuchtigkeit über den seriellen Monitor der Arduino IDE ausgelesen werden.
Hallo,
als ich dieses Beispiel für den DHT endlich fand, habe ich mich mal so richtig gefreut. Die Freude wurde aber recht schnell getrübt, weil dieser Sketch offensichtlich nur auf einem Arduino läuft.
Mein Vorhaben ist, einen DHT Sensor (11,21,22) mit einem ESP auszulesen und zur Anzeige zu bringen. Dabei möchte ich den Sensortyp sowie den Daten-Pin am ESP variabel gestalten. Mit der Bibliothek für den ESP ist es leider nicht möglich, Configdaten zur Laufzeit zu ändern und nach einem Neustart einen mit einem anderen Sensor an einem anderen ESP-Pin weiter zu arbeiten. Oder gibt es da doch eine Möglichkeit, die ich noch nicht kenn?