DHT21 und DHT22 sind digitale Temperatur- und Luftfeuchtesensoren mit einer Auflösung von 8bit. Sie haben eine Messgenauigkeit der Temperatur von ±0.5°C im Bereich von -40°C bis +80°C und rund 3% zwischen 0-99,9% RH für die Messung der Luftfeuchte. Im Vergleich zum DHT22 besitzt der DHT21 Kabel statt Pins zum Anschluss. Dafür ist der DHT21 wesentlich größer als der DHT22. Im Gegensatz zum DHT11 haben DHT21 und DHT22 einen größeren Messbereich, eine höhere Auflösung und Messgenauigkeit.
Auch wenn eine Kalibrierung des Luftfeuchtesensors für den Einsatz am Bienenstock in der Regel nicht notwendig ist, kann die Anleitung von Roland zu diesem Thema sehr empfohlen werden: https://chelifer.de/kalibrieren-von-feuchtesensoren.
Bezug
Die beiden Sensoren DHT21 und DHT22 sind kompatibel mit beelogger-Universal und beelogger-Solar ! |
Bild | Bezugsquelle | Preis ab | Suchbegriffe* | Bemerkungen |
![]() |
eBay | 2,95€ | DHT22 AM2302 | wesentlich kleiner als DHT21 |
![]() |
eBay | 2,70€ | DHT21 AM2301 | Kabel statt Pins zum Anschluss |
Beschaltung
Die Beschaltung des DHT21 oder DHT22 ist sehr einfach. Versorgt wird der Sensor an ‘VDD’ mit einer Spannung von 3,3V bis 5V. Weil die minimale Betriebsspannung 3,3V beträgt, sind Anschlussleitungen bei Verwendung mit dem beelogger-Solar kurz zu halten. Nach Datenblatt sind bei 3,3V Betriebsspannung maximal 30cm vorzusehen, längere Leitungen führen zu Messfehlern. ‘Data’ des ersten Sensors verbindet man mit Pin 5 des Arduinos. Beim zweiten Sensor wird ‘Data’ mit Pin 6 des Arduinos verbunden. Fehlt noch ein Widerstand von 4,7K Ohm von ‘VDD’ zu ‘Data’ und die Verbindung von ‘GND’ mit Masse. Werden zwei Sensoren angeschlossen, beispielsweise für die Stocktemperatur und die Außentemperatur, ist für jeden Data-Pin ein separater Widerstand notwendig.
Libraries
<dht.h> – https://github.com/RobTillaart/Arduino/tree/master/libraries/DHTlib – getestet mit Version 0.1.26, enthalten im beelogger-Library-Paket
Test-Programmcode
Der Programmcode nutzt den in der Library integrieren Check der Sensorantwort. Meldet dieser Check ein Problem, beispielsweise durch ein loses Kabel, bekommt die entsprechende Variable für Temperatur oder Luftfeuchte einen vordefinierten Wert. Mit diesem Test-Programmcode wird zusätzlich eine Fehlermeldung über den seriellen Monitor ausgegeben, um das Problem genauer zu definieren.
Werden die Messwerte später an einen Webserver übertragen, erkennt das Skript zum Speichern der Datensätze einen Fehler mit dem vordefinierten Wert und es wird für diesen Sensor kein Messwert gespeichert. Dadurch wird die grafische Darstellung, beispielsweise durch Arbeiten am Sensor, nicht beeinträchtigt.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
/* * (C) 2018 Thorsten Gurzan - beelogger.de * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ // beelogger.de - Arduino Datenlogger für Imker // Erläuterungen dieses Programmcodes unter https://beelogger.de #include "dht.h" #define Anzahl_Sensoren_DHT 2 // Mögliche Werte: '0','1','2' dht myDHT; byte DHT_Sensor_Pin[2] = {5,6}; const float No_Val = 999.99; float Temperatur[2] = {No_Val,No_Val}; float Luftfeuchte[2] = {No_Val,No_Val}; // Für beelogger-Solar: Aktivierung der Stromversorgung für Sensoren, Module und DS3231 #define Power_Pin 4 void setup() { Serial.begin(9600); Serial.println("DHT Test"); Serial.println(); digitalWrite(Power_Pin, HIGH); pinMode(Power_Pin, OUTPUT); delay(1000); } void loop() { if ((Anzahl_Sensoren_DHT > 0) and (Anzahl_Sensoren_DHT < 3)) { for(byte i=0 ;i < Anzahl_Sensoren_DHT; i++) { Serial.print("Sensor "); Serial.println(i+1); int check = myDHT.read(DHT_Sensor_Pin[i]); Temperatur[i] = No_Val; Luftfeuchte[i] = No_Val; switch (check) { case DHTLIB_OK: Luftfeuchte[i] = myDHT.humidity; Temperatur[i] = myDHT.temperature; Serial.print(Temperatur[i]); Serial.println(" 'C"); Serial.print(Luftfeuchte[i]); Serial.println(" %"); Serial.println(); break; case DHTLIB_ERROR_CHECKSUM: Serial.println("Checksum error"); Serial.println(); break; case DHTLIB_ERROR_TIMEOUT: Serial.println("Time out error"); Serial.println(); break; case DHTLIB_ERROR_CONNECT: Serial.println("Connect error"); Serial.println(); break; case DHTLIB_ERROR_ACK_L: Serial.println("Ack Low error"); Serial.println(); break; case DHTLIB_ERROR_ACK_H: Serial.println("Ack High error"); Serial.println(); break; default: Serial.println("Unknown error"); Serial.println(); break; } } delay(2000); } } |
Ausgabe des seriellen Monitors (9600 baud):
1 2 3 4 5 6 7 8 9 |
DHT Test Sensor 1 31.00 'C 44.30 % Sensor 2 30.80 'C 45.90 % |
Programmcode downloaden:
DownloadDer komplette Programmcode für den Arduino Datenlogger mit Stockwaage für Imker ist unter Programmcode zu finden.