In diesem ersten Teil schauen wir uns die Rohdaten an, die der Sensor abliefert. Dazu wird das Datenblatt des Herstellers AOSONG zu Rate gezogen. Um an die Rohdaten zu kommen, wird eine Bibliotheksdatei von github.com benutzt. Wer weiter einsteigen möchte in die Programmierung dieses Sensors, kann dort alle Bibliotheksdateien zum DHT22 Sensor mit ihren Funktionen einsehen und erfahren, wie auf die einzelnen Bits des DHT22 zugegriffen wird.
Der Sensor DHT22
SDA Datenleitung (1-Wire-Verbindung mit eigenem Protokoll; siehe Datenblatt)
NA nicht verfügbar, nicht belegt
Leistungsdaten nach Herstellerangaben
Schaltungsaufbau
Betrachtung der Rohdaten | |
Material |
|
Aufgaben |
|
Oszillogramm mit den Rohdaten des Sensors DHT22
Aus den Rohdaten des Sensors DHT22 berechnete Messwerte für Temperatur und Feuchtigkeit
Auf die hier angezeigten Messwerte werden wir in der folgenden Übung zurückgreifen. Dann werden die entschlüsselten Rohdaten mit den im Terminalfenster dargestellten Werten verglichen.
Das Programm dht22_1.ino
Entschlüsselung der Rohdaten aus dem Oszillogramm
Zur Entschlüsselung der Rohdaten muss das Datenblatt des eingesetzten Sensors DHT22 der Fa. AOSONG herangezogen werden. Das Sensorelemente eines DHT22 (AM2303) ist mit einem 8-Bit Einzelchip-Computer ausgestattet.
Die Kommunikation
Die Kommunikation zwischen einer MCU (z. B. Arduino UNO) und einem AM2303 erfolgt über einen 1-Wire-Bus oder 1-Draht-Bus. Wie die abläuft, ist im Datenblatt des Herstellers ausführlich beschrieben.
Die Datenübermittlung besteht aus einem 8-Bit-Ganzzahl- und einem 8-Bit-Dezimalblock sowohl für die Feuchtigkeits- als auch für die Temperaturwerte.
Im Ruhezustand liegt der Datenbus SDA eines DHT22 auf HIGH-Potential (s. Abb. 3a).
Sobald der Datenaustausch starten soll, wird SDA für mindestens 1 ms auf LOW-Potential gezogen.
Der Sensor antwortet innerhalb von 20 - 40 µs mit einem LOW-Signal von ca. 80 µs und einem HIGH-Signal von ca. 80 µs (s. Abb. 3a),
40-Bit | 0000 | 0001 | 1011 | 0001 | 0000 | 0000 | 1111 | 1011 |
1010 |
1101 |
hexadezimal | 0 | 1 | B | 1 | 0 | 0 | F | B | A | D |
relative Feuchte in % | Temperatur | Prüfsumme |
Die Dekodierung der Rohdaten erfolgt über die Umrechnung der Binärdaten ins Dezimalsystem. Aus Vereinfachungsgründen habe ich hier neben der binären auch die hexadezimale Darstellungsform gewählt. Ihre Umrechnung ins 10-er System erscheint einfacher und weniger fehleranfällig zu sein.
Ermittlung der relativen Feuchte in %
Division durch 10 ergibt den gemessenen relativen Feuchtigkeitswert: 43,3 %. Dieser Wert ist identisch mit den im Terminalfenster dargestellten Werten (s.Abb. 2b).
Ermittlung der Temperatur
Division durch 10 ergibt den gemessenen Temperaturwert: 25,1 °C. Auch dieser Wert ist identisch mit den im Terminalfenster dargestellten Werten (s.Abb. 2b).
In dieser Übung werden Funktionen und beigefügte Beispielprogramme einer DHT-Sensor-Bibliothek genutzt, die aus dem Internet bei github.com geladen werden kann.
Benenne die nicht entpackte Datei nach dem Herunterladen in DHT um und kopiere sie in den Libraries Ordner von Arduino. Starte anschließend den Arduino Editor.
Über das Hauptmenü Sketch – Bibliothek einbinden - .ZIP Bibliothek hinzufügen wird die DHT Bibliothek in das System eingebunden und kann jetzt im Programm benutzt werden.
Temperatur- , Luftfeuchte- und Hitzeindexmessung | |
Material |
|
Aufgaben |
|
Terminalausgabe der Messwerte
Die in Abb. 4 aufgezeichneten Messwerte wurden eine Stunde später als die in Abb. 2b aufgenommen (s. Zeitspalte). Sie weisen in der zweiten Spalte "Feuchtigkeit" einen einmaligen Sprung von ca. 34 % auf ca. 75 % aus. Dazu wurde der Sensor zuvor kurz angehaucht. Man kann hier gut erkennen, dass mit höherer Luftfeuchte die gefühlte Temperatur (der Hitzeindex) deutlich ansteigt.