====== Arduino-Feuchtemessung ====== {{ :wiki:arduino:dht11_sens.png?120|DHT11 / DHT22 szenzor}} ===== DHT11 / DHT22 Sensoren ===== {{anchor:dht11}} {{anchor:dht22}} Das DHTxx-Modul enthält eine resistive Feuchtemesskomponente und eine NTC-Temperaturmesskomponente. Die Messungen werden von einem integrierten 8-Bit-Mikrocontroller durchgeführt, der einen kalibrierten digitalen Signalausgang liefert. Das Modul zeichnet sich durch hohe Zuverlässigkeit und hervorragende Langzeitstabilität aus. Der IC vom Typ ** AM2302 ** ist in den DHT22 integriert. DHT11 gilt als //"ultra"// billig, anscheinend ist 11 "weniger" (siehe Vergleich unten). Das DHTxx-Modul kann über eine einadrige serielle Schnittstelle mit einer maximalen Übertragungsentfernung von 20 Metern abgefragt werden. Der Sensor muss an einen digitalen Pin angeschlossen werden. ==== Feuchtemessmodule ==== Es gibt zwei Versionen von DHT 11/22 Modulen. Bei einem von ihnen wurden der Widerstand und der Kondensator, die zum Herstellen der Verbindung benötigt werden, integriert (z. B. **140C80**, **KY-015**, ..), bei dem anderen Typ gibt es keine anderen Komponenten als den Sensor, sodass auch der Widerstand und der Kondensator getrennt sind. muss installiert sein (siehe Verkabelung). {{:wiki:arduino:ky015.png|KY-015 Feuchtemessmodul}} ==== Spezifikation ==== ^Parameter^DHT11^DHT22| |Spannung|3.3 ~ 5.5V DC| |Signalübertragungsentfernung|maximal 20 m| |Feuchtigkeitsmessbereich|20 - 80% RH|0 - 100% RH| |Fehlergrenze für Feuchtemessung|± 5%|± 2 ~ 5%| |Langzeitstabilität|< ± 1% RH / Jahr|| |Temperaturmessbereich|0 - 50 °C|-40 - 125 °C| |Fehlergrenze für Temperaturmessung|± 2%|± 0.5%| |Auflösung|Feuchtemessung 1% RH, Temperatur 1 ℃| ==== Verdrahtung ==== {{:wiki:arduino:dht11_wiring.png?600|DHT11 - Arduino Verdrahtung}} Schema der obigen Verbindung: \\ {{:wiki:arduino:dht11_wire.png|Diagramm des DHT11-Sensormoduls}} ==== Software ==== Ich habe den Sensor mit einem Arduino Uno getestet. Der einfachste Weg, es einzurichten, ist die Installation des folgenden Verzeichnisses (Adafruit): https://github.com/adafruit/DHT-sensor-library Das Verzeichnis wird nicht kompiliert, ohne auf das unten stehende zusätzliche Verzeichnis zuzugreifen (dieses muss ebenfalls installiert sein): https://github.com/adafruit/Adafruit_Sensor Diese beiden Bibliotheken müssen also von Github aus installiert werden, dann muss der DHT-Tester über die ebenfalls hier installierten Beispielprogramme ausgeführt werden. Das //"gestrippte"// Programm ohne die //"Verzögerung"// Funktion mit internem Timing (erfordert die obigen Verzeichnisse): #include "DHT.h" #define DHTPIN 2 // DHT22 pin // Uncomment whatever type you're using! //#define DHTTYPE DHT11 // DHT 11 #define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321 //#define DHTTYPE DHT21 // DHT 21 (AM2301) unsigned long actTime, oldTime = 0; DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(115200); Serial.println("Start, wait.."); dht.begin(); delay(2000); } void loop() { actTime = millis(); if (actTime - oldTime > 2000) { // time to DHT22 check oldTime = actTime; float h = dht.readHumidity(); float t = dht.readTemperature(); if (isnan(h) || isnan(t)) { Serial.println("Failed to read from DHT sensor!"); return; } float hic = dht.computeHeatIndex(t, h, false); Serial.print("Humidity: "); Serial.print(h); Serial.print(" %\t"); Serial.print("Temperature: "); Serial.print(t); Serial.print(" *C "); Serial.print("Heat index: "); Serial.print(hic); Serial.println(" *C "); }; delay(10); } ===== SI7021, GY-21 Modul ===== {{anchor:si7021}} {{anchor:gy_21}} {{anchor:sht21}} ^SI7021 Modul^SHT21 (GY-21) Modul^SHT21 Modul| |{{:wiki:arduino:si7021.png?150|SI7021 Modul}}|{{:hu:arduino:sht21.png?150|SHT21 (GY-21) Modul}}|{{:hu:arduino:sht21_2.png?150|SHT21 Modul}}| Dies sind Feuchtigkeits- und Temperaturmessmodule: * auf die über die Kommunikation [[hu:comm:bus_i2c|I²C]] zugegriffen werden kann * HTU21D IC ist integriert Das Modul ist (im Prinzip) technisch identisch mit folgenden Modulen: **HTU21D**, **SHT20**, **SHT21**, **HDC1080**. ==== Technische Details ==== ^Parameter^Data| |Spannung|1.9 .. 3.6 V DC (3,3V empfohlen)| |Standby Spannung|60nA| |Temperaturbereich|-40 és 85 °C (-10 .. 60 °C empfohlen)| |Temperaturgenauigkeit|± 0,4 °C (-10 .. 85 °C)| |Feuchtigkeit|0-100% relative Luftfeuchtigkeit (20% - 80% relative Luftfeuchtigkeit)| |Genauigkeit der Feuchtemessung|± 3% relative Luftfeuchtigkeit (0-80% relative Luftfeuchtigkeit)| |Temperaturumwandlungszeit|7ms| |Feuchtigkeitsumwandlungszeit|17ms| |Kommunikation|[[hu:comm:bus_i2c|I²C]]| |Fix I²C Address|0x40| |Überbrückungsentfernung|Etwa 1 Meter für 100 Kbaud und 6-8 Meter für 10 Kbaud| Die winzige weiße Abdeckung des IC (falls vorhanden) ist ein Membranfilter aus Polytetrafluorethylen (PTFE). Nach dem Anschließen der Kommunikation empfiehlt es sich, das Vorhandensein des Moduls mit dem [[de:arduino:soft_basic#i_c_scanner|Arduino I²C-Scannerprogramm]] zu testen. Eine Zusammenfassung des Arduino I²C finden Sie hier: [[hu:arduino:start#arduino_i2c|Arduino I²C]]. \\ * Das Modul arbeitet mit [[de:arduino:start#arduino_ttl_logische_ebenen|3,3-V-TTL-Logik]]. Für den Anschluss an die 5-V-Logik muss ein 10-kΩ-Widerstand verwendet werden. * Das Modul verfügt über integrierte 4,7-KΩ-Abisolierwiderstände für die I²C-Kommunikation. Wenn Sie andere Teilnehmer an das I²C anschließen möchten, muss dieser Widerstand gelötet werden (oder die anderen Teilnehmer benötigen sie nicht mehr). * Der Sensor muss vor physikalischen / chemischen Verunreinigungen geschützt werden, da diese die Genauigkeit der Messung stark beeinträchtigen. ==== Verdrahtung ==== {{:wiki:arduino:si7021_wiring.png?400|SI7021 Verdrahtung}} ==== Software ==== // source: http://www.arduinoprojects.net/temperature-projects/arduino-si7021-i2c-humidity-temperature-sensor.php #include const int ADDR =0x40; int X0,X1,Y0,Y1,Y2,Y3; double X,Y,X_out,Y_out1,Y_out2; void setup() { Serial.begin(9600); Wire.begin(); delay(100); Wire.beginTransmission(ADDR); Wire.endTransmission(); } void loop() { /**Send command of initiating temperature measurement**/ Wire.beginTransmission(ADDR); Wire.write(0xE3); Wire.endTransmission(); Serial.print("Temp"); Serial.print("\t"); Serial.println("Humidity"); /**Read data of temperature**/ Wire.requestFrom(ADDR,2); if(Wire.available()<=2); { X0 = Wire.read(); X1 = Wire.read(); X0 = X0<<8; X_out = X0+X1; } /**Calculate and display temperature**/ X=(175.72*X_out)/65536; X=X-46.85; Serial.print(X); Serial.print("C"); Serial.print("\t"); /**Send command of initiating relative humidity measurement**/ Wire.beginTransmission(ADDR); Wire.write(0xE5); Wire.endTransmission(); /**Read data of relative humidity**/ Wire.requestFrom(ADDR,2); if(Wire.available()<=2); { Y0 = Wire.read(); Y2=Y0/100; Y0=Y0%100; Y1 = Wire.read(); Y_out1 = Y2*25600; Y_out2 = Y0*256+Y1; } /**Calculate and display relative humidity**/ Y_out1 = (125*Y_out1)/65536; Y_out2 = (125*Y_out2)/65536; Y = Y_out1+Y_out2; Y=Y-6; Serial.print(Y); Serial.println("%"); delay(300); Serial.println(); delay(1000); }