KKM: DHT22

Početnik si s Croduinom. Ili s elektronikom? Za oko ti je zapeo određeni modul, ali ne znaš kako ga koristiti? Bez brige, tu je KKM! Kako Koristiti Module (KKM) je serija blog tutorijala e-radionice na kojoj ćeš pronaći sve što ti treba kako bi započeo rad sa svojim omiljenim modulom. Tutorijali obuhvaćaju: tehničke karakteristike, princip rada, upute kako povezati modul s Croduinom te osnovni kod. Sve ostalo prepuštamo tebi na maštu.

Uvod

 
DHT22 ili AM2303 je kapacitativni senzor relativne vlažnosti zraka i temperature zraka. Senzor je izvrsne kvalitete, vrlo precizan, ali i nešto skuplji te sporiji (2 sekunde). Osim uređaja za mjerenje, modul se sastoji i od 8-bitnog mikrokontrolera i OTP memorije preko kojih ide kalibriranje svakog očitanja. Male dimenzije, mala potrošnja i prijenos podataka na velike udaljenosti (>20m) čini ga primjenjivim mnoštvu uređaja.
dsc_5163
 
Karakteristike:
 
Napon: 3.3 - 5.5V (preporučeno 5V)
Struja: 300uA (prosječno)
Raspon mjerenja: 0-100%RH; -40~80 °C
Točnost: +-2%RH; +-0.5 °C
Dugotrajna stabilnost: +-0.5%RH/godišnje
Vrijeme mjerenja: 2s
Dimenzije: 14x18x5.5mm
 
Dijagrami dolje prikazuju točnost očitanja u ovisnosti o mjerenjima.
 
Untitled
Za više pogledaj datasheet.

Kako radi DHT22?

 
Croduino i DHT22 komuniciraju preko SDA (serial data) pina na DHT-u i I/O pina na Croduinu, te tako čini pojednostavljenu single-bus (one-wire) komunikaciju. Zbog svoje master/slave strukture, SDA pinu je potreban vanjski pull-up otpornik. Vrijednost otpornika ovisi o duljini kabela između mikrokontrolera i senzora. Preporuka je koristiti 5.1k otpornike za 5V napon, dok za duljine kabela >20m nije potreban otpornik. Ukoliko koristite 3.3V napon duljina kabela može biti do 1m maksimalno.
 
Postupak mjerenje izgleda ovako:
Untitled
 
Mikrokontroler šalje start signal na SDA pin DHT-a koji prelazi iz stanja štednje u running mode. Signal obično traje 1ms, nakon koje se I/O mikrokontrolera postavlja u input. DHT mu uzvrača s 40bitnim podacima koji predstavljaju relativnu vlažnost i temperaturu zraka.

Kako povezati s Croduinom?

 
Untitled Sketch_bb

Arduino kod

 
Za očitanja s DHT22 koristiti ćemo library kojeg možete preuzeti na GitHubu. Ako ste nesigurni kako instalirati novi library pratite ovaj tutorial. Primjer koda, kao i uvijek, nakon instalacije library-a možete pronaći pod File - Examples. Ispod je naša verzija koja daje očitanja vlage i temperature zraka, te feels like temperature.
 

///////////////////////////////////////////////////////////////////////////////
/* */
/* */
/* (c) e-radionica.com 2015 - http://e-radionica.com/hr/faq/#privatnost */
/* [email protected] */
/* */
/* */
/* DHT22 - KKM tutorial */
///////////////////////////////////////////////////////////////////////////////
#include "DHT.h"
int pinDHT = A0; // pin na koji smo spojili SDA pin DHT-a
int tipDHT = DHT22; // možete se koristiti i s DHT11 i DHT21 modulima
// S LIJEVA NA DESNO SPOJITE PINOVE:
// prvi pin na +5V
// drugi pin gdje god je pinDHT
// treći pin ostavit prazan
// četvrti pin na gnd
//
// spojite 10k pull-up otpornik između drugog(SDA) pina i +5V
DHT dht(pinDHT, tipDHT);
void setup() {
Serial.begin(9600);
dht.begin();
Serial.println("DHT test\n");
}
void loop() {
// interval između mjerenja mora biti barem 2sekunde
// također, prije prvog mjerenja je potreban delay
delay(2000);
// očitaj vlagu
float h = dht.readHumidity();
// očitaj temperaturu u Celziusima
float t = dht.readTemperature();
// za očitanje temperature u Fahrenheitima koristite:
// float f = dht.readTemperature(true);
// provjera indeksa topline u Celziusima
float hic = dht.computeHeatIndex(t, h, false);
// za provjeru u Fahrenheitima koristite:
// float hif = dht.computeHeatIndex(f, h);
// provjera uspješnosti mjerenja..
if (isnan(h) || isnan(t)) {
Serial.println("Neuspješno čitanje s DHT-a");
return;
}
// ako je sve uredu, ispiši očitanja:
Serial.print("Relativna vlaga zraka: ");
Serial.print(h);
Serial.print("%\t");
Serial.print("Temperatura: ");
Serial.print(t);
Serial.print("*C ");
Serial.print("Feels like: ");
Serial.print(hic);
Serial.println("*C");
}
Leave a Reply