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.
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.
- 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
🧰 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 Ω

Le tre zone di distanza
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 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
Arduino genera l’impulso
Il pin TRIG viene portato HIGH per 10 microsecondi per avviare una misura.
L’HC-SR04 ascolta l’eco
Il sensore emette ultrasuoni e il pin ECHO indica per quanto tempo il segnale impiega a tornare.
Calcolo della distanza
Il tempo misurato viene convertito in centimetri tenendo conto del percorso di andata e ritorno del suono.
Scelta del LED
Arduino confronta la distanza con le soglie e accende soltanto il LED corrispondente.
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.

