Progetto #115 • HC-SR04 + LED

Sensore di parcheggio Arduino con HC-SR04 e 3 LED

Realizziamo un semplice assistente di parcheggio: Arduino misura la distanza da un ostacolo con il sensore a ultrasuoni HC-SR04 e accende un LED verde, giallo o rosso in base alla distanza rilevata.

Difficoltà★★☆☆☆ Facile
Tempo30–45 minuti
ConcettiUltrasuoni • Soglie • LED

Introduzione

I sensori di parcheggio trasformano una misura di distanza in un’indicazione immediatamente comprensibile. In questo progetto replichiamo il principio in versione didattica utilizzando un HC-SR04 e tre LED.

Quando l’ostacolo è lontano si accende il LED verde; avvicinandolo entra in funzione il giallo e, sotto la soglia più vicina, si accende il rosso.

Cosa imparerai
  • generare l’impulso TRIG dell’HC-SR04;
  • misurare il tempo di ritorno dell’eco;
  • convertire il tempo in centimetri;
  • creare più soglie con if / else if / else;
  • gestire una segnalazione visiva con più uscite digitali.

Materiale necessario

1× Arduino UNO
1× sensore HC-SR04
1× LED verde
1× LED giallo
1× LED rosso
3× resistenze da 220 Ω
Cavi jumper
1× breadboard

🧰 Non hai ancora i componenti?

Un kit Arduino per principianti contiene molti dei componenti utilizzati nei progetti del sito.

Vedi 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, schemi e numerosi progetti pratici dedicati ad Arduino.

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

📡 Sensore HC-SR04

  • VCC → 5V
  • GND → GND
  • TRIG → pin 9
  • ECHO → pin 10

💡 LED

  • Verde: anodo → pin 2
  • Giallo: anodo → pin 3
  • Rosso: anodo → pin 4
  • Ogni catodo → GND tramite resistenza da 220 Ω
Schema sensore parcheggio Arduino HC-SR04 con LED verde giallo rosso
Controlla la polarità dei LED: normalmente il terminale più lungo è l’anodo (+), mentre il catodo (−) va verso GND attraverso la resistenza.

Le tre zone di distanza

🟢Zona sicuraoltre 30 cm
🟡Attenzioneda oltre 10 a 30 cm
🔴Troppo vicino10 cm o meno

Le soglie sono volutamente semplici e possono essere modificate nel codice in base all’esperimento che vuoi realizzare.

Codice Arduino

Ho migliorato il programma aggiungendo un timeout a pulseIn(): se non arriva un eco valido, Arduino non rimane in attesa troppo a lungo e segnala la misura come fuori portata.

Progetto #115 — Sensore parcheggio con HC-SR04
// ============================================
// Progetto 115 - Sensore parcheggio Arduino
// HC-SR04 + LED verde, giallo e rosso
// ============================================

const byte trigPin = 9;
const byte echoPin = 10;

const byte ledVerde  = 2;
const byte ledGiallo = 3;
const byte ledRosso  = 4;

const float sogliaAttenzione = 30.0;
const float sogliaPericolo   = 10.0;

// Timeout di circa 25 ms
const unsigned long timeoutEco = 25000UL;

void spegniLED() {
  digitalWrite(ledVerde, LOW);
  digitalWrite(ledGiallo, LOW);
  digitalWrite(ledRosso, LOW);
}

float misuraDistanza() {

  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);

  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  unsigned long durata =
    pulseIn(echoPin, HIGH, timeoutEco);

  // Nessun eco ricevuto
  if (durata == 0) {
    return -1.0;
  }

  // Velocità del suono ≈ 0,0343 cm/us.
  // Dividiamo per 2 perché il segnale
  // percorre andata e ritorno.
  return durata * 0.0343 / 2.0;
}

void setup() {

  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);

  pinMode(ledVerde, OUTPUT);
  pinMode(ledGiallo, OUTPUT);
  pinMode(ledRosso, OUTPUT);

  spegniLED();

  Serial.begin(9600);
}

void loop() {

  float distanza = misuraDistanza();

  spegniLED();

  if (distanza < 0) {

    Serial.println("Nessun eco / fuori portata");

  } else {

    Serial.print("Distanza: ");
    Serial.print(distanza, 1);
    Serial.println(" cm");

    if (distanza > sogliaAttenzione) {

      digitalWrite(ledVerde, HIGH);

    } else if (distanza > sogliaPericolo) {

      digitalWrite(ledGiallo, HIGH);

    } else {

      digitalWrite(ledRosso, HIGH);
    }
  }

  delay(100);
}

Come funziona

1

Arduino genera l’impulso

Il pin TRIG viene portato HIGH per 10 microsecondi per avviare una misura.

2

L’HC-SR04 ascolta l’eco

Il sensore emette ultrasuoni e il pin ECHO indica per quanto tempo il segnale impiega a tornare.

3

Calcolo della distanza

Il tempo misurato viene convertito in centimetri tenendo conto del percorso di andata e ritorno del suono.

4

Scelta del LED

Arduino confronta la distanza con le soglie e accende soltanto il LED corrispondente.

Concetto chiave: non stiamo semplicemente leggendo un sensore. Stiamo trasformando un valore numerico continuo — la distanza — in tre stati facilmente interpretabili.

Perché la misura può variare?

L’HC-SR04 è ottimo per esperimenti didattici, ma la lettura può cambiare in base alla forma, all’angolazione e al materiale dell’ostacolo. Anche superfici molto inclinate o poco riflettenti possono rendere l’eco meno affidabile.

Nota: questo progetto riproduce il principio di una segnalazione di prossimità, ma non va considerato un dispositivo automobilistico certificato o un sistema di sicurezza per il parcheggio reale.

Varianti possibili

🔔 Buzzer progressivo

Fai aumentare la frequenza dei segnali acustici mentre l’ostacolo si avvicina.

📟 Display LCD o OLED

Visualizza direttamente la distanza misurata in centimetri.

🚦 Più livelli

Aggiungi altri LED per creare una barra di prossimità più dettagliata.

📡 ESP32

Invia le misure tramite Wi-Fi a una pagina web o a una dashboard.