5. DHT11/DHT22

Versiunea originală

Ghid complet pentru Senzor de umiditate și temperatură DHT11/DHT22 cu Arduino

Acest articol este un ghid pentru senzorii populari de temperatură și umiditate DHT11 și DHT22 cu Arduino. Vom explica cum funcționează, arată câteva dintre caracteristicile sale și prezintă un exemplu de proiect Arduino pe care îl puteți modifica pentru a fi utilizat în proiectele proprii.

Pentru mai multe ghiduri despre alți senzori populari, verificați compilația a peste 60 de tutoriale și proiecte Arduino : 60+ Proiecte Arduino și Tutoriale.

Introducerea senzorilor DHT11 și DHT22

Senzorii DHT11 și DHT22 sunt utilizați pentru a măsura temperatura și umiditatea relativă. Acestea sunt foarte populare printre producătorii și pasionații de electronice.

Acești senzori conțin un cip care face conversia analogic-digitală și scoate un semnal digital cu temperatura și umiditatea. Acest lucru le face foarte ușor de utilizat cu orice microcontroler.

DHT11 vs DHT22

DHT11 și DHT22 sunt foarte asemănători, dar diferă în specificațiile lor. Următorul tabel compară unele dintre cele mai importante specificații ale senzorilor de temperatură și umiditate DHT11 și DHT22. Pentru o analiză mai aprofundată a acestor senzori, vă rugăm să verificați foaia de date a senzorilor.

DHT11

DHT22

Interval de temperatură

Intervalul de umiditate

Rezoluţie


Tensiune de lucru

Alimentare curent

Perioada de eșantionare

Preț

Pentru cumpărare

0 până la 50°C +/- 2°C

20 până la 90% +/- 5%

Umiditate: 1%
Temperatura: 1ºC

3 - 5,5 V DC

0,5 - 2,5 mA

1 secundă

$ 1 până la $ 5

Verificați prețurile

-40 la 80ºC +/- 0,5ºC

0 până la 100%+/- 2%

Umiditate: 0,1%
Temperatura: 0,1ºC

3 - 6 V DC

1 - 1,5 mA

2 secunde

$ 4 până la $ 10

Verificați prețurile

Senzorul DHT22 are o rezoluție mai bună și o gamă mai mare de măsurare a temperaturii și umidității. Cu toate acestea, este un pic mai scump și puteți solicita citiri numai la interval de 2 secunde.

DHT11 are o gamă mai mică și este mai puțin precisă. Cu toate acestea, puteți solicita citirea senzorilor în fiecare secundă. Este, de asemenea, un pic mai ieftin.

În ciuda diferențelor lor, ele funcționează într-un mod similar și puteți utiliza același cod pentru a citi temperatura și umiditatea. Trebuie doar să selectați în cod tipul de senzor pe care îl utilizați.

Pinii DHT

Senzorii DHT au patru pini, după cum se arată în figura următoare. Totuși, dacă obțineți senzorul dvs. DHT într-un breakout bord, acesta vine cu doar trei pini și cu o rezistență pull-up internă pe PIN 2.

În tabelul următor se afișează pinii DHT22 și DHT11. Când senzorul este cu fața, numerotarea pinului începe la 1 de la stânga la dreapta.


pin DHT Conectați la

1 5V

2 Orice GPIO digital; de asemenea, conectați un rezistor pull-up de 10 kOhm

3 Nu se conectează

4 GND

Unde să cumpăr?

Puteți să consultați pagina "Instrumente de consultanță pentru producători" și să găsiți cel mai bun preț pentru aceste module:

Senzor de temperatură și umiditate DHT11cu Arduino

În această secțiune, vom construi un proiect simplu cu Arduino care citește temperatura și umiditatea și afișează rezultatele pe monitorul serial.

Piese necesare

Pentru a finaliza acest tutorial, aveți nevoie de următoarele componente:

Schema

Urmați următoarea diagramă schematică pentru a conecta senzorul de temperatură și umiditate DHT11 (sau DHT22) la Arduino.

Iată conexiunile (de la stânga la dreapta):


Pin DHT Arduino

Pin 1 5V

Pin 2 D2 sau oricare pin digital

Pin 3 nu conectați

Pin 4 GND

Notă: dacă utilizați un modul cu un senzor DHT, acesta este în mod normal disponibil doar cu trei pini. Pinii trebuie să fie etichetați astfel încât să știți cum să îi legați. În plus, multe dintre aceste module vin deja cu un rezistor pull-up intern, deci nu trebuie să adăugați unul la circuit.

Instalarea bibliotecilor

Pentru a citi de la senzorul DHT, vom folosi biblioteca DHT de la Adafruit. Pentru a utiliza această bibliotecă, trebuie să instalați și biblioteca Adafruit Unified Sensor. Urmați pașii următori pentru a instala acele biblioteci.

Deschideți Arduino IDE și mergeți la Sketch > Include Library > Manage Libraries . Managerul de bibliotecă trebuie să se deschidă.

Căutați "DHT" în caseta Search și instalați biblioteca DHT de la Adafruit.

După instalarea bibliotecii DHT de la Adafruit, tastați "Adafruit Unified Sensor" în caseta de căutare. Derulați până la capăt pentru a găsi biblioteca și a o instala.

După instalarea bibliotecilor, reporniți Arduino IDE.

Cod

După instalarea bibliotecilor necesare, puteți încărca un exemplu de cod din bibliotecă.

În Arduino IDE, accesați File > Examples > DHT Sensor library > DHTtester

Următorul cod trebuie încărcat. Citește temperatura și umiditatea și afișează rezultatele în Monitorul Serial.

// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain

#include "DHT.h"

#define DHTPIN 2 // what pin we're connected to

// Uncomment whatever type you're using!
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)

// Initialize DHT sensor for normal 16mhz Arduino
DHT dht(DHTPIN, DHTTYPE);

void setup() {
Serial.begin(9600);
Serial.println("DHTxx test!");

dht.begin();
}

void loop() {
// Wait a few seconds between measurements.
delay(2000);

// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h = dht.readHumidity();
// Read temperature as Celsius
float t = dht.readTemperature();
// Read temperature as Fahrenheit
float f = dht.readTemperature(true);

// Check if any reads failed and exit early (to try again).
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Failed to read from DHT sensor!");
return;
}

// Compute heat index
// Must send in temp in Fahrenheit!
float hi = dht.computeHeatIndex(f, h);

Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.print(" *C ");
Serial.print(f);
Serial.print(" *F\t");
Serial.print("Heat index: ");
Serial.print(hi);
Serial.println(" *F");
}

Vizualizați codul brut

Cum funcționează codul

Începeți prin includerea bibliotecii DHT :

#include "DHT.h"

Apoi, definiți pinul la care este conectat senzorul DHT. În acest caz este conectat la pinul digital 2.

#define DHTPIN 2 // what digital pin we're connected to

Apoi, trebuie să definiți tipul de senzor DHT pe care îl utilizați. În exemplul nostru folosim DHT11.

#define DHTTYPE DHT11 // DHT 11

Dacă utilizați un alt senzor DHT, trebuie să comentați linia anterioară și să dezactivați unul dintre următoarele:

//#define DHTTYPE DHT22 // DHT 22 (AM2302)

//#define DHTTYPE DHT21 // DHT 21 (AM2301)

Apoi, inițializați un obiect DHT numit dht cu PIN-ul și tipul definit anterior:

DHT dht(DHTPIN, DHTTYPE);

În setup (), inițializați Monitorul Serial la o rată de transfer de 9600 pentru depanare.

Serial.begin(9600);

Serial.println("DHTxx test!");

Inițializați senzorul DHT cu metoda .begin () .

dht.begin();

În bucla () , la început, există o întârziere de 2 secunde. Această întârziere este necesară pentru a acorda suficient timp senzorului pentru a citi. Rata maximă de eșantionare este de două secunde pentru DHT22 și o secundă pentru DHT11.

delay(2000);

Citirea temperaturii și a umidității este foarte simplă. Pentru a obține umiditate, trebuie doar să utilizați metoda readHumidity () pe obiectul dht. În acest caz, salvăm umiditatea în variabila h. Rețineți că metoda readHumidity () readuce o valoare de tip float.

float h = dht.readHumidity();

În mod similar, pentru a citi temperatura, utilizați metoda readTemperature ().

float t = dht.readTemperature();

Pentru a obține temperatura în grade Fahrenheit, doar treci true la metoda readTemperature () după cum urmează:

float f = dht.readTemperature(true);

Această bibliotecă vine și cu metode de calcul al indicelui de căldură în Fahrenheit și Celsius:

// Compute heat index in Fahrenheit (the default)

float hif = dht.computeHeatIndex(f, h);

// Compute heat index in Celsius (isFahreheit = false)

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

În final, toate citirile sunt afișate pe Monitorul Serial.

Serial.print("Humidity: ");

Serial.print(h);

Serial.print(" %\t");

Serial.print("Temperature: ");

Serial.print(t);

Serial.print(" *C ");

Serial.print(f);

Serial.print(" *F\t");

Serial.print("Heat index: ");

Serial.print(hic);

Serial.print(" *C ");

Serial.print(hif);

Serial.println(" *F");

Demonstrație

După încărcarea codului în Arduino, deschideți monitorul serial la o rată de transfer de 9600. Trebuie să obțineți citirea senzorului la fiecare două secunde. Iată ce ar trebui să vedeți în monitorul serial Arduino IDE.

serial_monitor

Depanare - Nu a putut citi de la senzorul DHT

Dacă încercați să citiți temperatura și umiditatea din senzorul DHT11/DHT22 și primiți un mesaj de eroare în monitorul dvs. serial, urmați pașii următori pentru a vedea dacă puteți face senzorul să funcționeze (sau citiți
Ghidul dedicat pentru depanarea DHT).

"Nu a putut citi de la senzorul DHT!" sau citirea Nan

Dacă senzorul dvs. DHT returnează mesajul de eroare "Nu a putut citi de la senzorul DHT!" sau valorile DHT revin "Nan":

Rezolvarea depanării DHT11 DHT22 AM2302 AM2301 Nu a putut fi citită de la senzorul DHT!  sau Nan

Încercați unul dintre următoarele sfaturi de depanare:

  • Cablare: atunci când construiți un proiect de electronică, trebuie să verificați de două ori atribuirea legăturii sau pinului. După verificarea și testarea faptului că circuitul dvs. este conectat corect, dacă tot nu funcționează, continuați să citiți următoarele sfaturi de depanare.

  • Puterea: senzorul DHT are un domeniu de funcționare de 3V până la 5,5V (DHT11) sau de la 3V la 6V (DHT22). Dacă alimentați senzorul de la un pin de 3,3V, în unele cazuri alimentarea DHT cu 5V rezolvă problema.

  • Port USB nepotrivit sau cablu USB: uneori alimentarea dispozitivului Arduino direct de la un port USB al PC-ului nu este suficientă. Încercați să conectați la un hub USB alimentat de o sursă externă de alimentare. Ar putea fi de ajutor înlocuirea cablului USB cu unul mai bun sau mai scurt. Având un port USB care furnizează suficientă energie sau utilizând un cablu USB bun, această problemă se rezolvă adesea.

  • Sursa de alimentare: după cum s-a menționat în sfatul anterior, Arduino ar putea să nu furnizeze suficientă putere pentru a citi corect de la senzorul DHT. În unele cazuri, este posibil să aveți nevoie să alimentați Arduino cu o sursă de alimentare care oferă mai mult curent.

  • Tipul senzorului: verificați dacă nu ați comandat în codul dvs. senzorul potrivit pentru proiectul dvs. În acest proiect, am folosit DHT22:

//#define DHTTYPE DHT11 // DHT 11

#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321

//#define DHTTYPE DHT21 // DHT 21 (AM2301)

  • Rata de eșantionare: senzorul DHT este foarte lent pentru obținerea citirilor (citirea senzorului poate dura până la 2 secunde). În unele cazuri, creșterea timpului dintre citiri rezolvă problema.

  • Senzorul DHT este ars sau rupt: din păcate, acești senzori ieftini, uneori, arată foarte bine, dar sunt arși/rupți. Deci, chiar dacă ați asamblat circuitul și codul corect, acesta nu va reuși să obțină citirile. Încercați să utilizați un senzor diferit pentru a vedea dacă vă remediază problema.

  • Rata de transfer greșită sau nu ați reușit să încărcați codul: dacă nu vedeți nimic în dispozitivul serial Arduino IDE, verificați dacă ați selectat rata corectă de transfer, portul COM sau că ați încărcat codul cu succes.

În timp ce construim proiectele noastre, am întâlnit probleme similare cu DHT și a fost întotdeauna rezolvată urmând una din metodele descrise mai devreme.

Fatal error: Adafruit_Sensor.h: No such file or directory

Există, de asemenea, o eroare comună care se întâmplă atunci când încercați să compilați codul. Dacă primiți următoarea eroare:

fatal error: Adafruit_Sensor.h: No such file or directory

#include <Adafruit_Sensor.h>

Trebuie să instalați biblioteca driver Adafruit Unified Sensor. În Arduino IDE, tastați caseta de căutare "Adafruit Unified Sensor", derulați până jos pentru a găsi biblioteca și a o instala.

Instalarea bibliotecii șoferului Adafruit Unified Sensor

După instalarea bibliotecii, reporniți Arduino IDE și codul trebuie să fie compilat fără mesajul de eroare.

Sper că ați găsit acest ghid util. Alte ghiduri cu senzorul de temperatură și umiditate DHT11 / DHT22:

Dacă vă place Arduino, vă recomandăm, de asemenea, următoarele resurse: