Thermometer (analog und digital), die im vorherigen Teil des Kurses beschrieben wurden, sind bei weitem die am häufigsten verwendeten Sensoren zur Messung der atmosphärischen Bedingungen.
Das zweite, ebenso beliebte Thema ist die Messung der Luftfeuchtigkeit, die durch den DHT-11 ermöglicht wird!
Bestellen Sie ein Set mit Elementen und beginnen Sie mit dem Lernen in der Praxis! Hier gehts zum Shop >>
Was ist eine Feuchtigkeitsmessung?
Im Zusammenhang mit dem Arduino taucht sehr oft das Thema Feuchtigkeitssensoren auf. Die meisten Ratgeber lassen jedoch Informationen darüber aus, „was eigentlich gemessen wird“.
Der in diesem Artikel beschriebene DHT-11 Sensor misst die relative Luftfeuchtigkeit, die als RH aus dem Englischen Relative Humidity abgekürzt wird. Dieser Wert liegt immer zwischen 0 und 1 und hat keine eigene Einheit. Daher wird die relative Luftfeuchtigkeit meist in %RH ausgedrückt – d. h. es wird ein Prozentwert von 0 bis 100 % angegeben, wobei 0 %RH für trockene Luft und 100 %RH für Luft mit maximaler Wasserdampfkonzentration steht.
Die relative Luftfeuchtigkeit gibt, vereinfacht ausgedrückt, den Wassergehalt der Luft an.
Wenn dieser Wert 100 % erreicht, wird das Wasser in Form von Tröpfchen freigesetzt.
Wenn man eher „akademische“ Definitionen bevorzugt, verweise ich auf Wikipedia, wo man Folgendes findet: „Die relative Luftfeuchtigkeit, ist das prozentuale Verhältnis zwischen dem momentanen Dampfdruck des Wassers und dem Sättigungsdampfdruck desselben (bei der Lufttemperatur) über einer reinen und ebenen Wasseroberfläche.“
Bei der Behandlung des oben beschriebenen Themas ist noch zu bedenken, dass die Wassermenge, die die Luft aufnehmen kann, unter anderem auch von ihrer Temperatur abhängt. Wenn sich der Wert des Thermometers ändert, ändert sich auch der %RH-Wert. Zur Erinnerung: Kondensation von Wasser kann auftreten, wenn: wir der Luft die fehlende Menge an Wasser zuführen oder wenn wir ihre Temperatur senken. Um nicht zu viel auf die Theorie einzugehen, verweise ich Interessierte auf die Stichworte Mollier-Diagramm (Vorsicht, es sieht gruselig aus) und Taupunkt. Nun ist es an der Zeit, zur Praxis überzugehen!
Fertige Sets für Forbot-Kurse
Die Komponenten für die Übungen aus dem Arduino-Kurs (Stufe 2) sind als fertige Sets erhältlich! Darin enthalten sind programmierbare Dioden, analoge und digitale Thermometer, 7-Segment-Anzeigen und ein Bewegungssensor (PIR).
Der DHT-11-Sensor in der Praxis
Wir werden unsere Tests mit dem beliebten digitalen Sensor DHT-11 durchführen, der ein Thermometer und einen Feuchtigkeitssensor in einem Gehäuse vereint. Die Informationen des Sensors können über eine 1-Wire-Schnittstelle ausgelesen werden. Vielerorts findet man die Information, dass dieser Sensor 1-Wire verwendet (bekannt z.B. von den besprochenen DS18B20-Sensoren) – das stimmt nicht!
Die DHT-11 Sensoren verwenden eine modifizierte Version der 1-Wire-Schnittstelle,
die nicht mit diesem Standard kompatibel ist!
Aus dem blauen Gehäuse ragen 4 Leitungen heraus, von denen jedoch nur 3 verwendet werden. Der mit NC (Abkürzung für Not Connected) gekennzeichnete Ausgang hat keine wichtige Funktion und muss nirgendwo angeschlossen werden. Die wichtigsten Parameter des Sensors:
- Allgemein:
– Versorgungsspannung: 3 V bis 5,5 V (in unserem Fall werden es 5 V sein)
– Stromverbrauch: 0,2 mA
– Abtastfrequenz: 1 Hz (jede Sekunde können neue Informationen ausgelesen werden) - Eingebautes Thermometer
– Messbereich: 0 – 50 °C
– Genauigkeit: ±2°C - Luftfeuchtigkeitssensor:
– Messbereich: 20 – 95%RH
– Genauigkeit ±5%RH
Weitere Informationen über den DHT-11
findet man in seiner Dokumentation.
Leider ist es wahrscheinlich, dass im Handel verschiedene Versionen dieses Sensors angeboten werden, die unterschiedliche Messbereiche haben können. Zum Glück drucken die Hersteller oft die wichtigsten Informationen auf die Rückseite des DHT-11-Gehäuses. In meinem Fall sah das wie folgt aus:
Wenn wir schon beim Gehäuse sind, lohnt sich ein Blick ins Innere zu werfen – allerdings rate ich zur Vorsicht beim Öffnen. Ich habe unten Fotos eines Beispiels beigefügt, damit nicht jeder seinen Sensor zerlegen muss.
Es gibt viele „verschiedene Versionen des Innenlebens“. – einige Sensoren können innen völlig anders aussehen. Es bleibt den Herstellern zu vertrauen, dass alle Versionen korrekt funktionieren.
Die Schaltung misst Temperaturen zwischen 0 und 50°C und ist daher ideal für die Überwachung von Räumen. Diese Version des Sensors ist nicht für den Einsatz im Freien geeignet, wo Minustemperaturen zu erwarten sind.
Einen größeren Messbereich zeichnen die
Zwillingssensoren DHT-21 und DHT-22 aus, die jedoch 3-4 mal teurer sind.
Anschließen des DHT-11-Sensors an den Arduino
Der DHT-11-Sensor verwendet eine ähnliche 1-Wire-Schnittstelle, so dass der Anschluss sehr einfach ist. Zuerst versorgt man 5V und GND, dann verbindet man die Datenleitung mit dem Arduino (z.B. mit Pin 2).
Wie im vorherigen Teil des Kurses ist es notwendig, einen 4,7k-Widerstand hinzuzufügen,
der die Datenleitung mit der positiven Stromschiene verbindet.
Ein Beispiel für eine solche Verbindung ist auf dem nachstehenden Foto zu sehen:
Kommunikation mit dem DHT-11
Natürlich gibt es im Internet zumindest ein paar fertige Bibliotheken, die die Verwendung dieses Sensors erleichtern. In meinen Projekten verwende ich am liebsten eine sehr einfache Bibliothek von Mark Ruys. Die notwendigen Dateien sind auf GitHub des Autors zu finden.
Die Bibliothek kann auch andere Sensoren dieses Typs (z.B.: DHT22, AM2302, RHT03) selbständig erkennen und verwalten.
Sobald die Bibliothek installiert ist (ein Prozess, der in früheren Abschnitten des Kurses beschrieben wurde), kann man mit dem Schreiben des ersten Programms fortfahren. Wir beginnen mit einem leeren Skelett mit der angehängten Header-Datei der Bibliothek, der Pin-Definition und der laufenden Kommunikation über UART:
#include "DHT.h"
#define DHT11_PIN 2
void setup()
{
Serial.begin(9600);
}
void loop()
{
}
Im nächsten Schritt muss der Sensor deklariert werden und der Bibliothek muss mitgeteilt werden, auf welchem Pin die Kommunikation stattfinden soll:
#include "DHT.h"
#define DHT11_PIN 2
DHT dht;
void setup()
{
Serial.begin(9600);
dht.setup(DHT11_PIN);
}
void loop()
{
}
Auslesen von Luftfeuchtigkeit und Temperatur aus dem DHT-11
Jetzt, in der Hauptschleife, kann man schon zu den Messwerten übergehen. Hier werden zwei Funktionen nützlich sein. Die erste zum Abrufen der Luftfeuchtigkeit in %RH: dht.getHumidity() und die zweite zum Ablesen der Temperatur in °C: dht.getTemperature().
Das Programm in seiner einfachsten Form sieht also wie folgt aus:
#include "DHT.h"
#define DHT11_PIN 2
DHT dht;
void setup()
{
Serial.begin(9600);
dht.setup(DHT11_PIN);
}
void loop()
{
//Abrufen von Informationen zur Luftfeuchtigkeit
int Luftfeuchtigkeit = dht.getHumidity();
Serial.print(Luftfeuchtigkeit);
Serial.print("%RH | ");
//Abrufen von Informationen zur Temperatur
int Temperatur = dht.getTemperature();
Serial.print(Temperatur);
Serial.println("*C");
delay(1000); //Abwarten der benötigten Zeit
}
Wie das Programm in der Praxis funktioniert, ist in der folgenden Animation zu sehen. Der Sensor benötigt relativ viel Zeit, um eine Änderung der Luftfeuchtigkeit und der Temperatur zu registrieren – es kann 6 bis 15 Sekunden dauern (normalerweise etwa 10). Weitere Informationen enthält der Kataloghinweis.
Die Animation unten zeigt das Verhalten des Sensors, wenn man auf ihn haucht:
Leider kann es manchmal zu Kommunikationsproblemen oder anderen Fehlern kommen. In diesem Fall wird auf dem Bildschirm eine Temperatur und Luftfeuchtigkeit von 0 angezeigt. Die von uns verwendete Bibliothek enthält noch einige interessante Funktionen zur Vermeidung solcher Probleme.
Erstens ist es nicht erforderlich, eine „feste“ Zeit einzugeben, nach der die nächste Ablesung erfolgen soll. Mit der Funktion dht.getMinimumSamplingPeriod() ist es möglich, Informationen über die Wartezeit bei Verwendung eines bestimmten Sensors abzurufen.
Zweitens kann mit der Funktion dht.getStatusString() überprüft werden, ob die Ablesung der Messungen ohne Fehler verlaufen ist. Wenn dies der Fall ist, gibt die obige Funktion „OK“ zurück. Im Falle eines Fehlers erhalten wir eine entsprechende Meldung, z.B. „TIMEOUT“.
Mit den oben genannten Funktionen kann das Programm wie folgt aussehen:
#include "DHT.h"
#define DHT11_PIN 2
DHT dht;
void setup()
{
Serial.begin(9600);
dht.setup(DHT11_PIN);
}
void loop()
{
// Abrufen der Informationen zur Luftfeuchtigkeit
int Feuchtigkeit = dht.getHumidity();
{ // Abrufen der Informationen zur Temperatur
int Temperatur = dht.getTemperature();
if (dht.getStatusString() == "OK") {
Serial.print("Feuchtigkeit");
Serial.print("%RH | ");
Serial.print(Temperatur);
Serial.println("*C");
}
/ / erforderliche Zeit abwarten
delay(dht.getMinimumSamplingPeriod());
}
Von nun an werden keine Informationen mehr angezeigt, wenn ein Fehler aufgetreten ist. Ein Beispiel dafür, wie dieses Programm funktioniert, ist unten zu sehen. Der Ausfall des Sensors wurde simuliert, indem das Kabel, das den DHT-11 mit dem Arduino verbindet, abgezogen wurde.
Ganz zum Schluss sei noch die letzte in unsere Bibliothek eingefügte Funktion erwähnt, die die Temperatur in die Fahrenheit-Skala umrechnet: dht.toFahrenheit(). In der Praxis würde ihr Aufruf in unserem Fall wie folgt aussehen:
Serial.print(dht.toFahrenheit(Temperatur));
Serial.println("F");
Funktionsweise des überarbeiteten Programms:
Zusammenfassung
Der DHT-11-Sensor ist, wie man oben gut sehen kann, sehr einfach zu bedienen, so dass der ganze Artikel nicht lang sein musste. Mit dem Wissen aus diesem und dem vorherigen Artikel möchte ich euch ermutigen, eine einfache Wetterstation zu bauen. Dieses Gerät kann die Temperatur, Luftfeuchtigkeit und die Bewölkung (mit Hilfe eines Fotowiderstands) messen. Die Ergebnisse können z. B. auf einem Computer oder auf einer Reihe von programmierbaren Dioden dargestellt werden.
Im nächsten Teil werden wir uns mit der Funktion millis() beschäftigen, die es uns ermöglicht, Verzögerungen zu erzeugen, die nicht das gesamte Programm unterbrechen. Dabei werden wir ein praktisches Projekt für intelligente Beleuchtung erstellen. Durch die Kombination von Elementen aus den vorherigen Teilen werden wir eine Schaltung erstellen, die es einfacher macht, sich im Dunkeln zu bewegen!
Bestellen Sie ein Set mit Elementen und beginnen Sie mit dem Lernen in der Praxis! Hier gehts zum Shop >>
Anlagen
DHT11 (pdf, 842 KB)
Dokumentation des Sensors DHT-11