hu:arduino:humidity

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

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

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

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 ℃

DHT11 szenzor-modul vezetékezése

A fenti kötés sémája:
DHT11 szenzor-modul séma

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.

A lecsupaszított program, delay funkció nélkül, belső időzítéssel (a fenti könyvtárak kellenek hozzá):

A szoftver megjelenítése

A szoftver megjelenítése

#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 modulSHT21 (GY-21) modulSHT21 modul
SI7021 modulSHT21 (GY-21) modulSHT21 modul

Ezek olyan páratartalom és hőmérsékletmérő modulok,

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

JellemzőAdat
Üzemi feszültség1.9 .. 3.6 V DC (3,3V ajánlott)
Készenléti áram60nA
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áratartalom0-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ím0x40
Áthidalható távolságNagyjá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 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.

SI7021 vezetékezés

A szoftver megjelenítése

A szoftver megjelenítése

// 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);
 
}
  • hu/arduino/humidity.txt
  • 2022/04/21 15:02
  • ()