🌡 Arduino • DHT11 • LCD 16×2

Temperatura e umidità con Arduino, DHT11 e display LCD

Realizziamo un piccolo termo-igrometro con Arduino: il sensore DHT11 misura temperatura e umidità relativa e i valori vengono mostrati direttamente su un display LCD 16×2.

Difficoltà Base / Intermedia
Sensore DHT11 su pin 8
Visualizzazione LCD 16×2
In poche parole: Arduino acquisisce due misure dal DHT11 — temperatura e umidità — e le visualizza sulle due righe del display LCD. È un ottimo punto di partenza per una stazione meteo da interno.

Cosa imparerai

  • che cosa misura il sensore DHT11;
  • che cos’è l’umidità relativa;
  • come collegare il DHT11 ad Arduino;
  • la differenza tra DHT11 a 4 pin e modulo a 3 pin;
  • come leggere temperatura e umidità via software;
  • come visualizzare i dati su LCD 16×2;
  • come gestire errori di lettura e aggiornamenti periodici.

Che cos’è il DHT11

Il DHT11 è un sensore digitale capace di fornire due grandezze ambientali: temperatura e umidità relativa. Per questo è molto usato nei primi progetti di monitoraggio ambientale, nei termo-igrometri e nelle piccole stazioni meteo.

Nella pagina originale il DHT11 viene indicato con un intervallo di temperatura da 0 a 50 °C, umidità relativa dal 20% al 90% e alimentazione compresa tra 3 V e 5,5 V.

Parametro Valore riportato nel progetto originale
Temperatura0–50 °C
Precisione temperatura±2 °C
Umidità relativa20–90% RH
Precisione umidità±5% RH
Alimentazione3–5,5 V

Che cos’è l’umidità relativa

L’umidità relativa indica quanta umidità è presente nell’aria rispetto alla quantità massima di vapore acqueo che l’aria può contenere nelle condizioni considerate.

Il valore viene espresso in percentuale. Un’umidità relativa elevata indica che l’aria è più vicina alla saturazione; quando si raggiungono le condizioni di saturazione può comparire condensazione.

Formula dell'umidità relativa

Formula dell’umidità relativa presente nel progetto originale.

Come misura il DHT11

Il progetto originale descrive il DHT11 come un dispositivo che rileva l’umidità attraverso un elemento sensibile la cui risposta elettrica cambia con la quantità di vapore acqueo presente nell’aria. Per la temperatura, invece, viene utilizzato un elemento sensibile di tipo termistore.

Concetto chiave: Arduino non deve calcolare direttamente temperatura e umidità partendo da una tensione analogica: la comunicazione con il DHT11 restituisce già i valori elaborati dal sensore.

Materiale necessario

🔌 Arduino Uno
🌡 Sensore DHT11
🖥 Display LCD 16×2
🎛 Potenziometro da 10 kΩ
🧩 Breadboard
🔗 Cavetti jumper

🧰 Kit Arduino consigliato

Per questo e molti altri progetti è comodo avere un kit con sensori, display, breadboard e cavetti già inclusi.

👉 Guarda il kit Arduino consigliato

Link di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.

📘 Vuoi imparare Arduino passo dopo passo?

Se vuoi approfondire e realizzare progetti più completi, puoi dare un’occhiata anche ai miei libri dedicati ad Arduino. All’interno troverai spiegazioni semplici, schemi chiari e molti progetti pratici pensati per chi parte da zero.

👉 Scopri i miei libri su Arduino

Link di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.

Schema di collegamento

Schema Arduino con DHT11 e display LCD 16x2

Schema originale del progetto con DHT11 e display LCD.

Collegamento del DHT11

Il sensore utilizza una linea dati digitale. Nel progetto il segnale è collegato al pin 8 di Arduino.

DHT11 Collegamento
VCC5V
DATAPin 8 Arduino
GNDGND
DHT11 a 3 pin o a 4 pin? La pagina originale segnala che i moduli DHT11 montati su piccola schedina possono includere già la resistenza di pull-up. Con il sensore nudo a 4 pin il cablaggio può richiedere invece una resistenza di pull-up esterna sulla linea dati.
Pinout sensore DHT11 a tre e quattro pin

Pinout del DHT11 presente nella vecchia pagina.

Collegamento del display LCD

Il display usa lo stesso cablaggio parallelo del progetto precedente:

Segnale LCD Pin Arduino
RS12
E11
D45
D54
D63
D72

Le librerie utilizzate

Lo sketch usa due librerie: DHT.h per il sensore e LiquidCrystal.h per il display.

Nota sul vecchio codice: nella pagina originale DHT.h veniva incluso due volte e mancava l’avvio esplicito del sensore. Nella versione qui sotto ho ripulito lo sketch e aggiunto dht.begin() nel setup().

Codice Arduino commentato

DHT11 + LCD 16×2 con Arduino
// ==========================================================
// DHT11 + DISPLAY LCD 16x2 CON ARDUINO
// Visualizza temperatura e umidità sul display
// ==========================================================

// Libreria per il sensore DHT11
#include <DHT.h>

// Libreria per il display LCD
#include <LiquidCrystal.h>

// Pin digitale collegato al segnale DATA del DHT11
#define DHTPIN 8

// Tipo di sensore utilizzato
#define DHTTYPE DHT11

// Crea l'oggetto DHT
DHT dht(DHTPIN, DHTTYPE);

// Crea l'oggetto LCD:
// RS = 12, E = 11, D4 = 5, D5 = 4, D6 = 3, D7 = 2
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {

  // Inizializza il display 16 colonne x 2 righe
  lcd.begin(16, 2);

  // Avvia il sensore DHT11
  dht.begin();

  // Scrive le etichette iniziali
  lcd.setCursor(0, 0);
  lcd.print("Temp:");

  lcd.setCursor(0, 1);
  lcd.print("Umid:");

}

void loop() {

  // Legge la temperatura in gradi Celsius
  float temperatura = dht.readTemperature();

  // Legge l'umidità relativa in percentuale
  float umidita = dht.readHumidity();

  // Controlla se una delle due letture non è valida
  if (isnan(temperatura) || isnan(umidita)) {

    lcd.setCursor(6, 0);
    lcd.print("Errore ");

    lcd.setCursor(6, 1);
    lcd.print("lettura");

    // Attende prima del tentativo successivo
    delay(2000);
    return;
  }

  // Mostra la temperatura sulla prima riga
  lcd.setCursor(6, 0);
  lcd.print(temperatura, 1);
  lcd.print(" C ");

  // Mostra l'umidità sulla seconda riga
  lcd.setCursor(6, 1);
  lcd.print(umidita, 1);
  lcd.print(" % ");

  // Aggiorna i dati ogni 2 secondi
  delay(2000);

}

Il codice spiegato passo passo

1

Definiamo il DHT11

DHTPIN indica il pin 8, mentre DHTTYPE specifica che il sensore è un DHT11.

2

Inizializziamo sensore e display

Nel setup() avviamo il display con lcd.begin() e il sensore con dht.begin().

3

Leggiamo temperatura e umidità

readTemperature() restituisce la temperatura e readHumidity() l’umidità relativa.

4

Controlliamo gli errori

Se il sensore non restituisce una misura valida, il programma mostra un messaggio di errore sul display invece di visualizzare valori errati.

5

Aggiorniamo il display

I nuovi valori vengono scritti sulle due righe e aggiornati periodicamente.

Perché usare float invece di int

Nel vecchio sketch temperatura e umidità erano memorizzate in variabili int. Usando float possiamo conservare anche eventuali cifre decimali restituite dalla libreria e decidere poi quante mostrarne sul display.

Video dimostrativo

Scarica libreria e sketch originali

Manteniamo disponibili anche i file storici associati alla vecchia pagina.

⬇️ Scarica libreria DHT originale
⬇️ Scarica dht-11_lcd.ino

Debug rapido

  • controlla che il segnale del DHT11 sia collegato al pin 8;
  • verifica VCC e GND;
  • controlla se il tuo modulo DHT11 include già la resistenza di pull-up;
  • se il display è acceso ma non mostra testo, regola il contrasto;
  • verifica i collegamenti RS, E e D4-D7 del display;
  • se compaiono valori non validi, controlla il sensore e la libreria;
  • non aggiornare il display inutilmente centinaia di volte al secondo.

Come trasformarlo in una piccola stazione meteo

Questo progetto è già la base di una semplice stazione ambientale. Per evolverlo puoi aggiungere altri sensori e funzioni:

  • sensore di pressione atmosferica;
  • orologio RTC per data e ora;
  • memorizzazione delle misure su scheda SD;
  • display OLED o LCD I2C;
  • ESP32 per inviare i valori via Wi-Fi;
  • soglie con LED o buzzer;
  • ventola automatica quando la temperatura supera un limite.

DHT11 o sensori più precisi?

Il DHT11 è adatto soprattutto a esercizi didattici e progetti semplici. Se il progetto richiede misure più precise o un intervallo operativo più ampio, si può passare in seguito a sensori ambientali più evoluti mantenendo sostanzialmente la stessa logica generale: acquisizione, controllo del dato e visualizzazione.

Cosa devi ricordare

  • Il DHT11 misura temperatura e umidità relativa.
  • Il segnale del progetto è collegato al pin 8.
  • dht.begin() inizializza il sensore.
  • readTemperature() legge la temperatura.
  • readHumidity() legge l’umidità.
  • Il display LCD rende il progetto autonomo dal Monitor Seriale.
  • È buona pratica controllare sempre che la lettura sia valida.

Domande frequenti

Perché il DHT11 restituisce una lettura non valida?

Controlla alimentazione, pin dati, cablaggio e presenza della resistenza di pull-up quando necessaria. Verifica inoltre che il sensore sia stato inizializzato correttamente nel programma.

Posso usare il progetto senza display LCD?

Sì. Puoi inviare temperatura e umidità al Monitor Seriale oppure a un altro sistema di visualizzazione.

Posso sostituire il display con uno I2C?

Sì. Il cablaggio diventa molto più semplice, ma bisogna modificare la libreria e le istruzioni usate per inizializzare il display.

Posso comandare una ventola in base alla temperatura?

Sì. È una delle evoluzioni più naturali: si imposta una soglia e, quando viene superata, Arduino può pilotare una ventola tramite l’opportuno circuito di potenza.