Der DHT11 Thermometer
Der DHT11 ist ein Sensorkomplex (mindestens 2 Sensoren integriert) und enthält einen kapazitiven Feuchtigkeits- und Temperatursensor. Der Umgang mit diesem Sensor ist sehr angenehm und ist viel einfacher und präziser als andere Temperatursensoren.
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 einen analogen Temperatursensor ist dieser vor kalibriert und benötigt keine aufwendigen Programmierformeln – 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 Analog-Digital-Umwandlung (bei 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-Kalibrier-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 eine eigene serielle Schnittstelle eingebaut, 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 auszugeben. Hierzu müssen mehrere Berechnungen gemacht werden. Der DHT11 nimmt uns diese Arbeit jedoch ab, da er bereits vor kalibriert ist. Den NTC-Thermistor gibt es auch einzeln als Modul und wird hier detailliert behandelt:
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 diese 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 Plus-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: