
Video
Schema circuito

Codice sorgente
1int echoPin = 6;
2int trigPin = 7;
3int maxDistance = 100;
4int minDistance = 3;
5
6void setup() {
7 pinMode(trigPin, OUTPUT);
8 pinMode(echoPin, INPUT);
9 Serial.begin(9600);
10}
11
12void loop() {
13 digitalWrite(trigPin, HIGH);
14 delayMicroseconds(10);
15 digitalWrite(trigPin, LOW);
16
17 unsigned long duration = pulseIn(echoPin, HIGH);
18 double totalPath = (double)duration * 0.034;
19 int distance = totalPath / 2;
20
21 if (distance > minDistance && distance < maxDistance) {
22 Serial.print("Distance: ");
23 Serial.print(distance);
24 Serial.println("cm");
25 }
26
27 delay(500);
28}FAQ
In che modo l'HC-SR04 misura la distanza?▾
Il sensore emette un'onda sonora a 40 kHz e misura il tempo di ritorno dell'eco. Il suono viaggia nell'aria a una velocità di circa 343 m/s; la distanza viene convertita in centimetri utilizzando la formula: distanza = tempo × 0,0343 / 2 (la divisione per 2 tiene conto del tempo di andata e ritorno).
Qual è la distanza minima e massima che può misurare?▾
In pratica, misura distanze comprese tra circa 2 cm e 400 cm. A distanze inferiori a 2 cm, a distanze molto grandi o su superfici che assorbono il suono (tessuto, schiuma), la misurazione potrebbe risultare errata o dare un valore pari a 0.
A volte vengono rilevati valori pari a 0 o molto elevati: perché?▾
Se l'eco non ritorna, pulseIn va in timeout. Assicurati che il sensore sia rivolto verso una superficie piana e rigida, attendi almeno 60 ms tra una misurazione e l'altra e filtra le letture errate nel codice.
Posso utilizzarlo con l'ESP32?▾
L'HC-SR04 funziona a 5 V e il pin ECHO fornisce un'uscita a 5 V. Poiché l'ESP32 funziona con logica a 3,3 V, è necessario inserire un partitore di tensione (ad es. 1 kΩ + 2 kΩ) sulla linea ECHO oppure utilizzare il modello HC-SR04P compatibile con 3,3 V.
