Der Temperatur- und Feuchtigkeitssensor DHT17 ist ein beliebter und günstiger Sensor, der über einen ziemlich breiten Temperatur- und relativen Feuchtigkeitsbereich verwendet werden kann. Mal sehen, wie man es mit dem Arduino verbindet und wie man Daten daraus liest.
Notwendig
- -Arduino;
- - DHT17 Temperatur- und Feuchtigkeitssensor.
Anleitung
Schritt 1
Der DHT11-Sensor hat also die folgenden Eigenschaften:
- Bereich der gemessenen relativen Luftfeuchtigkeit - 20..90% mit einem Fehler von bis zu 5%, - Bereich der gemessenen Temperaturen - 0..50 Grad Celsius mit einem Fehler von bis zu 2 Grad;
- Reaktionszeit auf Feuchtigkeitsänderungen - bis zu 15 Sekunden, Temperatur - bis zu 30 Sekunden;
- Die Mindestabfragezeit beträgt 1 Sekunde.
Wie Sie sehen, ist der DHT11-Sensor nicht sehr genau und der Temperaturbereich deckt keine negativen Werte ab, was für Außenmessungen in der kalten Jahreszeit in unserem Klima kaum geeignet ist. Die geringen Kosten, die geringe Größe und die einfache Handhabung gleichen diese Nachteile jedoch teilweise aus.
Die Abbildung zeigt das Aussehen des Sensors und seine Abmessungen in Millimetern.
Schritt 2
Betrachten Sie das Anschlussdiagramm des DHT11 Temperatur- und Feuchtigkeitssensors zum Mikrocontroller, insbesondere zum Arduino. Auf dem Bild:
- MCU - Mikrocontroller (z. B. Arduino oder ähnlich) oder Einplatinencomputer (Raspberry Pi oder ähnlich);
- DHT11 - Temperatur- und Feuchtigkeitssensor;
- DATEN - Datenbus; wenn die Länge des Verbindungskabels vom Sensor zum Mikrocontroller 20 Meter nicht überschreitet, wird empfohlen, diesen Bus mit einem 5, 1 kOhm-Widerstand an die Stromversorgung zu ziehen; wenn mehr als 20 Meter, dann ein anderer geeigneter Wert (kleiner).
- VDD - Sensorversorgung; zulässige Spannungen von ~ 3,0 bis ~ 5,5 Volt DC; Wenn eine Stromversorgung von ~ 3,3 V verwendet wird, ist es ratsam, eine Zuleitung von nicht mehr als 20 cm Länge zu verwenden.
Eine der Sensorleitungen - die dritte - ist mit nichts verbunden.
Der DHT11-Sensor wird oft als komplette Baugruppe mit der notwendigen Verrohrung verkauft - Pull-up-Widerstand und Filterkondensator.
Schritt 3
Lassen Sie uns das betrachtete Schema zusammenstellen. Ich werde auch einen Logikanalysator an die Schaltung anschließen, damit ich das Zeitdiagramm der Kommunikation mit dem Sensor studieren kann.
Schritt 4
Gehen wir den einfachen Weg: Laden Sie die Bibliothek für den DHT11-Sensor herunter (Link im Abschnitt "Quellen"), installieren Sie sie auf die übliche Weise (entpacken Sie sie in das Verzeichnis \bibliotheken\ der Arduino-Entwicklungsumgebung).
Schreiben wir so eine einfache Skizze. Laden wir es in Arduino. Diese Skizze gibt alle 2 Sekunden die vom DHT11-Sensor gelesenen RH- und Temperaturmeldungen an den seriellen Port des Computers aus.
Schritt 5
Lassen Sie uns nun anhand des vom Logikanalysator erhaltenen Zeitdiagramms herausfinden, wie der Informationsaustausch durchgeführt wird.
Der Temperatur- und Feuchtigkeitssensor DHT11 verwendet eine serielle Single-Wire-Schnittstelle, um mit dem Mikrocontroller zu kommunizieren. Ein Datenaustausch dauert ca. 40 ms und beinhaltet: 1 Anfragebit vom Mikrocontroller, 1 Bit der Sensorantwort und 40 Datenbits vom Sensor. Die Daten umfassen: 16 Bit Feuchtigkeitsinformationen, 26 Bit Temperaturinformationen und 8 Prüfbits.
Schauen wir uns das Timing-Diagramm der Arduino-Kommunikation mit dem DHT11-Sensor genauer an.
Aus der Abbildung ist ersichtlich, dass es zwei Arten von Impulsen gibt: kurze und lange. Kurze Impulse in diesem Austauschprotokoll bezeichnen Nullen, lange Impulse - Einsen.
Die ersten beiden Impulse sind also die Anfrage des Arduino an DHT11 und dementsprechend die Antwort des Sensors. Als nächstes kommen 16 Bit Feuchtigkeit. Außerdem sind sie in Bytes unterteilt, hoch und niedrig, links hoch. Das heißt, in unserer Abbildung sind die Feuchtigkeitsdaten wie folgt:
0001000000000000 = 00000000 00010000 = 0x10 = 16% r. F.
Temperaturdaten ähnlich wie:
0001011100000000 = 00000000 00010111 = 0x17 = 23 Grad Celsius.
Prüfbits - die Prüfsumme ist nur die Summe von 4 empfangenen Datenbytes:
00000000 +
00010000 +
00000000 +
00010111 =
00100111 binär oder 16 + 23 = 39 dezimal.