Időjárás állomás DHTxx típusú hőmérséklet és páratartalomszenzorral


Időjárás állomás DHTxx típusú hőmérséklet és páratartalomszenzorral

by Roboworld Hobbielektronika


Rövid leírás:
Ebben a rövid projektben bemutatjuk neked, hogyan építheted meg saját időjárás állomásod. A projekt során vezetékes kommunikációt hozunk létre. A későbbi 21. projektünkben szó esik arról is, hogy a vezetékes csatlakozást, hogy tudjuk vezetéknélkülire kicserélni. A hőmérséklet méréséért egy DHT22-es hőmérséklet és páratartalom érzékelő fog segítségünkre lenni. A DHT22-es hőmérsékletérzékelő a DHT11-es nagytestvére.

Hardware:
1 db Arduino UNO mikrovezérlő
1 db DHT22-es hőmérsékletérzékelő
1 db DHT11-es hőmérsékletérzékelő
1 db 1602 I2C kommunikációs LCD kijelző
Jumper kábel

Áttekintés

Ezek az érzékelők nagyon népszerűek az elektronikai hobbisták számára, mert nagyon olcsóak, de mégis nagy teljesítményt nyújtanak. Itt vannak a fő jellemzők és különbségek a két érzékelő között:

A DHT22 a drágább verzió, amely nyilvánvalóan jobb specifikációkkal rendelkezik. Hőmérséklet-mérési tartománya -40 és +125 fok között + -0,5 fokos pontossággal, míg a DHT11 hőmérséklet-tartomány 0 és 50 Celsius fok között + -2 fokos pontossággal. A DHT22 érzékelő jobb szélesebb páratartalom tartománnyal rendelkezik, 0 és 100% közötti, 2-5% -os pontossággal, míg a DHT11 páratartalma 20% és 80% közötti, 5% pontossággal.

Csupán két tulajdonság az, ahol a DHT11 jobb, mint a DHT22. Az egyik a mintavételezési frekvencia, amely a DHT11 esetében 1Hz ami annyit jelent, hogy minden egyes másodpercenben képes a környezetének hőmérsékletét megmérni, míg a DHT22 mintavételi frekvencia 0,5Hz, vagyis egy mintavételezés 2 másodpercenként. A másik különbség a méretük. A DHT11 kisebb testmérettel rendelkezik. Mindkét érzékelő működési feszültsége 3-5 V, míg a maximális áramuk a mérés közben 2,5mA

Kapcsolási rajz

Mintakód, programozás
A mintakód helyes lefutásához szükségünk van a DHT szenzor és a 1602 LCD kijelző(LiquidCrystal), valamint az Adafruit Sensor librarykre. Ha ezeket nem adjuk hozzá az Arduino IDE-hez akkor a mintakód hibára fut a fordítás során.
Az Arduinora feltöltött programkód tulajodképpen nem csinál mást, mint a szenzorról jövő jeleket fogadja majd kiírja azokat az értékeket a kijelzőre. Abban az esetben a szenzortól semmilyen adat nem érkezik úgy a mintaprogram jelzi felénk.

A mintakód minkét DHT szenzorral üzemel. Ha a DHT11-es szenzort szeretnénk használni akkor a mintakódban a „#define DHTTYPE DHT22” sort a „#define DHTTYPE DHT11” -re kell módosítani.

A DHTxx szenzorok saját adatátviteli protokollt használnak. Ez a protokoll pontos időzítést igényel, ehhez segítségünkre vannak a szenzor adatlapjában megtalálható időzítési diagrammok. Azonban nem kell aggódnunk, mivel a DHT libraryk ezekere az időzítésekre gondosan figyelnek, ezzel megkönnyítve a helyzetünket.



Mintakód:
#include <Wire.h> 
#include "DHT.h" 
#define DHTTYPE DHT22                 // DHT 22  (AM2302), AM2321 
#define DHTPIN 4                      // D4-es pinhez csatlakoztatva a hőmérséklet szenzor DATA pinje. 
#include <LiquidCrystal_I2C.h>        // LiquidCrystal_I2C könyvtár használata 
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);   // LiquidCrystal_I2C könyvtárat használjuk 
// Szükséges megadni a kommunikációs csatornát. Esetünkben ez 0x3F azonban ez eltérhet. 
// Ha nem működik a 0x3F akkor i2c_scanner.ino futtatása szükséges, 
//amely kiírja a megfelelő értéket. 0x3F-et átírva pl: 0x27 -re megoldhatja a kommunikációs hibát. 
DHT dht(DHTPIN, DHTTYPE); 

void setup() { 
lcd.begin(16, 2); 
Serial.begin(9600); 
Serial.println("DHTxx teszt!"); 
dht.begin(); 
} 

void loop() { 

delay(2000); 
float h = dht.readHumidity();             // Olvassa a szenzor által mért páratartalomértéket 
float t = dht.readTemperature();          // Olvassa a szenzor által mért hőmérsékletértéket 
float f = dht.readTemperature(true); 
lcd.setCursor(0, 0);                      //  a kurzort a 0 karakterhez és az 1 sorhoz helyezi 
lcd.print("Hom.:     ");                  // Kiírja hogy "Hom: " 
lcd.print(t); 
delay(10); 

if (isnan(h) || isnan(t) || isnan(f)) { 
Serial.println("Nem sikerult adatot fogadni a DHT erzekelotol"); 
return; 
} 

//  float hif = dht.computeHeatIndex(f, h); 
// float hic = dht.computeHeatIndex(t, h, false); 

lcd.setCursor(0, 1);                         //  a kurzort a 0 karakterhez és az 1 sorhoz helyezi 
lcd.print("Paratart: ");                     // Kiírja hogy "Paratart: " 
lcd.print(h); 
delay(10); 
Serial.print("Paratartalom: "); 
Serial.print(h); 
Serial.print(" %\t"); 
Serial.print("Homerseklet: "); 
Serial.print(t); 
Serial.print(" *C "); 
Serial.print(f); 
Serial.println(" *F\t"); 
// Serial.print("Heat index: "); 
// Serial.print(hic); 
// Serial.print(" *C "); 
// Serial.print(hif); 
// Serial.println(" *F"); 
} 

Letöltés
 A libraryket innen tudod letölteni

Megjegyzések