
In questo articolo esamineremo in dettaglio un sensore di temperatura e umidità relativa molto noto, il DHT11. Economico e semplice da usare, è uno dei più utilizzati nelle applicazioni per Arduino. Scopriamo insieme come è fatto, le sue applicazioni, e come si interfaccia a un qualunque tipo di microcontrollore.
ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 1742 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici che potrai leggere in formato PDF per un anno. ABBONATI ORA, è semplice e sicuro.

Bello questo articolo.
volevo fare una domanda sull'accuratezza. non è un pò bassa?
La risposta, anche a per te, è sempre la stessa: dipende sempre dall’applicazione. 🙂
Se ci devi fare un sistema domestico oppure ad uso d’ufficio oppure altre applicazioni in ambienti non “harsh”, è perfetto.
Costo ridotto, precisione “sufficiente”, dimensioni contenute.
Se invece lo devi mandare nello spazio a fare monitoring di un sistema montato su un satellite in orbita geosincrona probabilmente, magari, no.
Ma è solo un’ipotesi 😉
Insomma, la domanda ha una sola risposta: quanta precisione ti serve? 🙂
slovati, come sempre i tuoi articoli sono davvero notevoli.
Complimenti davvero.
Una trattazione completa e approfondita anche su un argomento tutto sommato semplice.
Ti ringrazio per i complimenti. L’obiettivo di questo articolo, in effetti, era quello di far vedere come un argomento tutto sommato semplice potesse essere “sviscerato” a fondo, mostrando (e facendo capire ai lettori) anche i dettagli più nascosti. Per chi utilizza Arduino, poi, è utile sapere che il codice delle librerie non deve necessariamente essere preso “as is”, ma può (e anzi DEVE) essere un’opportunità per capire come funziona il componente e magari, perchè no, si può anche apportare qualche miglioramento al codice stesso. Il bello di Arduino (e dell’open-source in generale) è che si possono studiare, analizzare, e capire sia gli schemi elettrici che il codice sorgente: è un’occasione che secondo me vale la pena sfruttare, anche se richiede un minimo di sforzo e fatica.
In un prossimo articolo che seguirà quello pubblicato oggi (espandendolo con l’utilizzo di un nuovo transceiver Bluetooth molto economico) si utilizzerà un sensore analogo al DHT11 ma con un range e una precisione maggiori (con questo rispondo anche al primo commento) e verranno analizzati ancora più in dettaglio alcuni aspetti della libreria per Arduino.
Quanto consuma? In corrente @5V o in potenza ?
Non sono sicuro ma credo di ricordare 2.5 mA. slovati confermi?
La tabella seguente è un estratto del datasheet del componente. Confermo dunque che l’assorbimento (massimo) è pari a 2,5 mA, registrato quando il sensore sta eseguendo la misurazione. In condizioni di stand-by si può vedere come l’assorbimento si riduca notevolmente. Volendo realizzare un circuito alimentato a batterie, può essere conveniente eseguire le misurazioni a intervalli di tempo maggiori, in modo da contenere il consumo di corrente.
Vabbè ma mi sembra di capire che il dht11 sia più per applicazioni domestiche che per altoforni. o no?
Complimenti mi piace la tua esposizione.
Sarebbe bello un progettino con schermo che misura temperatura e umidità esterne e interna all'abitazione.
Chissa poi i consumi e i costi , se consideriamo che ci vorrebbero due Arduino, 2 sensori, uno schermo e 2 moduli per la comunicazione.
Tu hai gia pensato a qualcosa?
Esattamente. Il DHT11 è è particolarmente adatto per la misura di temperatura e umidità in ambienti domestici, e non è quindi un caso se tra le sue principali applicazioni rientrano i sistemi di condizionamento dell’aria. Per applicazioni dove temperatura e umidità possono assumere valori estremi (sia verso l’alto che verso il basso), si devono utilizzare altri tipi di sensori.
Nel prossimo articolo verrà utilizzato un sensore più preciso e con range più esteso. Si potranno ad esempio misurare anche temperature negative. Si utilizzerà poi un transceiver Bluetooth molto compatto per trasmettere a distanza le misure. L’idea che proponi mi sembra fattibile. Magari si può pensare di realizzare una schedina ad-hoc con un ATTiny, risparmiando notevolmente sul costo di due board Arduino. Mi hai messo una pulce nell’orecchio..
Ciao,
ho fatto un pò di prove con questo sensore e ho notato che i decimali sono sempre a 0.
Sicuri che la risoluzione si 0,1 °C per quanto riguarda la temperatura?
Saluti!
Ciao,
quello che affermi è corretto: utilizzando la libreria Arduino per il DHT11 la parte decimale della temperatura è sempre a 0 (la stessa cosa avviene anche per l’umidità relativa). Si tratta di una scelta compiuta da chi ha scritto il codice (io l’ho semplicemento riproposto “as is”) della libreria: anche io me ne ero accorto durante i miei test, ma mi ero proposto di tornare su questo argomento nel corso del prossimo articolo, in cui verrà usato il sensore DHT22 (più preciso e con range più esteso).
Il pezzo di codice “incriminato” (file dht11.cpp) è il seguente:
// WRITE TO RIGHT VARS
// as bits[1] and bits[3] are allways zero they are omitted in formulas.
humidity = bits[0];
temperature = bits[2];
Quindi non vengono prese dal sensore le parti decimali dell’umidità relativa e della temperatura (indici 1 e 3 dell’array di 5 byte acquisiti), che pertanto rimangono a 0. Dal commento dell’autore/i sembrerebbe che anche dal sensore arrivino a 0.
Nell’articolo si citava quel valore di risoluzione per la temepratura perchè riportato nel datasheet del componente da me utilizzato:
http://www.dfrobot.com/image/data/DFR0067/DFR0067_DS_10_en.pdf
Se hai ancora sottomano il circuito, potresti provare a ricompilare lo sketch prendendo anche la parte decimale della temperatura e umidità relativa (oppure aggiungendo un log di questi byte sulla seriale) e verificare se effettivamente arrivano sempre degli zeri dal sensore.
Alla fine della fiera, comunque, cambia poco, visto che il sensore DHT11 non è precisissimo, ed il suo errore sulla temperatura (“accuracy” nel datasheet) è di +- 2°C.
Si potrebbe anche aprire una parentesi relativa ad Arduino: spesso noi (me incluso) utilizziamo il codice delle librerie prendendolo così come è, senza anadare a vedere come è fatto, quali scelte progettuali sono state compiute, cosa si può imparare, ecc. L’esperienza con il DHT11 dimostra però che un’occhiata al codice può servire a togliersi molti dubbi.
Con il DHT22 faremo delle prove comparative rispetto al DHT11 (il DHT22 misura anche temperature negative e ha una buona risoluzione). Chissà, magari scopriremo qualche altro “enigma”.
Grazie e saluti.
Ciao,
intanto ti ringrazio per la risposta molto precisa e corretta!
Premetto che ho provato su raspberry e non su arduino. Sto usando la libreria wiringPI per interfaccarmi al dht11, solo per motivi didattici per capire il protocollo 1wire.
Nel mio test ritorno tutti e 4 i byte e in effetti il secondo (decimali umidità) e il quarto (decimali temperatura) sono a 0.
Poi cercando un pò in google sono capitato sul forum di arduino:
http://forum.arduino.cc/index.php?PHPSESSID=1k58mgtneebrtivf487s9f5r12&topic=57058.msg410088#msg410088
e come dicevi tu in effetti la libreria ritorna solo il primo e il terzo byte, ma spiega che in effetti che il sensore ritorna sempre 0 per i decimali:
The DHT11 does not provide decimal parts. It outputs zero's. Today I wrote a playground article about a DHT11 class. The "bigger" DHT22 does provide decimals. For the lib and a simple testprogram see – http://arduino.cc/playground/Main/DHT11Lib. If you have remarks please send them to me.
Già che c'ero per concludere il test ho poi creato una paginetta web sempre sul raspberry che mostra una semplice interfaccia e che recuperara i dati del sensore via ajax e li inserisce nella pagina.
Grazie mille per il tuo articolo, e per avermi incuriosito e fatto divertire qualche oretta!
Aspetto il prossimo articolo sul dht22 (non l'ho ancora preso, aspetto il tuo articolo per convincermi a prenderlo 😉 )
Ciao!
Ciao
Leggendo il tuo articolo, mi sono ricordato che avevo ancora in un cassetto il sensore che non avevo ancora provato.
Così mi sono messo all'opera riportano i risultati sulla pagina del mio sito.
Non avevo scaricato il programma allegato, ho visto è molto completo riportando anche i valori del punto di rugiada.
Vedrò di provare anche il tuo programma.
Saluti
Adriano
Buongiorno a tutti voi!!!
Mi trovo qui a chiedere delle delucidazioni, consigli o appunti in quanto vorrei utilizzare questo sensore, il DHT11, per un progetto di irrigazione a goccia.
Ho notato che l’accuratezza di questo dispositivo non è di +/- 2 c° ma di oltre 4 c°, utilizzando lo sketch presente nella libreria DHT11 denominato “test”
Adesso chiedo, è successo anche a voi? E’ possibile che vi sia così tanta differenza di valori tra il datasheet e la rilevazione in real time? Avete trovato un modo di compensare questo dato cosi “sballato”?
Per capire ciò o utilizzato più termometri digitali due su tre segnavano la stesa temperature (il terzo era appunto il DHT).
Grazie e a presto!
Trackbacks/Pingbacks
[…] un sensore di temperatura e umidità DHT11 […]
[…] un sensore di temperatura e umidità DHT11 […]
[…] un sensore di temperatura e umidità DHT11 […]