Arduino páratartalom-mérés

DHT11 / DHT22 szenzor

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 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.

KY-015 páratartalom-mérő modul

A KY-015 modul magán a szenzoron kívül egy 1 kΩ-os ellenállást tartalmaz:

KY-015 páratartalom-mérő modul

Specifikáció

jellemzőDHT11DHT22
Tápfeszültség3.3 ~ 5.5V DC
Jelátviteli távolságmaximum 20 m
Páratartalom mérési tartomány20 - 80% RH0 - 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ány0 - 50 °C-40 - 125 °C
Hőmérséklet mérési hibahatár± 2%± 0.5%
Felbontáspáratartalom 1% RH, hőmérséklet 1 ℃

Vezetékezés

DHT11 szenzor-modul vezetékezése

A fenti kötés sémája:
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 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.

SI7021 modul

Az SI7021 egy páratartalom és hőmérsékletmérő modul, mely I²C kommunikációval érhető el.

A modul (elvileg) technikailag az alábbi modulokkal egyezik meg: HTU21D, SHT20, SHT21, HDC1080.

Technikai adatok

Ü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ó: I²C
Fix I²C cím: 0x40

Az IC apró fehér fedele egy Politetrafluoretilén (PTFE) membránszűrő.

A kommunikáció összekötése után érdemes az Arduino I²C scanner programmal tesztelni a modul jelenlétét.

Az Arduino I²C összefoglalása itt található: Arduino I²C.

  • A modul 3.3V 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 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

SI7021 vezetékezés

Szoftver

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