====== Arduino páratartalom-mérés ======
{{ :wiki:arduino:dht11_sens.png?120|DHT11 / DHT22 szenzor}}
===== DHT11 / DHT22 szenzor =====
{{anchor:dht11}}
{{anchor:dht22}}
A DHTxx modul egy rezisztív típusú nedvességmérési komponenst és egy NTC hőmérsékletmérő komponenst tartalmaz. A méréseket egy integrált 8 bites mikrokontroller végzi el, mely kalibrált digitális jelkimenetet biztosít. A modul nagy megbízhatósággal és kiváló hosszú távú stabilitással rendelkezik. A DHT22-be az **AM2302** típusú IC került integrálásra.
A DHT22 szenzor nagyon- , míg a DHT11 "ultra" olcsónak számít, nyilván a 11-es némileg kevesebbet is "tud" (lásd lent az összehasonlítást).
A DHTxx modul lekérdezését egy egyvezetékes soros interfészen keresztül lehet megvalósítani, a **jelátvitel maximális távolsága 20 méter**. A szenzort digitális pin-re kell csatlakoztatni.
==== Páratartalom-mérő modul ====
A DHT 11/22 moduloknak két változata van. Az egyiken a kapcsolat kiépítéshez szükséges ellenállás és kondenzátor integrálásra került (pl. **140C80**, **KY-015**,..), a másik típuson az érzékelőn kívül nincs más alkatrész, így ezeknél az ellenállást és kondenzátort még külön be kell építeni (lásd: vezetékezés).
{{:wiki:arduino:ky015.png|KY-015 páratartalom-mérő modul}}
==== Specifikáció ====
^jellemző^DHT11^DHT22|
|Tápfeszültség|3.3 ~ 5.5V DC|
|Jelátviteli távolság|maximum 20 m|
|Páratartalom mérési tartomány|20 - 80% RH|0 - 100% RH|
|Páratartalom mérési hibahatár|± 5%|± 2 ~ 5%|
|Hosszú távú stabilitás|< ± 1% RH / év|
|Hőmérséklet mérési tartomány|0 - 50 °C|-40 - 125 °C|
|Hőmérséklet mérési hibahatár|± 2%|± 0.5%|
|Felbontás|páratartalom 1% RH, hőmérséklet 1 ℃|
==== Vezetékezés ====
{{:wiki:arduino:dht11_wiring.png?600|DHT11 szenzor-modul vezetékezése}}
A fenti kötés sémája: \\
{{:wiki:arduino:dht11_wire.png|DHT11 szenzor-modul séma}}
==== Szoftver ====
A szenzort egy Arduino Uno-val teszteltem. A legegyszerűbb módszer a beállítására, hogy az alábbi (Adafruit) könyvtárt:
https://github.com/adafruit/DHT-sensor-library
A könyvtár nem fog lefordulni az alábbi további könyvtár elérése nélkül:
https://github.com/adafruit/Adafruit_Sensor
Szóval, ezt a két könyvtárt a Githubról telepíteni kell (lásd [[hu:arduino:soft_basic#koenyvtar_telepitese_a_github-rol|könyvtár telepítése a Github-ról]]), majd a szintén innen települő példaprogramok közül futtatni kell a DHTtestert.
A //"lecsupaszított"// program, //"delay"// funkció nélkül, belső időzítéssel (a fenti könyvtárak kellenek hozzá):
#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}}|
Ezek olyan páratartalom és hőmérsékletmérő modulok,
* melyek [[hu:comm:bus_i2c|I²C]] kommunikációval érhető el
* a HTU21D IC-t integrálják
A modul (elvileg) technikailag az alábbi modulokkal egyezik meg: **HTU21D**, **SHT20**, **SHT21**, **HDC1080**.
==== Technikai adatok ====
^Jellemző^Adat|
|Üzemi feszültség|1.9 .. 3.6 V DC (3,3V ajánlott)|
|Készenléti áram|60nA|
|Hőmérséklettartomány|-40 és 85 °C (-10 .. 60 °C ajánlott)|
|Hőmérséklet pontosság|± 0,4 °C (-10 .. 85 °C)|
|Páratartalom|0-100% relatív páratartalom (20% - 80% relatív páratartalom)|
|Páratartalom pontosság|± 3% relatív páratartalom (0-80% relatív páratartalom)|
|Hőmérséklet-konverziós idő|7ms|
|Páratartalom-konverziós idő|17ms|
|Kommunikáció|[[hu:comm:bus_i2c|I²C]]|
|Fix I²C cím|0x40|
|Áthidalható távolság|Nagyjából 1 méter 100 Kbaud esetén, és 6-8 méter 10 Kbaud esetén|
Az IC apró fehér fedele (ha van) egy Politetrafluoretilén (PTFE) membránszűrő.
A kommunikáció összekötése után érdemes az [[hu:arduino:soft_basic#i_c_scanner|Arduino I²C scanner]] programmal tesztelni a modul jelenlétét.
Az Arduino I²C összefoglalása itt található: [[hu:arduino:start#arduino_i2c|Arduino I²C]]. \\
* A modul 3.3V [[hu:arduino:start#arduino_ttl|TTL logiká]]val működik, az 5V-os logikához való csatoláshoz 10kΩ-os ellenállást kell alkalmazni.
* A modul beépített 4.7 KΩ-os lehúzó ellenállásokkal rendelkezik az [[hu:comm:bus_i2c|I²C]] kommunikációhoz. Amennyiben más résztvevőket is akar az I²C-re csatolni, ezt az ellenállást le kell forrasztani (vagy a többi résztvevőhöz már ezek nem kellenek).
* A modul PTFE szűrője lassítja a mérést, de a szűrő eltávolítása a készülék rövidített élettartamát vagy meghibásodását eredményezheti nagyon nedves környezetben.
* A szenzort óvni kell a fizikai / kémiai szennyeződéstől, mert ezek erőteljesen befolyásolják a mérés pontosságát.
==== Vezetékezés ====
{{:wiki:arduino:si7021_wiring.png?400|SI7021 vezetékezés}}
==== Szoftver ====
// 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);
}