hu:arduino:humidity

Differences

This shows you the differences between two versions of the page.

hu:arduino:humidity [2020/06/20 13:01]
hu:arduino:humidity [2022/04/21 15:02] ()
 1:  1:
 +====== 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á):
 +
 +<hidden A szoftver megjelenítése>
 +<code c>
 +#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);
 +
 +}
 +</code>
 +</hidden>
 +
 +===== 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]]. \\ 
 +
 +<WRAP center round important 80%>
 +  * 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.
 +</WRAP>
 +
 +==== Vezetékezés ====
 +
 +{{:wiki:arduino:si7021_wiring.png?400|SI7021 vezetékezés}}
 +
 +==== Szoftver ====
 +
 +<hidden A szoftver megjelenítése>
 +<code c>
 +// source: http://www.arduinoprojects.net/temperature-projects/arduino-si7021-i2c-humidity-temperature-sensor.php
 +#include <Wire.h>
 + 
 +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);
 + 
 +}
 +</code>
 +</hidden>