Ce este senzorul DHT11 si la ce se foloseste?
Senzorul DHT11 este o modalitate practica si ieftina de a masura temperatura si umiditatea,cu o acuratete acceptabila si un cost redus. Acest senzor este folosit de obicei in aplicatii cum ar fi mini-statii de vreme,automatizarea casei,termostat DIY etc.
Din Romania,senzorul poate fi cumparat la un pret acceptabil de pe Optimus Digital.
Cum functioneaza senzorul DHT11?
Senzorul DHT11 masoara temperatura cu ajutorul unui termistor:
Rezistenta termistorului variaza odata cu cresterea temperaturii (datorita oxidului de nichel semiconductor) dupa o regula numita ecuatia Steinhart-Hart.
Arduino calculeaza rezistenta termistorului dupa formula:
DHT11 detecteaza vaporii de apa prin masurarea rezistentei electrice între doi electrozi. Componenta de detectare a umiditatii este un substrat care tine umiditatea cu electrozi aplicati la suprafata. Când vaporii de apa sunt absorbiti de substrat, ionii sunt eliberati de substrat, ceea ce creste conductivitatea între electrozi. Modificarea rezistentei dintre cei doi electrozi este proportionala cu umiditatea relativa. Umiditatea relativa mai mare scade rezistența dintre electrozi, în timp ce umiditatea relativa mai mica creste rezistenta dintre electrozi:
Sensorul masoara temperaturi cuprinse intre -5 si 50 °C cu o acuratete de ±2 °C si umiditatea relativa cuprinsa intre 20-90% cu precizie de ±5%.
Montajul
Senzorul DHT11 are trei pini:VCC (se conecteaza la 5V),GND (se conecteaza la GND) si OUT (deoarece DHT11 este un senzor digital,OUT se conecteza la orice pin digital Arduino,in exemplu la pinul 7) :
Programul
Inainte de toate,trebuie sa descarcam biblioteca DHTLib.zip de aici.Aceasta biblioteca usureaza mult comunicarea dintre senzor si Arduino si cuprinde multe functii utile.Dupa ce descarcam biblioteca,deschidem Arduino IDE si accesam Sketch>Include Library>Add .ZIP Library si selectam DHTLib.zip:
Dupa ce este selectat fisierul corespunzator,ar trebui sa apara urmatorul mesaj:
Programul este:
#include <dht.h> // include biblioteca dht.h
dht DHT; // creeaza o instanta a clasei DHT din librarie
#define pinDHT11 7 // atribuie pinului 7 denumirea de "pinDHT11"
void setup(){
Serial.begin(9600); // initializare comunicare seriala la viteza de 9600 baud
Serial.println("Initializare"); /* afiseaza pe monitorul serial pe o linie noua textul dintre paranteze */
delay(2000); // asteapta 2 secunde (pentru incalzirea senzorului)
}
void loop()
{
int citire = DHT.read11(pinDHT11); /* creare variabila "citire" care contine citirea pinului pinDHT11 */
Serial.print("Temperatura = "); // afiseaza pe monitorul serial textul dintre paranteze
Serial.println(DHT.temperature); // afiseaza pe monitorul serial rezultatul citirii temperaturii
Serial.print("Umiditate = "); // afiseaza pe monitorul serial textul dintre paranteze
Serial.println(DHT.humidity); // afiseaza pe monitorul serial rezultatul citirii umiditatii
Serial.print("%"); // afiseaza pe monitorul serial textul dintre paranteze
delay(3000); // asteapta 3 secunde
}
Citirea senzorului DHT.read11 cuprinde de fapt 2 citiri:citirea temperaturii (DHT.temperature) si citirea umiditatii (DHT.humidity).
Programul pentru senzorul DHT11 impreuna cu un ecran LCD 16x2:
#include <dht.h> // include biblioteca dht.h
#include <LiquidCrystal.h> //include biblioteca LiquidCrystal.h
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // initializeaza pinii 12(RS),11(RW) si 5,4,3,2(D4-D7)
dht DHT; //creeaza o instanta a clasei DHT din librarie
#define pinDHT11 7 // atribuie pinului 7 denumirea de "pinDHT11"
void setup(){
lcd.begin(16, 2);// initializeaza ecranul cu 16 coloane si 2 randuri
delay(1000); // asteapta 1 secunda
}
void loop()
{
int citire = DHT.read11(pinDHT11); /* creare variabila "citire" care contine citirea pinului pinDHT11 */
lcd.setCursor(0,0); // seteaza cursorul pe coloana 0 randul 0
lcd.print("Temp: "); // afiseaza pe monitorul serial textul dintre paranteze
lcd.print(DHT.temperature); // afiseaza pe monitorul serial rezultatul citirii temperaturii
lcd.print("C"); // afiseaza pe monitorul serial textul dintre paranteze
lcd.setCursor(0,1); // seteaza cursorul pe coloana 0 randul 1
lcd.print("Umiditate: "); // afiseaza pe monitorul serial textul dintre paranteze
lcd.print(DHT.humidity); // afiseaza pe monitorul serial rezultatul citirii umiditatii
lcd.print("%"); // afiseaza pe monitorul serial rezultatul citirii umiditatii
delay(3000); // asteapta 3 secunde
}
Comentarios