Il sensore DHT11 (ed il sensore DHT22) permette di misurare sia la temperature che il livello di umidità presente nell’aria. Presente in commercio per pochi euro, lo troviamo già montato su schede elettriche che ne facilitano enormemente l’utilizzo. Vediamo in questo articolo come è facile collegare questo sensore al nostro Arduino e come effettuare delle misure.
I Sensori DHT11 e DHT12
Questo piccolo sensore sta raccogliendo molto successo ultimamente grazie al suo basso costo e alla facilità di utilizzo. La possibilità di effettuare delle misure sia di temperatura che di umidità lo rendono molto utile in applicazioni come stazioni metereologiche, sonde per l’analisi del terreno e sistemi domotici.
Come detto sopra, questo sensore lo troviamo in commercio già integrato su un piccolo modulo che ci facilita enormemente il compito dei collegamenti. Infatti non sarà necessaria alcuna saldatura, né tenere conto dell’aggiunta di altri componenti elettronici come le resistenza. Sarà sufficiente connettere con dei semplici cavi jumper ai 3 o 4 connettori in uscita. Vediamoli in dettaglio
Come possiamo vedere dalla foto i due modelli sono facilmente distinguibili tra di loro. Il DHT11 ha la custodia di color blu mentre il DHT22 ha la custodia di color bianco. Il DHT11 è più economico a discapito però di una minore precisione e di una minore resistenza. Inoltre nel caso in cui necessitano misurazioni agli estremi della scala della umidità relativa (0-20% e 80-100% di umidità) si deve utilizzare obbligatoriamente il DHT22.
Di seguito una tabella con i margini di operabilità dei due sensori a confronto
DHT11 | DHT22 | |
Humidity Range | 20-90% RH | 0-100% RH |
Humidity Accuracy | ±5% RH | ±2% RH |
Temperature Range | 0-50 °C | -40-80 °C |
Temperature Accuracy | ±2% °C | ±0.5% °C |
Operating Voltage | 3.3V to 5.5V | 3.3V to 6V |
Reading time | 6-10 sec | 2 sec |
L’umidità relativa
Abbiamo visto che i sensori DHT11 e DHT12 ci permettono di misurare allo stesso tempo i valori di temperatura e di umidità, o più precisamente di umidità relativa. Ma che cosa è l’umidità relativa?
L’umidità relativa è la quantità di vapore acqueo presente nell’aria rispetto al punto di saturazione del vapore acqueo nell’aria. In corrispondenza del punto di saturazione, il vapore acqueo comincia a condensare ed accumularsi sulle superfici formando goccie di umidità.
Il punto di saturazione varia a seconda della temperatura dell’aria. Aria fredda può mantenere una percentuale minore di vapore acqueo, mentre aria sempre più calda è in grado di mantenerne sempre di più prima di raggiungere il grado di saturazione.
L’equazione per calcolare l’umidità relativa è la seguente
dove è la densità del vapore acqueo, mentre è la densità del vapore acqueo a saturazione.
L’umidità relativa viene espressa in percentuali, per cui al 100% di umidità si ha il fenomeno di condensazione, e a 0% si ha aria completamente secca.
Come i sensori DHT11 e DHT22 misurano la temperatura e l’umidità
Il sensore DHT11 come anche il DHT22, rilevano la presenza di vapore acqueo misurando la resistenza elettrica tra due elettrodi. Il componente sensibile all’umidità è un substrato in grado di trattenere l’umidità, con gli elettrodi applicati alla superficie. Quando l’acqua viene assorbita dal substrato, gli ioni vengono rilasciati dal substrato che incrementa in questo modo la conduttività tra i due elettrodi. La variazione di resistenza tra i due elettrodi è proporzionale all’umidità relativa. Maggiore sarà l’umidità relativa, minore sarà la resistenza tra i due elettrodi, mentre minore sarà l’umidità relativa, maggiore sara la resistenza tra i due elettrodi.
Mentre per quanto riguarda la temperatura, il sensore DHT11 la misura grazie alla presenza di un sensore di temperatura NTC (termistore) montato su di esso.
Se si rimuove la custodia di plastica che protegge il sensore, è possibile vedere i due elettrodi applicati al substrato su di un lato del circuito stampato, mentre sull’altro lato abbiamo un circuito integrato (IC) che ha il compito di convertire le misure di resistenza in umidità relativa. Inoltre questo IC contiene al suo interno i coefficienti di calibrazione, e controlla la trasmissione dei dati tra il sensore DHT e l’esterno.
Se il sensore DHT11 è montato su una basetta da cui escono solo 3 pin, allora sarà già presente su di esso una resistenza pull-up di 10KΩ. Questa è necessario sia presente tra la linea di segnale e l’alimentazione a 5V, per assicurarsi che il livello del segnale rimanga alto per default. Se invece si dispone del modulo sensore da solo (quello con 4 pin in uscita e senza basetta) allora dovremo aggiungere da soli la resistenza di pull-up.
Come connettere il sensore DHT11 ad Arduino
Abbiamo visto che il DHT11 (come anche il DHT22) si può trovare in commercio in due diverse versioni, con o senza basetta. Nel caso in cui sia stato acquistato il sensore DHT11 con la basetta, si ha inclusa la resistenza di 10KΩ, e quindi si può connettere direttamente ai pin di Arduino secondo lo schema seguente.
Nel caso in cui invece si ha disposizione la versione del sensore DHT11 sensa basetta, abbiamo a che fare con 4 pin ed una resistenza 10KΩ da aggiungere alla connessione tra il Vcc e il pin del segnale, seguendo lo schema seguente.
Io, avendo a disposizione il sensore con la basetta, invece di utilizzare una bread board ho collegato direttamente Arduino ai 3 pin in uscita della basetta.
Programmiamo Arduino per mostrare i valori sul Serial Monitor
Prima di cominciare a programmare uno sketch per effettuare le letture dal sensore DHT11 (o DHT22) è necessario installare la libreria DHTLib da integrare poi Arduino IDE ed importarla nel nostro sketch. Questa libreria ci sarà molto utile perchè ci fornisce tutte le funzioni necessarie per effettuare letture di umidità e temperatura dal sensore.
Scaricate il file direttamente da qui, oppure cercatene una copia distribuita su Web.
Per prima cosa è necessario fare il download del file DHTLib.zip e poi aprirlo da Arduino IDE. E’ sufficiende andare sul menu e selezioanre Sketch > Include Library > Add .ZIP Library e poi selezionare il file DHTLib.zip.
Effettuata l’installazione della libreria DHTLib in Arduino IDE, potete controllare se tutto è andato bene, andando a vedere in fondo all’elenco delle librerie incluse se appare la nuova voce “DHTLib”.
Adesso che la libreria è stata installata possiamo passare direttamente al codice. Apri un nuovo sketch e copiaci il codice seguente.
#include <dht.h>
dht DHT;
#define DHT11_PIN 7
void setup(){
Serial.begin(9600);
}
void loop(){
int chk = DHT.read11(DHT11_PIN);
Serial.print("Temperature = ");
Serial.print(DHT.temperature);
Serial.println("°C");
Serial.print("Humidity = ");
Serial.print(DHT.humidity);
Serial.println("%");
delay(10000);
}
Salvate lo sketch e poi eseguitelo. Dovreste leggere sul Serial Monitor le letture di temperatura e umidità effettuate in intervalli di circa dieci secondi.
Come potete vedere dal codice è possibile gestire separatamente le due misure di temperatura ed umidità separatamente, grazie a DHT.temperature e DHT.humidity.