Sensore di umidità e temperatura KY-015 / DHT11 con Arduino

Buongiorno, oggi vedremo insieme come utilizzare il sensore di umidità e temperatura DHT11 con un micocontrollore Arduino. Si tratta di un sensore molto comune nei kit e, se utilizzata la giusta libreria, anche molto semplice da usare. Il sensore resituisce un numero intero, quindi nè la temperatura nè l’umidità avranno cifre decimali. Se dovesse interessare una precisione maggiore esiste il sensore DHT21 che invece restituisce valori di tipo float. Per affrofondimenti vi invito a visitare il playground di Arduino.

Arduino Nano e KY-015

Utilizzeremo:

  • Arduino Uno (o modello analogo, io nell’esempio utilizzo un Arduino Nano che è uguale nelle funzionalità ma occupa meno spazio)
  • sensore KY-015 o DHT11 (il primo è montato su un pcb e ha già una resistenza, il secondo è ‘nudo’ e la resistenza la dobbiamo mettere noi.) Nell’esempio utilizzerò il KY-015
  • resistenza da 10k ohm nel caso si usi il sensore DHT11 ‘nudo’
  • libreria dht11 scaricabile da qui oppure dal gestore librerie di arduino

Di seguito lo schema di collegamento in entrambi i casi.

KY-015

DHT11 ‘nudo’



Analizziamo il codice scritto.
1 includiamo la libreria dht.h di Rob Tillaart
2 indichiamo il pin digitale a cui attaccheremo il sensore tramite una #define
4 creazione di un oggetto DHT di tipo dht. Se ad esempio volessimo utilizzare due sensori di temperatura dovremmo scrivere:
dht sensore1;
dht sensore2;
5, 6 dichiarazione di due variabili intere in cui salveremo i valori
10 inizializziamo della porta seriale con un baud rate di 9600
15 chiamiamo il metodo read11 appartenente all’oggetto DHT, come parametro mettiamo il numero del pin digitale
17, 18 salviamo i valori di umidità e temperatura prendendoli dalle proprietà dell’oggetto DHT (humidity e temperature)
20-24 stampa dei valori ricavati
26 attesa di 2000 ms (2 secondi) prima di tornare all’inizio del loop

Faccio notare che se avessimo scritto
Serial.println(DHT.temperature);
avremmo potuto stampare direttamente la temperatura, ho però preferito salvare tutto in una variabile esterna per sottolineare la differenza fra proprietà di un oggetto e variabile normale.

Serial Monitor del primo esempio

Vediamo ora un altro esempio, ovvero lo sketch dht11_test trovabile nella libreria di Rob Tillaart. Questo sketch è particolarmente utile nel qual caso dovessero esserci dei problemi, infatti ha uno scopo di tipo diagnostico oltre che esemplificativo. Commenterò solamente i passaggi diversi.

21-25 stampa a schermo, da notare che il codice eseguito nella funzione setup viene eseuito una sola volta, all’avvio.
23 DHT_LIB_VERSION è una proprietà della libreria in cui è salvato la versione della stessa
25 \t è il comando per tabulare
32 chiamata del metodo read11() dell’oggetto DHT, il metodo restituisce come return un intero salvato all’interno della variabile chk.
33-56 costrutto di tipo switch case, a seconda del valore della variabile chk il programma eseguirà il codice contenuto tra un case e il proprio break. Se ad esempio la variabile contenesse DHTLIB_OK, il codice eseguito sarebbe Serial.print(“OK,\t”). Il break interromperebbe il costrutto switch e il codice riprenderebbe dalla riga 57. Come avrete notato i case in questo caso non sono numeri interi ma insiemi di caratteri, questo perchè l’autore della libreria ha dichiarato una #define assegnando un valore intero ad una parola, esattamente come abbiamo fatto noi per la dichiarazione del pin del sensore alla riga 2 dell’esempio precedente.
58-60 stampa dei valori, da notare il secondo parametro nella funzione Serial.print. Mi riferisco all’1, il quale segna la precisione dei numeri decimali, in questo caso, ovviamente, uno. Se noi provassimo a mettere 2 avremmo una precisione a doppia cifra, ma, come abbiamo visto prima, il sensore DHT11 restituisce un valore intero.

Serial Monitor del secondo esempio

Se qualcosa non dovesse essere chiaro, se aveste suggerimenti o critiche, vi pregherei di indicarmelo nei commenti.

Grazie mille,
Alessandro

Alessandro

Alessandro è un milanese che vorrebbe scappare da Milano, è appassionato di informatica ma vorrebbe vivere senza telefono, è un artigiano eppure vorrebbe robotizzare tutto, impara una cosa e già vorrebbe studiare dell’altro. Autodidatta da sempre, gli piace sbattere la testa finché tutto non funziona come vuole lui, spesso ci riesce anche! Il motto che si ripete dentro la testa è: “Se ci sono riusciti gli altri ci posso riuscire anche io”.

Potrebbero interessarti anche...

Cosa ne pensi? Fammelo sapere con un messaggio

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.

%d blogger hanno fatto clic su Mi Piace per questo: