Leggere temperatura ed umidità e calcolare il punto di rugiada tramite Arduino e DHT11

Obiettivo: Realizzare un sistema in grado di visualizzare, su LCD I2C, la temperatura, l’umidità e il punto di rugiada mediante il sensore DHT11.

Componenti elettronici:

  • Arduino UNO
  • DHT11
  • Display LCD I2C

Teoria: Come già detto nell’articolo di ArduinoFacile, il DHT11 è un sensore digitale per la misura della temperatura ed umidità molto stabile e semplice da usare e configurare.
E’ un sensore di basso costo che ha un range di misurazione dell’umidità che va da 20%RH al 90%RH (con una precisione di 5%RH) e di temperatura da 0 a 50°C (con una precisione di 2°C)

Il sensore si presenta con tre pin (esistono anche versioni a 4 pin e con configurazione in scatola chiusa, con LED, con piedinatura differente ecc ecc).

Per quanto riguarda la piedinatura fare attenzione alla posizione delle alimentazioni!!!

Collegamento Circuitale:

Viene in seguito riportato lo schema elettrico utilizzato per valutare la temperatura mediante il dispositivo elettronico DHT11 e display LCD I2C.

Fare attenzione al collegamento delle alimentazioni (+ e -) e alle linee SCL e SDA del bus I2C.

Inoltre collegare il pin del segnale del modulo DHT11 al pin 3 di Arduino seguendo la configurazione impostata nel codice sorgente.

Codice:

Per il funzionamento del dispositivo è necessario caricare la libreria DHT.h (ver. 2.1.0 di Dhruba Saha) e LiquidCrystal_I2C.h (ver. 2.0.0 di Martin Kubovčík) nell’ide. Successivamente va definito il tipo di sensore che si sta utilizzando per acquisire temperatura e umidità (nel nostro caso DHT11). Tale informazione va inserita nella dichiarazione dell’oggetto DHT ( DHT dht(DHTPIN); ).

Si definisce poi l’oggetto “lcd” tramite la classe “LiquidCrystal_I2C lcd(0x27,16,2);” per un display da 16 caratteri 2 righe (è possibile inoltre utilizzare LiquidCrystal_I2C lcd(0x27,20,4); per un display da 20 caratteri 4 righe).

Questo software inoltre utilizza la funzione dewPoint per calcolare il punto di rugiada.

Conoscendo infatti la temperatura dell’aria (T) e umidità relativa (UR) è possibile stimare il punto di rugiada (temperatura di condensazione) usando relazioni psicrometriche.

La formula più utilizzata in ambito meteorologico e HVAC è la formula di Magnus–Tetens, che fornisce un’ottima approssimazione tra −45 °C e +60 °C.

Ricapitolando l’istruzione “int result = dht11.readTemperatureHumidity(temperatura, umidita);” permette di memorizzare la temperatura e l’umidità nelle rispettive variabili “temperatura” e “umidita”, la funzione “float puntoRugiada = dewPoint(temperatura, umidita);” invece calcola il punto di rugiada.

La seconda parte del codice non fa altro che “popolare” le variabili acquisite dal sensore e calcolate dalla dewPoint apposita e stamparle sia su seriale, sia su display LCD.



Personalizzazioni:

E’ possibile modificare il circuito utilizzando altri tipi di sensori tipo DHT22 (AM2302), BME280, SHT31.

Tabella comparativa sintetica

Sensore T (°C) Precisione T RH (%) Precisione RH Pressione Protocollo Note
DHT11 0 → 50 ±2 °C 20 → 80 ±5 % ❌ Single-wire Economico, poco preciso
DHT22 -40 → 80 ±0.5 °C 0 → 100 ±2–3 % ❌ Single-wire Versione migliorata
AM2301 -40 → 80 ±0.5 °C 0 → 100 ±2–3 % ❌ Single-wire DHT22 in case ventilato
BME280 -40 → 85 ±1 °C 0 → 100 ±3 % ✔ I2C / SPI Multisensore Bosch
SHT31 -40 → 125 ±0.3 °C 0 → 100 ±2 % ❌ I2C Alta precisione



Controllo di Temperatura e Umidità mediante DHT11

Obiettivo: Realizzare un controllo di temperatura e umidità mediante il sensore DHT11.

Componenti elettronici:

  • Arduino UNO
  • DHT11

Teoria: Il DHT11 è un sensore digitale per la misura della temperatura ed umidità molto stabile e semplice da usare e configurare.
E’ un sensore di basso costo che ha un range di misurazione dell’umidità che va da 20%RH al 90%RH (con una precisione di 5%RH) e di temperatura da 0 a 50°C (con una precisione di 2°C)

Il sensore si presenta con tre pin.

Guardando il dispositivo dal lato della parte sensibile, si ha che il pin di sinistra è quello dell’alimentazione (5V), quello centrale è il GND e il destro è il PIN del segnale digitale, da collegare ad un’uscita digitale di Arduino.

Collegamento Circuitale:

Viene in seguito riportato lo schema elettrico utilizzato per valutare la temperatura mediante il dispositivo elettronico DHT11

Codice:

Per il funzionamento del dispositivo è necessario caricare la libreria DHT.h nell’ide. Successivamente va definito il tipo di dispositivo che si sta utilizzando (nel nostro caso DHT11). Tale informazione va inserita nella dichiarazione dell’oggetto DHT ( DHT dht(DHTPIN, DHTTYPE); ).

La proprietà readTemperature restituisce la temperatura in gradi Celsius come default, a meno che non si inserisce un valore booleano true come argomento. In questo caso la temperatura verrà espressa in gradi Farhenait.

La proprietà readHumidity restituisce l’umidità relativa (RH).



Personalizzazioni:

E’ possibile modificare il circuito aggiungendo un display per visualizzare i valori di temperatura e umidità.




Misura di Temperatura mediante TMP36 [Tinkercad]

Obiettivo: Realizzare un controllo di temperatura mediante il dispositivo TMP36. Il TMP36 è il sensore di temperatura presente sul simulatore tinkercad.

Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • TMP36

Teoria: Il componente elettronico TMP36 è un dispositivo integrato ad alta precisione utilizzato per misurare la temperatura ambientale.
Dato il basso costo e l’ampia scala di valori ammissibili (ovvero da -40°C fino a 125°C) questi dispositivi sono particolarmente diffusi. E’ inoltre importante considerare che non è necessaria nessuna operazione calibrazione per ottenere valori di accuratezza pari a ±1°C ad una temperatura di circa +25°C e ±2°C nel range di temperature −40°C to +125°C.

Questo dispositivo è caratterizzato da tre differenti pin ed un corpo semi-cilindrico. Guardando il lato piatto del dispositivo, il pin di sinistra è l’alimentazione (5V), il pin di destra la massa (GND), mentre sul pin centrale viene generata una tensione funzione della temperatura. La temperatura può essere pertanto misurata attraverso una lettura analogica sul pin centrale effettuata mediante il controllore Arduino.

TMP36 Package

Come riportato in precedenza è possibile utilizzare un pin di input analogico per ottenere il valore di temperatura mediante l’istruzione di analogRead. Nel caso specifico, osservando il grafico che riporta la caratteristica tensione/temperatura (per il TMP36 la linea è evidenziata in rosso) per una tensione di uscita di 0.5V il sensore rileva la temperatura di 0°C. Pertanto valori di tensione inferiori a 0.5V indicano una temperatura sotto lo zero, mentre valori di tensione superiori a 0.5V indicano una temperatura positiva. Inoltre, è importante considerare che “una variazione di grado corrisponde ad una variazione di tensione di 10mV”. Quindi, se sul pin di input analogico sono presenti 550mV significa che il sensore sta rilevando una temperatura di 5°C (550mV – 500mV = 50 mV variazione di 5°C).

Caratteristica tensione corrente

Collegamento Circuitale:

Viene in seguito riportato lo schema elettrico utilizzato per valutare la temperatura mediante il dispositivo elettronico TMP36

Collegamento Circuitale

Codice:

La temperatura viene determinata attraverso una lettura analogica ed una opportuna scalatura.
Nel dettaglio, la tensione prodotta dal componente TMP36 viene letta utilizzando il pin analogico A0 e mappata in un intervallo 0-1023. Considerando che alla temperatura di 0 gradi la tensione misurata è pari a 0.5V e che per ogni grado percepito si ha un incremento di tensione di 10mV è opportuno riportare il valore letto attraverso la funzione analogRead in mV ed eseguire un’opportuna scalatura. Pertanto se il valore letto mediante l’istruzione di analogRead è memorizzato in una variabile denominata valTMP la temperatura può essere ottenuta mediante la seguente formula:

temperatura = (((valTMP5.0)/1023.0)-0.5)*100



Tinkercad



Personalizzazioni:

E’ possibile modificare il circuito aggiungendo una ventola che si accende in modo automatico superata una determinata temperatura.




Controllo di Temperatura mediante LM35

Obiettivo: Realizzare un controllo di temperatura mediante il dispositivo LM35.



Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • LM35

Teoria: Il componente elettronico LM35 è un dispositivo integrato ad alta precisione utilizzato per misurare la temperatura ambientale.
Dato il basso costo e l’ampia scala di valori ammissibili (ovvero da -55°C fino a 150°C) questi dispositivi sono particolarmente diffusi. E’ inoltre importante considerare che e nessun tipo di calibrazione esterna è richiesta.

Estratto Datasheet LM35

Questo dispositivo è caratterizzato da tre differenti pin ed un corpo semi-cilindrico. Guardando il lato piatto del dispositivo, il pin di sinistra è l’alimentazione (5V), il pin di destra la massa (GND), mentre sul pin centrale viene generata una tensione funzione della temperatura (10mV per ogni grado sopra lo zero). La temperatura può essere pertanto misurata attraverso una lettura analogica sul pin centrale effettuata mediante il controllore Arduino.

LM35 Package

Collegamento Circuitale:

Viene in seguito riportato lo schema elettrico utilizzato per valutare la temperatura mediante il dispositivo elettronico LM35

Collegamento Circuitale

Codice:

La temperatura viene determinata attraverso una lettura analogica ed una opportuna scalatura.
Nel dettaglio, la tensione prodotta dal componente LM35 viene letta utilizzando il pin analogico A0 e mappata in un intervallo 0-1023. Considerando che per ogni grado percepito si ha un incremento di tensione di 10mV è opportuno riportare il valore letto attraverso la funzione analogRead in mV. Questa operazione può essere svolta dividendo il valore letto per 1023 e moltiplicando il risultato per 5000. I gradi sono infine ottenuti dividendo il risultato per 10.



Personalizzazioni:

E’ possibile modificare il circuito aggiungendo una ventola che si accende in modo automatico superata una determinata temperatura.