Messung von Innentemperatur und Luftfeuchtigkeit mit einem DHT-22 Sensor

Diese Variante findet im Erdgeschoss meines Hauses Verwendung.

Hardware Basis

Hardware Liste:
1 Arduino Uno (bei mir ein R3 kompatibles Board) samt USB-Anschlusskabel
1 Arduino Ethernet Shield
1 Kondensator 100 nF
1 Widerstand 10 kOhm
1 DHT-22 Sensor zur Messung von Temperatur und Luftfeuchtigkeit

Als Hardware Basis, um Sensoren in meine Messung einzubinden, verwende ich einen Arduino Uno R3, Kosten im 1-stelligen EUR-Bereich, wenn man China Klone wie z.B. in ebay erhälltich, verwendet).

Nun müssen die Daten auch noch ins Internet übertragen werden. Gottseidank bot sich bei mir bei 2 von den 3 gebauten Temperaturmessstationen eine direkte Anbindung an vorhandene Switches an. Ich verwende somit ein Arduino Ethernet Shield („Shield“ nennen sich die „Huckepack“-Boards, die auf andere Arduinos aufgesteckt werden können). Als China Klon unter 10 EUR. Mit diesem Shield habe ich sehr gute Erfahrungen hinsichtlich Stabilität gemacht. Wenn kein Switch in der Nähe vorhanden gewesen wäre, wäre auch die Verwendung eines Wifi Shields denkbar gewesen, mit welchem ich allerdings stabilitätstechnisch keine sehr guten Erfahrungen gemacht habe – dazu aber später.

Arduino Uno mit aufgestecktem Ethernet Shield
Arduino Uno mit aufgestecktem Ethernet Shield

Als Sensor verwende ich einen DHT-22, der sowohl Temperatur als auch Luftfeuchtigkeit messen kann. Der DHT-22 ist ein Low Cost Sensor mit einem 1-wire-Interface (das „1 wire“ bezieht sich auf 1 notwendige Datenleitung). Der Sensor ist vorkalibriert und benötigt ausser einem Widerstand keine extra Komponenten, sodass sofort mit der Messung von Temperatur und Luftfeuchtigkeit begonnen werden kann.

Auf der Adafruit Seite ist ein tolles Tutorial zu finden, in dem sowohl Details zum DHT-22 Sensor als auch zum Anschluss des Sensors an einem Arduino zu finden sind. Da alle Arduino Anschlüsse beim Ethernet Shield durchgeschliffen werden, können die Anschlüsse des DHT-22 am Ethernet Shield entsprechend der Adafruit Anleitung erfolgen. Hier ein Schema der Verdrahtung (dieses zeigt nur das Ethernet Shield, der Arduino Uno steckt ja drunter…):
Verdrahtungsschema
Verdrahtungsschema

Code

Wenn man nun noch das Thingspeak Tutorial zum Einbinden eines Arduino Boards als Referenz heranzieht und den entsprechenden Code anpasst, kommt man dann sehr schnell zum gewünschten Ergebnis.

Hier nun mein Arduino Code im PDF Format aus Codebender bzw. im Word Format (der Text kann direkt in die Arduino Software oder in Codebender kopiert werden) – ein paar Extra Erklärungen hier – die Zeilennummern beziehen sich auf die Zeilennummern im PDF-Code:

Nach dem allgemeinen Teil des Programms werden in Zeilen 41 bis 44 die libraries inkludiert. Die ersten 3 libraries sind Codebender bereits bekannt, die DHT library, die die Arbeit mit dem DHT-22 Modul erleichtert, gibt es hier zum Download – sie kann in Codebender eingebunden werden.

Zeile 46: Als Arduino Pin für die Anbindung des DHT-22 Sensors wird Pin 2 verwendet – wie im Adafruit Tutorial auch.

Zeile 48-51: Hier ist der verwendete DHT Sensor zu definieren

Zeile 53-57: Bei meinem Programm findet alle 30 sec eine Messung statt. Nur wenn sich der gemessene Temperaturwert vom letzten gemessenen Wert um min 0,2 °C (ERKENNUNGSSCHWELLE) unterscheidet, wird dieser Wert alle 5 min (updateThingSpeakInterval) in thingspeak.com gespeichert. Wenn der Unterschied zum letzten Wert < 0,2 °C beträgt, wird kein Wert gespeichert. Sollte der Wert sehr lange konstant bleiben, wird alle 30 min (maxThingSpeakInterval) ein Wert gespeichert. All dies dient dazu, die Datenmenge in Thingspeak nicht explodieren zu lassen.

Zeile 75: Hier ist der eigene API-Key, den man bei der Registrierung in Thingspeak erhält, einzutragen

Zeile 88-90: Hier sind IP-Adressen des Ethernet Shields und des Gateway Routers sowie die Subnet Adresse einzutragen

Zeile 97: wird nicht benötigt

Zeile 109-117: Hier werden Vorhandensein und Funktion des Ethernet Shields getestet, wenn irgendetwas nicht funktioniert, stoppt das Programm hier

Zeile 119-126: Zeigt die aktuelle IP Adresse auf der seriellen Ausgabe an

Zeile 136-137: Hier werden vom DHT-22 Sensor Luftfeuchtigkeit und Temperatur eingelesen

Zeile 139-145: Manchmal kam es bei mir vor, dass kein Wert gelesen werden konnte – nach einigen Wiederholungen funktioniert’s dann irgendwann mal

Zeile 148: Ich berechne hier einen Hitzeindex („gefühlte Temperatur“)

Zeile 150-152: …wenn man zum Testen die Daten auf dem seriellen Monitor ausgeben will

Zeile 154-156: Wandelt die numerischen Werte für die Ausgabe auf Thingspeak in formatierte Strings um

Zeile 159-163: Wenn noch irgendwelche Meldungen auf dem Ethernet Client vorhanden sind, werden diese hier ausgegeben. ACHTUNG: Im originalen Code lt. Thingspeak Tutorial befand sich ein Fehler (es war ein IF statt dem WHILE vorhanden)

Zeile 173-174: Hier wird der Überlauf des Arduino Zeitbasis der alle rund 50 Tage stattfindet, korrigiert

Zeile 182-190: Wenn die Temperaturänderung seit der letzten Ausgabe in Thingspeak min. 0,2 °C beträgt oder schon 30 min her ist, findet eine Ausgabe in Thingspeak statt; ansonsten werden in

Zeile 191-197 die Daten auf dem seriellen Monitor ausgegeben

Zeile 198-203: Wenn sich das Ethernet Shield mal aufhängen sollte, wird hier ein Neustart durchgeführt

Zeile 208-245: In dieser Prozedur erfolgt die eigentliche Ausgabe auf Thingspeak, diese Zeilen sind gegenüber dem Tutorial auf der Thingspeak-Seite unverändert.

Foto der Schaltung

Wenn man das ganze mal in Betrieb genommen hat, sieht das Ergebnis wie folgt aus – gut zu erkennen sind der Widerstand zwischen + und der Datenleitung (links unten). Weiters habe ich (der fehlt im Adafruit Tutorial) noch einen 100 nF Kondensator zwischen + und GND geschaltet wie vom DHT-22 Hersteller empfohlen – auch dieser ist auf dem Foto ersichtlich.

Foto 03.01.16, 20 00 36
Foto der Schaltung mit DHT-22 Sensor, ersichtlich sind das Ethernet Kabel und das Stromanschlusskabel

So sieht dann das Ergebnis auf Thingspeak.com aus (Detail). Hier ein Live Link zu meinen Messdaten.

Bildschirmfoto 2016-01-03 um 22.53.59 copy

Zusammenfassung

Kosten: Max. 30-40 EUR inkl. Arduino Uno, Ethernet Shield und DHT-22 Sensor.
Aufwand: Wenn keine Änderungen an der Software durchgeführt werden, sollte das in wenigen Stunden komplett machbar sein (exkl. Registrierung bei Codebender und Thingspeak)
Voraussetzungen: Ein wenig elektrotechnische und/oder IT-Kenntnisse schaden nicht, um den Umgang mit einem Arduino Board, das Software uploaden etc. in kurzer Zeit bewerkstelligen zu können, man kann sich aber auch ohne diese Kenntnisse in die Materie einlesen. Hierzu wird das Studium einer oder auch mehrerer Arduino Einführungen im Internet empfohlen.
Genauigkeit: Lt. DHT-22 Hersteller +/-0,5°C und +/- 2% Luftfeuchtigkeit. Insgesamt ist mir die Genauigkeit hier weniger wichtig, da ich die Schaltung mit einem Digitalthermometer bei mir zuhause abgeglichen habe – die Abweichung war genau 0,0°C, dies hätte man ansonsten aber einfach mit einem Korrekturfaktor in der Software korrigieren können. Wichtiger als die Genauigkeit ist mir, dass sich all meine Temperaturmessungen auf dasselbe Referenzniveau beziehen d.h. direkt vergleichbar sind.
Referenzen:
– Plattform für die Kodierung: www.codebender.com
– Internet of Things Platform für Temperaturdatenspeicherung und -visualisierung: www.thingspeak.com
– Lieferanten für Hardware: Ebay, Amazon und viele andere

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s