Leggere la temperatura e l’umidità con il sensore DHT22 e il microcontrollore ESP32

Introduzione

La funzione più semplice, anche definita “Hello World”,   per un’applicazione IOT è sicuramente quella della rilevazione della temperatura e in questo post andremo ad analizzare  il codice e le caratteristiche del sensore di temperatura maggiormente utilizzato dai makers.

Per questo tipo di applicazione useremo   uno dei migliori sensori di temperatura che appartiene alla famiglia DHT.

I sensori di temperatura DHT   si distinguono per due diverse tipologie: DHT11 e DHT22, entrambi dalle ottime caratteristiche, le differenze principali sono una maggiore  risoluzione  e range di temperatura a favore del secondo modello.

Caratteristiche e differenze tra DHT22 e DHT11

Il sensore ha tre terminali, due per l’alimentazione e uno di comunicazione che può essere  sia  input che output e per questo motivo  è un open collector  di conseguenza è  necessario inserire un resistore di pull-up del valore di 1kΩ.

Figura 1

Entrambi i sensori possono rilevare la temperatura e  il tasso di umidità,  per ogni coppia di valori letti, il sensore invia al microcontrollore una stringa di 40 bits, che ha il seguente formato:

  • 16  data bits:  tasso di umidità
  • 16 data bits: temperatura
  • 8 data bits: check-sum  

Un esempio della stringa di bit inviata dal sensore al microcontrollore:

La conversione da binario a decimale segue la regola riportata nell’esempio seguente:

Se il bit più significativo dei 16 bits della temperatura è uguale ad “1” significa che  la temperatura letta è minore di zero.

Il microcontrollore può eseguire un controllo sulla correttezza dei dati ricevuti grazie agli ultimi 8 bits  inviati dal sensore, come riportato nell’esempio di seguito:

 Somma 0000 0010 + 1000 1100 + 0000 0001 +0101 1111  = (1110 1110) Check-Sum

Il  microcontrollore esegue la somma dei bits ricevuti, come riportato sopra ed effettua un controllo sull’ultimo byte ricevuto, se i due bytes sono identici  il microcontrollore può considerare i dati ricevuti come corretti, altrimenti li deve scartare.

   Le differenze tra i due sensori sono riportata nella seguente tabella comparativa:

Il sensore DHT22  ha  decisamente caratteristiche migliori, ad un costo leggermente superiore.

I due sensori forniscono una misura dell’umidità e temperatura già calibrata, il valore letto, corrisponde al valore reale  della grandezza misurata.

Ogni sensore è compensato in temperatura e calibrato in una camera termica  dove si calcola il coefficiente di  proporzionalità è memorizzato all’interno del sensore in una memoria OTP (One Time Programmabile).

Codice e applicazione

Lo schema elettrico di questa applicazione è riportata in Figura 2

Figura 2

Prima di procedere alla scrittura del codice, dobbiamo caricare la libreria del sensore DHT22, come indicato nella gif di seguito.

#include "DHT.h"

#define DHTPIN 4 //il pin d'ingresso del microcontrollore dove e' connesso il sensore

// togliere il commento solo al tipo di sensore usato
//#define DHTTYPE DHT11   // DHT 11
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
//#define DHTTYPE DHT21   // DHT 21 (AM2301)



// inizializziamo il sensore
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  dht.begin();
}

void loop() {
  // ad ogni lettura introduciamo un ritardo di due secondi
  delay(2000);

  // leggiamo l'umidita'
  float h = dht.readHumidity();
  // Leggiamo la temperatura in gradi centigradi 
  float t = dht.readTemperature();
  

  // controlliamo se abbiamo letto correttamente i dati .
  if (isnan(h) || isnan(t) ) {
    Serial.println(" La lettura e' fallita");
    return;
  }

  
  Serial.print("Umidita': ");
  Serial.print(h);
  Serial.print("%  Temperatura: ");
  Serial.print(t);
  Serial.println("");
  
}

Lascia una risposta

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Ti sei iscritto alla newsletter

There was an error while trying to send your request. Please try again.

Quattrodispositivi utilizzerà le informazioni fornite in questo modulo per restare in contatto con te e fornire aggiornamenti del sito