====== 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);
}