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.