DS18B20 con Arduino e display LCD I2C: misurare la temperatura
Leggiamo la temperatura con il sensore digitale DS18B20 e visualizziamo il valore in tempo reale su un display LCD 16×2 con interfaccia I2C.
Cosa imparerai
- come collegare il DS18B20 ad Arduino;
- come funziona la comunicazione 1-Wire;
- come leggere la temperatura con la libreria DallasTemperature;
- come visualizzare il valore su un display LCD 16×2 I2C;
- come gestire l’indirizzo I2C del display;
- come riconoscere letture anomale del sensore;
- come estendere il progetto a più DS18B20 sullo stesso bus.
Il sensore DS18B20
Il DS18B20 è un sensore digitale di temperatura molto diffuso nei progetti Arduino. Può misurare temperature comprese indicativamente tra -55 °C e +125 °C e, nella zona di utilizzo più comune, offre un’accuratezza tipica dell’ordine di ±0,5 °C.
Il sensore ha tre collegamenti principali: GND, VCC e DATA. La comunicazione avviene tramite protocollo 1-Wire, che permette di collegare più sensori allo stesso filo dati distinguendoli tramite il loro identificativo univoco.
Sensore DS18B20 in formato TO-92.
Riferimento per i collegamenti del DS18B20.
Materiale necessario
🧰 Kit Arduino consigliato
Molti progetti utilizzano sensori, display, breadboard, resistenze e cavetti. Un kit completo può essere comodo per avere già a disposizione i componenti più comuni.
👉 Guarda il kit Arduino consigliatoLink 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. Troverai spiegazioni semplici, schemi chiari e molti progetti pratici pensati per chi parte da zero.
👉 Scopri i miei libri su ArduinoLink di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.
Schema del circuito
Schema di collegamento del DS18B20 con Arduino e display LCD I2C.
Collegamenti principali
| Componente | Collegamento |
|---|---|
| DS18B20 DATA | D2 |
| DS18B20 VCC | 5 V |
| DS18B20 GND | GND |
| LCD I2C | SDA + SCL + 5 V + GND |
Librerie necessarie
Il progetto utilizza:
OneWire.hper la comunicazione 1-Wire;DallasTemperature.hper gestire il DS18B20;Wire.hper il bus I2C;LiquidCrystal_I2C.hper il display LCD.
0x27. Se il display non mostra nulla, verifica l’indirizzo del tuo adattatore I2C e il contrasto del modulo.Codice Arduino commentato
// ==========================================================
// DS18B20 CON ARDUINO E DISPLAY LCD I2C
// Lettura della temperatura e visualizzazione su LCD 16x2
// ==========================================================
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <DallasTemperature.h>
// Pin dati del DS18B20
const int ONE_WIRE_BUS = 2;
// Crea il bus 1-Wire sul pin D2
OneWire oneWire(ONE_WIRE_BUS);
// Collega la libreria DallasTemperature al bus 1-Wire
DallasTemperature sensors(&oneWire);
// Display LCD I2C:
// indirizzo 0x27, 16 colonne, 2 righe
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
// Avvia il Monitor Seriale
Serial.begin(9600);
// Inizializza il sensore
sensors.begin();
// Inizializza il display
lcd.init();
// Accende la retroilluminazione
lcd.backlight();
// Messaggio iniziale
lcd.setCursor(0, 0);
lcd.print("DS18B20 pronto");
delay(1500);
lcd.clear();
}
void loop() {
// Chiede al DS18B20 di effettuare una misura
sensors.requestTemperatures();
// Legge la temperatura del primo sensore sul bus
float temperatura = sensors.getTempCByIndex(0);
// Mostra il valore sul Monitor Seriale
Serial.print("Temperatura: ");
Serial.print(temperatura, 1);
Serial.println(" C");
// Prima riga del display
lcd.setCursor(0, 0);
lcd.print("Temperatura:");
// Seconda riga
lcd.setCursor(0, 1);
lcd.print(temperatura, 1);
// Simbolo del grado
lcd.write(byte(223));
lcd.print("C ");
// Aggiornamento ogni secondo
delay(1000);
}
Come funziona il programma
1. Inizializzazione del bus 1-Wire
L’oggetto OneWire associa il bus al pin D2. La libreria DallasTemperature utilizza poi questo bus per comunicare con il DS18B20.
2. Richiesta della misura
La funzione sensors.requestTemperatures() ordina ai sensori collegati di effettuare una nuova conversione della temperatura.
3. Lettura in gradi Celsius
getTempCByIndex(0) restituisce la temperatura del primo sensore rilevato sul bus.
4. Visualizzazione su LCD
Il valore viene scritto sulla seconda riga del display con una cifra decimale, seguito dal simbolo °C.
Perché il DS18B20 è interessante
Il protocollo 1-Wire permette di collegare più sensori alla stessa linea dati. Ogni DS18B20 possiede un identificativo univoco, quindi in un progetto più avanzato è possibile leggere sensori installati in punti diversi senza dedicare un pin Arduino a ciascuno.
Più sensori sullo stesso pin
Per sapere quanti dispositivi sono stati trovati puoi usare:
Serial.print("Sensori trovati: ");
Serial.println(sensors.getDeviceCount());
Per progetti con più DS18B20 è preferibile identificare ogni sensore tramite il proprio indirizzo invece di affidarsi soltanto all’indice.
Controllare letture anomale
Se il sensore è scollegato o la comunicazione 1-Wire fallisce, la libreria può restituire un valore non valido. È quindi utile controllare il risultato prima di mostrarlo.
float temperatura = sensors.getTempCByIndex(0);
if (temperatura == DEVICE_DISCONNECTED_C) {
Serial.println("DS18B20 non rilevato");
lcd.clear();
lcd.print("Errore sensore");
}
else {
Serial.print("Temperatura: ");
Serial.println(temperatura);
}
Indirizzo I2C del display
Se il display resta completamente vuoto ma Arduino e DS18B20 funzionano, uno dei primi controlli da fare è l’indirizzo I2C. 0x27 è molto comune, ma alcuni adattatori utilizzano un indirizzo differente.
Risultato del progetto
Temperatura rilevata dal DS18B20 e visualizzata sul display LCD.
Scarica i file
⬇️ Sketch Arduino DS18B20 + LCD
Debug rapido
- controlla la piedinatura del DS18B20;
- verifica che DATA sia collegato a D2;
- controlla la resistenza di pull-up del bus 1-Wire;
- verifica l’indirizzo I2C del display;
- regola il contrasto del display;
- controlla che le librerie siano installate correttamente;
- usa il Monitor Seriale per capire se il problema riguarda il sensore oppure soltanto il display.
Varianti del progetto
- visualizzare temperatura minima e massima;
- aggiungere più DS18B20 sullo stesso bus;
- attivare un relè quando viene superata una soglia;
- realizzare un termostato;
- registrare le temperature su scheda SD;
- inviare i dati tramite Wi-Fi;
- sostituire l’LCD con un display OLED.
Cosa devi ricordare
- Il DS18B20 comunica tramite 1-Wire.
- Il pin dati è D2 in questo progetto.
- Il display LCD comunica tramite I2C.
- Le librerie principali sono OneWire e DallasTemperature.
- Più DS18B20 possono condividere la stessa linea dati.
- L’indirizzo I2C del display può variare da un modulo all’altro.
Domande frequenti
Perché il DS18B20 restituisce una temperatura errata?
Controlla alimentazione, pin DATA, resistenza di pull-up e collegamenti. Verifica inoltre che il sensore venga realmente rilevato dalla libreria.
Posso collegare più DS18B20 allo stesso pin?
Sì. Il protocollo 1-Wire permette di collegare più sensori sulla stessa linea dati e identificarli singolarmente.
Perché il display LCD non mostra nulla?
Controlla alimentazione, SDA/SCL, indirizzo I2C e contrasto. Se la temperatura compare nel Monitor Seriale, il problema è probabilmente nella parte LCD.
Posso usare un DS18B20 impermeabile?
Sì. Le sonde impermeabili basate su DS18B20 utilizzano lo stesso principio di comunicazione; controlla comunque i colori dei fili e il cablaggio specifico della sonda.

