Home
Accesso / Registrazione
 di 

Misure di temperatura e umidità: alla scoperta del DHT11

DHT11

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.

 

 

Scrivi un commento all'articolo esprimendo la tua opinione sul tema, chiedendo eventuali spiegazioni e/o approfondimenti e contribuendo allo sviluppo dell'argomento proposto. Verranno accettati solo commenti a tema con l'argomento dell'articolo stesso. Commenti NON a tema dovranno essere necessariamente inseriti nel Forum creando un "nuovo argomento di discussione". Per commentare devi accedere al Blog
ritratto di Gius_Res

Bello questo articolo. volevo

Bello questo articolo.

volevo fare una domanda sull'accuratezza. non è un pò bassa?

ritratto di Piero Boccadoro

La risposta, anche a per te,

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? :)

ritratto di Boris L.

Vabbè ma mi sembra di capire

Vabbè ma mi sembra di capire che il dht11 sia più per applicazioni domestiche che per altoforni. o no?

ritratto di slovati

Esattamente. Il DHT11 è è

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.

ritratto di Giorgio B.

slovati, come sempre i tuoi

slovati, come sempre i tuoi articoli sono davvero notevoli.
Complimenti davvero.
Una trattazione completa e approfondita anche su un argomento tutto sommato semplice.

ritratto di slovati

Ti ringrazio per i

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.

ritratto di alessio31183

Consumo in corrente o potenza?

Quanto consuma? In corrente @5V o in potenza ?

ritratto di gfranco78

Non sono sicuro ma credo di

Non sono sicuro ma credo di ricordare 2.5 mA. slovati confermi?

ritratto di slovati

assorbimenti DHT11

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.

ritratto di Max Caruso

Il prossimo articolo

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?

ritratto di slovati

Nel prossimo articolo verrà

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..

ritratto di Nero

risoluzione

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!

 

ritratto di slovati

Ciao, quello che affermi è

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.

ritratto di Nero

Ciao, quello che affermi è

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.msg4100...

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!

 

ritratto di adrirobot

Prova del sensore DHT11

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

 

 

Login   
 Twitter Facebook LinkedIn Youtube Google RSS

Chi è online

Ci sono attualmente 6 utenti e 58 visitatori collegati.

Ultimi Commenti