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