Unterrichts- und Lernmaterial für Mikrocontroller
Unterrichts- und Lernmaterial fürMikrocontroller

1 - Temperatur- und Luftfeuchtemessung mit dem DHT22 (AM2303) - Teil 1

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

 

 

 

 

 

 

 

 

Abbildung 1

Zwischen Vdd und SDA ist ein Pull-up Widerstand von 47kOhm geschaltet. SDA liegt an P9 des Arduino UNO. Vdd = 5V.

Betrachtung der Rohdaten
Material
  • 1x  Steckbrett
  • 1x  Widerstand 470kOhm
  • 1x  DHT22 Temperatur- und Feuchtesensor
  • 1x Arduino UNO oder NANO ESP32
  • 1x  PicoScope Oszilloskop mit Digitaleingängen o.ä.
  • 1x  USB-Verbindungskabel
  • 4x  Steckdraht
  • 1x  Datenblatt AM2303 (DHT22) der Fa. AOSONG (aus dem Internet herunterladen)
Aufgaben
  • Informiere dich über die Begriffe relative und absolute Luftfeuchtigkeit.
  • Baue die Schaltung auf dem Steckbrett auf.
  • Trenne das Arduino UNO Board vom USB-Verbindungskabel und stelle die Drahtverbindungen zum Board her.
  • Verbinde den Arduino UNO wieder mit dem USB-Verbindungskabel.
  • Übertrage das Programm dht22_1.ino in den Arduino Editor und speichere es ab.
  • Verbinde einen Digitalausgang des Oszilloskops mit D2 des Arduino UNO.
  • Starte das Programm.
  • Versuche die Bitfolgen im Oszillogramm zu dekodieren.

Oszillogramm mit den Rohdaten des Sensors DHT22

Abbildung 2a - Ausgabe der Rohdaten des Sensors DHT22 an SDA

Aus den Rohdaten des Sensors DHT22 berechnete Messwerte für Temperatur und Feuchtigkeit

Abb. 2b - Terminalausgabe der Feuchtigkeits- und Temperaturwerte. Ganz links ist die Uhrzeit der Messaufnahme angezeigt.

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),

Abbildung 3a - Aufzeichnung der Rohdaten mit einem Oszilloskop an SDA.
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

2 - Die Dekodierung der Rohdaten

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 %

 

  • Der Hexadezimalzahl 01B116 oder
  • der Binärzahl 0000 0001 1011 00012
  • entspricht die Dezimalzahl 43310.

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

 

  • Der Hexadezimalzahl 00FB16 oder
  • der Binärzahl 0000 0000 1111 10112
  • entspricht die Dezimalzahl 25110.

Division durch 10 ergibt den gemessenen Temperaturwert: 25,1 °C. Auch dieser Wert ist identisch mit den im Terminalfenster dargestellten Werten (s.Abb. 2b).

3 - Temperatur- und Luftfeuchtemessung mit dem DHT22 - Teil 2

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
  • Gleicher Aufbau wie im Teil 1 dieses Abschnitts.
Aufgaben
  • Benutze das Programm dht22_1.ino aus der vorherigen Übung und starte es.
  • Vergleiche die im Terminal ausgegebenen Temperatur- und Feuchtewerte mit den zuvor in Teil 1 aus den Rohdaten errechneten Werten. Es sollten bei zeitlicher Nähe der Messung (keine Veränderung der Temperatur oder relativen Feuchtigkeit vorausgesetzt) identische Werte herauskommen.

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.

Abbildung 4 - Aus der relative Luftfeuchtigkeit und der gemessenen Temperatur kann der Hitzeindex (die gefühlte Temperatur) in °C berechnet werden.
Druckversion | Sitemap
© Reinhard Rahner - Gettorf