***
Per realizzare questo termometro digitale ci serve il seguente occorrente:
- Arduino uno,
- sensore DHT11 ,
- qualche filo conduttore,
- una resistenza da 5 KOhm oppure 10 KOhm.
Preparazione: costruiamo il termometro e montiamo il circuito.
Il sensore DHT11 possiede 3 pin: VCC, GND, DATA. Il pin VCC serve ad alimentare il sensore (3V fino a 5.5V), il pin GND è il pin di massa, il DATA è il pin con il canale dei dati trasmessi; su tale filo il DHT11 invia segnali digitali che indicano la misura della temperatura e quella dell’umidità ottenuta (umidità tra 20% e 90% con errore +/- 4%, temperatura misurabile 0°C – 50°C con errore +/- 2°C).
Per la comunicazione viene usato quindi un formato a singolo bus (DATA bus). Per una comunicazione ci vogliono circa 4ms e il dato è formato da 40bit. Il formato dei dati è composto da 8bit per il dato di umidità integrale, 8bit per la parte decimale del dato di umidità, 8bit per il dato di temperatura integrale, 8bit per la parte decimale del dato di temperatura e infine 8bit di controllo.
2 byte umidità | 2 byte temperatura | 1 byte di controllo |
struttura del blocco dati di DHT11
Montiamo il circuito.
Lo schema prevede di usare una resistenza da circa 5KOhm tra canale dati e VCC per migliorare la qualità del segnale. Molti moduli con DHT11 montato su scheda, hanno comunque la resistenza già integrata.
Preparazione: carichiamo la libreria DHT.
Le librerie per far funzionare il sensore le trovate sul sito: https://github.com/adafruit/DHT-sensor-library e bisogna caricarle tra le librerie richiamate dall’IDE.
Scriviamo il programma.
#include "DHT.h" // libreria dht #define DHTPIN 2 // pin sensore #define DHTTYPE DHT11 // DHT 11 DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); // inizializziamo la seriale a 9600 bit/esc Serial.println("DHT11 misura di temperatura e umidità!"); dht.begin(); // avviamo il dht } void loop() { float h = dht.readHumidity(); // h è la variabile che contiene il dato umidità float t = dht.readTemperature(); // t è la variabile che contiene il dato temperatura if (isnan(t) || isnan(h)) { // restituisce true se la lettura del sensore è errata Serial.println("Errore di lettura del sensore DHT"); } else { Serial.print("Umidità: "); Serial.print(h); // Visualizza sul monitor seriale l'umidità Serial.print("% \t\t"); Serial.print("Temperatura: "); Serial.print(t); // Visualizza sul monitor seriale la temperatura Serial.println(" °C"); } }
Monitor seriale . Plotter dati