📏 Arduino • HC-SR04 • LCD 16×2

Sensore distanza HC-SR04 con Arduino e display LCD

Costruiamo un metro digitale a ultrasuoni con Arduino, sensore HC-SR04 e display LCD 16×2, visualizzando la distanza misurata in centimetri.

DifficoltàIntermedia
SensoreHC-SR04
DisplayLCD 16×2
In poche parole: Arduino invia un impulso al pin Trigger del sensore, misura il tempo di ritorno dell’eco sul pin Echo e calcola la distanza dividendo per due il tragitto totale dell’onda sonora.

Cosa imparerai

  • come funziona il sensore HC-SR04;
  • come usare Trigger ed Echo;
  • come misurare un intervallo con pulseIn();
  • come convertire il tempo in centimetri;
  • come visualizzare la distanza su un LCD 16×2;
  • come gestire il caso di oggetto fuori portata.

Come funziona il sensore HC-SR04

Il sensore HC-SR04 invia un breve impulso ultrasonico e misura il tempo necessario affinché l’eco ritorni dopo aver incontrato un ostacolo. Poiché il suono percorre il tragitto di andata e ritorno, la distanza finale va calcolata dividendo per due.

Sensore ultrasuoni HC-SR04 per Arduino

Sensore a ultrasuoni HC-SR04 utilizzato nel progetto.

Concetto chiave: la durata misurata da pulseIn() rappresenta il tempo totale andata + ritorno dell’onda sonora.

Materiale necessario

🔌 Arduino Uno
📟 Display LCD 16×2
🎚 Potenziometro da 10 kΩ
📏 Sensore HC-SR04
🧩 Breadboard
🔗 Cavetti jumper

🧰 Kit Arduino consigliato

Un kit completo è comodo per avere già a disposizione display, breadboard, potenziometri, resistenze e altri componenti usati nei progetti del sito.

👉 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?

Nei miei libri trovi spiegazioni progressive, schemi chiari e molti progetti pratici pensati anche 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 HC-SR04 con display LCD 16x2

Schema del progetto con sensore HC-SR04 e display LCD 16×2.

Pin utilizzati

ElementoPin ArduinoFunzione
HC-SR04 TriggerD7Invio impulso ultrasonico
HC-SR04 EchoD8Misura della durata dell’eco
LCD RSD12Register Select
LCD EnableD11Abilitazione display
LCD D4D5Dati
LCD D5D4Dati
LCD D6D3Dati
LCD D7D2Dati

Codice Arduino commentato

Metro digitale HC-SR04 con display LCD
#include <LiquidCrystal.h>

// Pin del sensore HC-SR04
const int triggerPort = 7;
const int echoPort = 8;

// Collegamenti LCD:
// RS, E, D4, D5, D6, D7
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {

  // Trigger invia l'impulso ultrasonico
  pinMode(triggerPort, OUTPUT);

  // Echo riceve il segnale di ritorno
  pinMode(echoPort, INPUT);

  // Avvia il Monitor Seriale
  Serial.begin(9600);
  Serial.println("Sensore ultrasuoni:");

  // Inizializza il display 16x2
  lcd.begin(16, 2);

  // Scritta fissa sul display
  lcd.print("Distanza:");
}

void loop() {

  // Porta inizialmente LOW il Trigger
  digitalWrite(triggerPort, LOW);
  delayMicroseconds(2);

  // Impulso di 10 microsecondi
  digitalWrite(triggerPort, HIGH);
  delayMicroseconds(10);
  digitalWrite(triggerPort, LOW);

  // Misura per quanto tempo Echo resta HIGH
  unsigned long duration = pulseIn(echoPort, HIGH, 40000UL);

  // Se non arriva nessun eco entro il timeout
  if (duration == 0) {

    Serial.println("Fuori portata");

    lcd.setCursor(10, 0);
    lcd.print("      ");

  }
  else {

    // Velocità del suono ≈ 0,034 cm/us.
    // Dividiamo per 2 perché il suono
    // percorre andata e ritorno.
    float distanza = duration * 0.0343 / 2.0;

    // Mostra il valore sul Monitor Seriale
    Serial.print("Durata: ");
    Serial.print(duration);
    Serial.print(" us - Distanza: ");
    Serial.print(distanza, 1);
    Serial.println(" cm");

    // Pulisce l'area numerica precedente
    lcd.setCursor(10, 0);
    lcd.print("      ");

    // Scrive la nuova distanza
    lcd.setCursor(10, 0);
    lcd.print(distanza, 1);

    lcd.setCursor(14, 0);
    lcd.print("cm");
  }

  delay(300);
}

Come funziona il calcolo della distanza

La formula usata è:

Distanza = durata × velocità del suono ÷ 2

Nel codice la velocità del suono viene approssimata a circa 0.0343 cm/µs. Se per esempio l’eco impiega 1000 microsecondi:

1000 × 0,0343 ÷ 2 ≈ 17,15 cm

Perché dividiamo per 2?

Il tempo misurato comprende sia il percorso dal sensore all’ostacolo sia il ritorno dell’eco dall’ostacolo al sensore. A noi interessa soltanto la distanza in una direzione, quindi dividiamo il percorso totale per due.

Che cosa fa pulseIn()

pulseIn(echoPort, HIGH) misura per quanto tempo il pin Echo rimane nello stato HIGH. Questa durata, espressa in microsecondi, è la base per il calcolo della distanza.

Miglioria rispetto allo sketch storico: ho aggiunto un timeout a pulseIn(). Senza timeout, in alcune condizioni il programma può restare in attesa più a lungo del necessario se non viene ricevuto un eco valido.

Monitor Seriale e LCD

Lo sketch mostra la distanza contemporaneamente sul display LCD e sul Monitor Seriale. Questo è molto utile durante il collaudo, perché permette di verificare sia il valore calcolato sia il corretto funzionamento del display.

Perché il potenziometro da 10 kΩ?

Nel classico LCD 16×2 parallelo il potenziometro viene utilizzato per regolare il contrasto del display. Se il display sembra completamente vuoto oppure mostra soltanto rettangoli scuri, la prima cosa da controllare è proprio il contrasto.

Scarica lo sketch originale

⬇️ Scarica misuratore_di_distanza.ino
Sketch Arduino misuratore distanza HC-SR04

Limiti pratici della misura

La precisione può dipendere dalla forma, dall’orientamento e dal materiale dell’oggetto. Superfici inclinate, morbide o poco riflettenti possono restituire un eco debole o deviarlo lontano dal ricevitore.

Anche temperatura e condizioni ambientali modificano leggermente la velocità del suono, quindi questo progetto va considerato un ottimo misuratore didattico, non uno strumento metrologico di precisione.

Debug rapido

  • controlla VCC e GND del sensore;
  • verifica che Trigger sia su D7 ed Echo su D8;
  • controlla tutti i sei collegamenti dati del display;
  • regola il potenziometro del contrasto;
  • apri il Monitor Seriale a 9600 baud;
  • prova con un oggetto piano davanti al sensore;
  • se ottieni valori instabili, evita ostacoli troppo inclinati o troppo vicini.

Varianti del progetto

  • aggiungere un buzzer che aumenta la frequenza quando l’ostacolo si avvicina;
  • usare LED verdi, gialli e rossi in base alla distanza;
  • realizzare un sensore di parcheggio;
  • montare HC-SR04 su un servomotore per effettuare una scansione;
  • visualizzare i dati su OLED;
  • inviare la distanza via Bluetooth o Wi-Fi.

Cosa devi ricordare

  • Trigger genera l’impulso ultrasonico.
  • Echo restituisce la durata del viaggio dell’onda.
  • La distanza si calcola moltiplicando il tempo per la velocità del suono e dividendo per due.
  • pulseIn() permette di misurare la durata dell’impulso.
  • Il display LCD visualizza direttamente la distanza in centimetri.
  • Un timeout rende il programma più robusto quando non arriva un eco valido.

Domande frequenti

Perché il display è acceso ma non vedo testo?

Controlla soprattutto il potenziometro del contrasto e i collegamenti RS, Enable e D4-D7.

Perché la distanza cambia continuamente?

Piccole oscillazioni sono normali. Riflessi, posizione dell’oggetto e ambiente possono influenzare la misura. Puoi anche applicare una media di più letture.

Posso usare un display I2C?

Sì, ma il cablaggio e la libreria cambiano. Con un modulo I2C servono normalmente soltanto SDA, SCL, alimentazione e massa.

Posso usare il progetto come sensore di parcheggio?

Sì, come progetto didattico. Puoi aggiungere LED e buzzer con soglie diverse in base alla distanza.