🌡️ Arduino • DS18B20 • LCD I2C

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.

DifficoltàPrincipiante / Intermedia
SensoreDS18B20
DisplayLCD 16×2 I2C
In poche parole: il DS18B20 comunica con Arduino attraverso il bus 1-Wire. Arduino richiede una misura, legge la temperatura in gradi Celsius e aggiorna il display LCD 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 temperatura DS18B20 per Arduino

Sensore DS18B20 in formato TO-92.

Piedinatura sensore DS18B20 Arduino

Riferimento per i collegamenti del DS18B20.

Controlla sempre la piedinatura: l’ordine dei pin va verificato sul componente o sul modulo che possiedi. Evita di basarti soltanto sulla forma del contenitore.

Materiale necessario

🔌 Arduino Uno
🌡️ Sensore DS18B20
🖥️ Display LCD 16×2 I2C
〰️ Resistenza di pull-up per il bus 1-Wire
🧩 Breadboard
🔗 Cavetti jumper

🧰 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 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. 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 del circuito

Schema Arduino DS18B20 con display LCD I2C

Schema di collegamento del DS18B20 con Arduino e display LCD I2C.

Collegamenti principali

ComponenteCollegamento
DS18B20 DATAD2
DS18B20 VCC5 V
DS18B20 GNDGND
LCD I2CSDA + SCL + 5 V + GND
Bus 1-Wire: nel collegamento standard del DS18B20 si usa una resistenza di pull-up tra DATA e VCC. Questo mantiene stabile la linea dati quando nessun dispositivo la sta portando a livello basso.

Librerie necessarie

Il progetto utilizza:

  • OneWire.h per la comunicazione 1-Wire;
  • DallasTemperature.h per gestire il DS18B20;
  • Wire.h per il bus I2C;
  • LiquidCrystal_I2C.h per il display LCD.
Nota sul display: nell’esempio usiamo l’indirizzo I2C 0x27. Se il display non mostra nulla, verifica l’indirizzo del tuo adattatore I2C e il contrasto del modulo.

Codice Arduino commentato

DS18B20 + LCD 16×2 I2C
// ==========================================================
// 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:

Numero di sensori rilevati
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.

Controllo della lettura
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.

Se vedi i rettangoli ma nessun testo: regola anche il piccolo potenziometro del contrasto presente sul modulo I2C del display.

Risultato del progetto

Temperatura DS18B20 visualizzata su display LCD Arduino

Temperatura rilevata dal DS18B20 e visualizzata sul display LCD.

Scarica i file

⬇️ Sketch Arduino DS18B20 + LCD

⬇️ Libreria LiquidCrystal_I2C

⬇️ Libreria OneWire

⬇️ Libreria DallasTemperature

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.