mercoledì 5 luglio 2017

Termometro con Display LCD 1602 e DHT22

Ciao, ben ritrovato sul Blog #AspettandoIlBus.
E' passato un po' di tempo dala pubblicazione del precedente progetto di termometro con display LCD che utilizzava il sensore DHT11. Il progetto era più un'idea di principio che qualcosa di realmente utilizzabile per lunghi periodi, infatti al minimo errore di comunicazione col sensore si fermava.
Bene, oggi vi propongo un nuovo sketch che è molto più stabile e tollerante verso gli errori di comunicazione col sensore che, per l'occasione, è stato sostituito del più preciso DHT22.
Vediamo la foto del progetto di oggi:

Fig. 1 - Foto del display LCD 1602 e del sensore DHT22 - Foto di Paolo Luongo
Fig. 1 - Foto del display LCD 1602 e del sensore DHT22 - Foto di Paolo Luongo



Nella Fig. 1 si vedono il display LCD 1602 (2 righe da 16 caratteri) ed il sensore di temperatura e umidità DHT22. I collegamenti fra il display e Arduino UNO R3 (o con il più economico Arduino Nano V3.0) sono sempre gli stessi: quello dello sketch che mostra "hello, world" della libreria LCD.


Fig.2 - Parte iniziale del nuovo sketch per DHT22 di Paolo Luongo
Fig.2 - Parte iniziale del nuovo sketch per DHT22 di Paolo Luongo

Nel riquadro della Fig.2 sono evidenziate le librerie utilizzate per questo nuovo sketch.
Lo sketch è la versione 3.3A che sostituisce il precedente per il DHT11 pubblicato nel lontano 2015.
Comunque, se siete affezionati al DHT11 basta cambiare due voci nel nuovo sketch, come visibile nella Fig.3 e funzionerà col nuovo sketch.

Fig.3 - Indicazioni per modificare il sensore utilizzato - sketch di Paolo Luongo
Fig.3 - Indicazioni per modificare il sensore utilizzato - sketch di Paolo Luongo

Vorrei farvi notare che nel riquadro verde ci sono due modi diversi di definire costanti e variabili globali:
  • con il comando al pre-processore #define , già visto nel precedente articolo;
  • con la definizione di const globali, che sono delle vere e proprie variabili globali che, con l'aggiunta del prefisso const verranno segnalate con errori dal compilatore se utilizzate in modo "improprio". (ad es provate ad aggiungere, in un'altra parte, l'istruzione NomeSensore = NomeSensore + "**";    e guardate cosa succede compilandolo) .

Nella Fig. 4 ci sono altre due cose interessanti:

Fig.4 - Sketch Termometro di Paolo Luongo
Fig.4 - Sketch Termometro di Paolo Luongo


La prima è SENZAFINE che sarà sostituito del pre-processore C nel comando for(;;) che costringerà il nostro fidato Arduino a restare dentro al ciclo perché non c'è nessuna condizione per uscirne. Questa è la risposta a chi mi ha chiesto come fare il comando STOP con Arduino. Non è molto elegante ma ... funziona.
La seconda è GRANDENUMERO che un modo più elegante di indicare l'uso di un numero intero di grandi dimensioni, unsigned long appunto.
Il tempo è tiranno e se avete altri dubbi scrivetemi o commentate questo articolo.

Fig. 5 - Foto del sensore DHT22 o AM2302 di Paolo Luongo
Fig. 5 - Foto del sensore DHT22 o AM2302 di Paolo Luongo


Nella Fig.5 una foto del sensore DHT22 (o AM2302) che, montato sulla board Keyes 140C08, ha tre soli collegamenti: Vcc da collegare a +5V; GND da collegare a GND e DAT da collegare al PIN 7 del nostro Arduino UNO R3. Il PIN si può cambiare nello sketch (vedi Fig. 7).

Fig. 6 - Il termometro funzionante di Paolo Luongo
Fig. 6 - Il termometro funzionante di Paolo Luongo

Nella Fig. 6 ecco il termometro per Arduino UNO R3 in funzione. (Nota non fate caso all'ombra presente nella foto è un riflesso del display). Per controllare se tutto funziona bene ogni 10 letture viene visualizzato un messaggio che contiene il numero di letture fatte fino a quel momento. Il numero di letture fatte sarà presente anche in fase di errori ripetuti di comunicazione del sensore per conoscere quando si è verificato il problema.

Fig.7 - Stato di avanzamento delle letture - foto di Paolo Luongo
Fig.7 - Stato di avanzamento delle letture - foto di Paolo Luongo

Ecco il messaggio catturato nella Fig.7 .
Per essere sicuro del buon funzionamento dello skecth l'ho provato su un compatibile Arduino Nano V3.0 ed ha funzionato senza problemi.


Fig. 8 - Arduino Nano V3.0 Compatibile al lavoro con lo sketch - foto di Paolo Luongo
Fig. 8 - Arduino Nano V3.0 Compatibile al lavoro con lo sketch - foto di Paolo Luongo

Una nota in merito: Il progettino assorbe circa 30 mA e quindi non conviene alimentarlo a batteria perché dopo un po' ci troveremo senza energia.

Per ora è tutto: mancano solo gli skecth.(aggiornamento del 7/07/17)
Attenzione:  per il DHT11 la prima cifra decimale sarà sempre zero, mentre sarà valida per il DHT22 che ha una maggiore precisione. Se sbagliate sketch non succede nulla, solo non avrete delle buone letture ma valori molto bassi (1 o 2...).

Ora è veramente tutto, gli altri articoli del Blog li trovate qui, buona lettura e

Buon lavoro
Paolo
;-)



2 commenti:

alessandro d'isola ha detto...

WOW!! bel progetto!
Credo proprio che modifico quello del DHT11 e lo trasformo a questo, è molto più preciso!
Grazie ancora.
(anche perchè credo che si sia bruciato il mio DHT11, non funziona più...)

Paolo PerCdS ha detto...

Ciao Alessandro D'Isola,
se vuoi puoi provare il DHT11 subito: nell'articolo ho aggiunto lo sketch già pronto.

Buon lavoro
Paolo
;-)