A02|02 Der Temperatur-und Luftfeuchtigkeits-Sensor DHT11
DHT11 Temperature Sensor


Sensorwerte / Temperatur messen

Der DHT11 ist ein Sensorkomplex und enthält einen kapazitiven Feuchtigkeits- und Temperatursensor (Thermistor).

Im Inneren befindet sich ein Chip, der für uns mehrere Sensor-Berechnungen abnimmt. Die interne Elektronik enthält ein Analog-Digital-Umwandler. Im Gegensatz zum analogen Temperatursensor ist dieser vorkalibriert und benötigt keine besonderen Programmier-Formeln – d.h. du kannst mit der Messung sofort beginnen.

 

Spezifikationen
- Signalart: digital
- Spannung: 3,3V – 5V
- Pinabstand: 2,54mm
- Temperaturbereich:
0-50 °C
- Fehlertoleranz von ± 2 °C
- Luftfeuchtigkeit: 20-90% RH ± 5% RH Fehler

Der DHT11 kennzeichnet sich besonders durch eine einfache Handhabung und sehr niedrige Kosten aus. Er wird mit 3V bis 5V Spannung versorgt und verbraucht während der ADC-Umwandlung (bei der Datenabfrage) maximal 2,5 mA. Der Sensor ist gut geeignet für 20% bis 90% Luftfeuchtigkeit bei 5% Genauigkeit. Die Temperaturmessungen liegen in einem Bereich von 0C° bis 50°C mit einer Genauigkeit von ±2°C. Die Abtastrate ist nicht schneller als 1Hz. Das heißt wir bekommen einmal pro Sekunde eine Messung.



Die Funktionsweise des DHT11

Die Feuchtigkeit
Die Feuchtigkeitsmesskomponente besteht aus zwei Elektroden, zwischen denen sich ein feuchtigkeitshaltendes Substrat befindet. Die Ionen werden vom Substrat freigesetzt, wenn Wasserdampf von ihm absorbiert wird, was wiederum die Leitfähigkeit zwischen den Elektroden erhöht. Die Änderung des Widerstands zwischen den beiden Elektroden ist proportional zur relativen Luftfeuchtigkeit. Eine höhere relative Luftfeuchtigkeit verringert den Widerstand zwischen den Elektroden, während eine niedrigere relative Luftfeuchtigkeit den Widerstand zwischen den Elektroden erhöht.

 
 

In jedem DHT11-Sensor sind sehr genaue Kalibrierdaten der Feuchte-Kalibriert-Kammer gespeichert. Genauer gesagt handelt es sich dabei um Kalibrierkoeffizienten, die im Programmspeicher des integrierten 8-Bit-IC im SOIC-14-Gehäuse gespeichert sind. Dieser IC misst und verarbeitet das analoge Signal mit gespeicherten Kalibrierkoeffizienten, führt eine Analog-Digital-Wandlung durch und gibt ein digitales Signal mit der Temperatur und Luftfeuchtigkeit aus.

 
 

In den Sensor ist ein serielles Ein-Draht-Schnittstellensystem ist integriert, um die Ansteuerung für den Anwender schnell und einfach zu gestalten. Die geringe Größe, der geringe Stromverbrauch und die Signalübertragungsdistanz von 20 Metern machen es zu einer weit verbreiteten Anwendung.



Die Temperatur
Bei dem integrierten Temperatursensor handelt es sich um einen NTC-Thermistor. Ein Thermistor ist ein Wärmewiderstand, dessen elektrischer Widerstand stark auf Temperaturschwankung reagiert. Der Begriff "NTC" bedeutet "Negative Temperature Coefficient", was bedeutet, dass der Widerstand mit steigender Temperatur abnimmt.

 
 

Wie du in der oberen Verhaltenskurve des Thermistors sehen kannst, verhält sie sich nicht linear, sondern exponentiell. Diese Charakteristik macht es schwer das entsprechende Temperatur-Stromwiderstand-Verhältnis genau aus zugeben. Hier zu müssen mehrere Berechnungen gemacht werden. Der DHT11 nimmt uns diese Arbeit jedoch ab, da er bereits vorkalibriert ist. Den NTC-Thermistor gibt es auch einzeln als Modul und wird hier detailliert behandelt: A02|04 Der analoge Temperatur-Sensor. Dort erfährst du, wie man ein NTC-Thermistor ohne eine Vorkalibrierung programmiert.

 

Installation der DHT-Bibliothek

Um uns die Arbeit zu erleichtern, benutzen wir zur Ansteuerung des DHT11 eine Arduino-Bibliothek (Library). Sie wurde von Adafruit entwickelt (siehe Kommentare im Sketch). Ohne eine Bibliothek wird die Programmierung recht aufwendig und komplex. Der DHT11-Sensor besitzt ein eigenes Ein-Draht-Protokoll für die Datenübertragung zum Arduino. Das Protokoll erfordert ein präzises Timing, sonst werden die Sensordaten unbrauchbar. Die DHT-Bibliothek versteckt vor uns die ganze Code-Komplexität, sodass wir einfache Befehle erteilen können, um die Temperatur- und Luftfeuchtigkeitsdaten zu erhalten.

So installierst du die Bibliothek: Das aktuelle Arduino-IDE (Version 1.8.16) enthält eine integrierte Bibliothek-Installation. Öffne hierzu das Arduino-Programm und gehe in der Menüleiste auf den Punkt Werkzeuge > Bibliotheken verwalten…

 

Ein neues Fenster öffnet sich. Gib in der oberen rechten Suchleiste das Wort DHT11 ein, gefolgt von Enter. Wähle aus der Liste den Eintrag DHT sensor library aus und klicke auf installieren. Die DHT-Bibliothek liegt nun im Arduino-Programm-Ordner und kann aufgerufen werden.

 
 

Der Aufbau

Der +Pin (VCC) versorgt den Sensor mit Strom. Obwohl das Modul mit 3,3V betrieben werden kann, ist eine 5V-Versorgung empfehlenswert. Die Länge der Stromkabel hat einen Einfluss auf das Messergebnis. Je länger das Kabel, umso größer ist der Spannungsabfall in der Leitung und desto größer sind die Messfehler. Bei einer Versorgungsspannung von 5V kannst du den Sensor bis zu 20m weit führen. Bei einer Versorgungsspannung von 3,3V sollte die Kabellänge jedoch nicht mehr als 1m betragen. Der Out-Pin wird für die Kommunikation zwischen dem Sensor und dem Arduino verwendet. Der –Pin (Minuspol/GND) sollte mit der Masse des Arduino verbunden werden. Das folgende Diagramm zeigt wie alles verdrahtet wird.

 
 

Der Sketch

Sobald du die Bibliothek installiert hast, kannst du folgenden Sketch in die Arduino IDE kopieren. Der Test-Sketch gibt die Werte für Temperatur und relative Luftfeuchtigkeit auf dem seriellen Monitor aus. Kopiere den unteren Sketch, füge ihn in die Arduino IDE ein und lade ihn auf das Arduino-Board rauf.

/*******************************************************
A02|02 Der Temperatur-und Luftfeuchtigkeits-Sensor DHT11
Mr Robot UXSD
www.mrrobotuxsd.com
https://www.mrrobotuxsd.com/arduino-module-rezepte

Quelle: Geschrieben von ladyada
Der Sketch benötigt die folgenden Arduino-Bibliotheken:
+DHT Sensor Library: https://github.com/adafruit/DHT-sensor-library
+Adafruit Unified Sensor Lib: https://github.com/adafruit/Adafruit_Sensor
*******************************************************/

#include "DHT.h"
#define DHTPIN 2  //Pin-Nummer des Sensors
#define DHTTYPE DHT11  //Einstellung auf Sensortyp DHT11

//Initialisierung des DHT-Sensors
DHT dht(DHTPIN, DHTTYPE);


void setup() 
{
  //Initialisiere die Serielle Kommunikation mit 9600 Bits pro Sekunde:
  Serial.begin(9600);

  //Sende ein Test-Text
  Serial.println(F("DHTxx test!"));

  dht.begin();
}


void loop() 
{
  //Warte ein paar Sekunden zwischen den Messungen:
  delay(2000);

  //Das Ablesen von Temperatur oder Luftfeuchtigkeit dauert etwa 250 
  //Millisekunden! Sensormesswerte können auch bis zu 2 Sekunden 
  //"alt" sein (der Sensor ist sehr langsam)
  float h = dht.readHumidity();
  
  //Temperatur in Celsius lesen (Standardeinstellung)
  float t = dht.readTemperature();
  
  //Temperatur in Fahrenheit lesen (isFahrenheit = true)
  float f = dht.readTemperature(true);

  //Prüfen, ob ein Lesevorgang fehlgeschlagen ist 
  //und vorzeitig beenden (um es erneut zu versuchen).  
  if (isnan(h) || isnan(t) || isnan(f)) 
  {
    Serial.println(F("Failed to read from DHT sensor!"));
    return;
  }

  //Berechnung des Hitzeindex in Fahrenheit (Standard)
  float hif = dht.computeHeatIndex(f, h);
  
  //Berechnung des Hitzeindex in Celsius (isFahreheit = false)
  float hic = dht.computeHeatIndex(t, h, false);
  

  Serial.print(F("Luftfeuchtigkeit: "));
  Serial.print(h);
  
  Serial.print(F("%  Temperatur: "));
  Serial.print(t);
  
  Serial.print(F("°C "));
  Serial.println(f);
}
 

Schalte den seriellen Monitor ein, indem du in der Arduino IDE in der Menüleiste auf Werkzeuge > Serieller Monitor gehst.

Du solltest nun die folgende Anzeige sehen:

 
 

Falls du die hier beschriebenen Elektronik-Module nicht hast, kannst du sie in meiner Einkaufsliste finden. Warum ich selber hauptsächlich mit Modulen der Marke Keyestudio arbeite, erläutere ich unter diesem Blog-Artikel.

In dieser Übersicht äußere ich Empfehlungen aller Art.

Hier kommst du wieder zur Übersicht aller Module.