Visualizzazioni: 164 Autore: Grace Orario di pubblicazione: 26/07/2021 Origine: Sito
IL Il sensore a ultrasuoni HC-SR04 è uno dei moduli di misurazione della distanza più popolari per i progetti Arduino. È ampiamente utilizzato nei robot per evitare gli ostacoli, nei sensori di parcheggio, nel rilevamento del livello, nei bidoni della spazzatura intelligenti, nei misuratori di distanza e in altre applicazioni di rilevamento senza contatto.
Il modulo emette onde ultrasoniche a 40kHz attraverso un trasmettitore. Quando l'onda sonora incontra un oggetto, si riflette sul ricevitore. Misurando il tempo dell'eco e utilizzando la velocità del suono, Arduino può calcolare la distanza tra il sensore e l'oggetto.
| Parametro | Valore |
| Tensione di lavoro tipica | 5 V CC |
| Corrente di lavoro statica | Meno di 5 mA su alcune versioni del modulo |
| Frequenza operativa | Onda ultrasonica a 40kHz |
| Distanza di rilevamento | Intervallo comune: da 2 cm a 400 cm; alcune versioni con guadagno regolato potrebbero supportare una portata più lunga. |
| Angolo di rilevamento | Di solito entro 15 gradi; alcune versioni con guadagno maggiore possono raggiungere circa 30 gradi. |
| Precisione | Fino a circa 0,3 cm in condizioni di prova adeguate |
| Zona cieca | Distanza di misurazione minima di circa 2 cm |
Il modulo a ultrasuoni HC-SR04 ha quattro pin: VCC, TRIG, ECHO e GND. Arduino invia un breve impulso di trigger al pin TRIG, quindi legge l'impulso di ritorno dal pin ECHO.
| Perno HC-SR04 | Connessione Arduino | Funzione |
| VCC | 5 V | Alimentazione per il modulo ad ultrasuoni. |
| TRIG | Perno digitale 9 | Ingresso trigger. Arduino applica un impulso da 10us per iniziare a variare. |
| ECO | Perno digitale 10 | Uscita eco. Arduino legge la larghezza dell'impulso per calcolare la distanza. |
| GND | GND | Collegamento a terra. |
L'HC-SR04 funziona mediante la misurazione del tempo di volo. Arduino invia un segnale di trigger di alto livello di almeno 10 microsecondi al pin TRIG. Il modulo invia quindi automaticamente otto impulsi ultrasonici da 40kHz e attende l'eco riflesso.
Quando viene rilevato il segnale ultrasonico riflesso, il pin ECHO emette un impulso di alto livello. La durata di questo impulso è il tempo di viaggio di andata e ritorno dell'onda ultrasonica.
Distanza = Tempo dell'eco ad alto livello × Velocità del suono / 2
Nel codice Arduino, la formula semplificata comune è:
Distanza in cm = durata × 0,0343/2
Il processo di temporizzazione è semplice: Arduino mantiene il TRIG basso per breve tempo, invia un impulso alto da 10us, quindi riporta il TRIG al livello basso. L'HC-SR04 invia un burst ultrasonico e imposta l'ECHO su un valore alto finché non ritorna il segnale riflesso o finché la misurazione non scade.
Per evitare letture instabili, lasciare un breve ritardo tra le misurazioni. Viene comunemente utilizzato un ciclo di misurazione di circa 60 ms in modo che l'eco ultrasonico precedente abbia il tempo di scomparire prima del trigger successivo.
La funzione Arduino pulsaIn() viene utilizzata per misurare per quanto tempo un pin digitale rimane ALTO o BASSO. Per HC-SR04, Arduino utilizza pulsaIn(echoPin, HIGH) per leggere l'ampiezza dell'impulso di alto livello dal pin ECHO.
| Sintassi | Senso |
| impulsoIn(pin, valore) | Legge la durata di un impulso ALTO o BASSO. |
| pulsaIn(pin, valore, timeout) | Legge l'impulso con un valore di timeout in microsecondi. |
Si consiglia di utilizzare un timeout. Se non viene restituito alcun eco, la funzione può interrompere l'attesa e restituire 0 invece di bloccare il programma per troppo tempo.
Il cablaggio è semplice. Collega VCC a 5 V, GND a GND, TRIG a un pin di uscita digitale di Arduino ed ECHO a un pin di ingresso digitale di Arduino. L'esempio seguente utilizza Arduino Uno, TRIG sul pin 9 ed ECHO sul pin 10.
Il seguente tipico programma Arduino invia un impulso di trigger da 10us, legge l'ampiezza dell'impulso ECHO, calcola la distanza in centimetri e stampa il risultato nel monitor seriale.
const int trigPin = 9; const int echoPin = 10; lunga durata; distanza galleggianteCm; void setup() { pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); Serial.begin(9600); } void loop() { digitalWrite(trigPin, LOW); ritardoMicrosecondi(2); digitalWrite(trigPin, ALTO); ritardoMicrosecondi(10); digitalWrite(trigPin, BASSO); durata = impulsoIn(echoPin, ALTO, 30000); if (durata == 0) { Serial.println('Fuori intervallo'); } else { distanzaCm = durata * 0,0343/2; Serial.print('Distanza: '); Serial.print(distanzaCm); Serial.println(' cm'); } ritardo(60); }
Se vedi valori di distanza nel monitor seriale, il sensore a ultrasuoni HC-SR04 e il cablaggio Arduino funzionano correttamente. È quindi possibile utilizzare i dati sulla distanza per il rilevamento degli ostacoli, il controllo del movimento del robot, le porte automatiche, i promemoria di parcheggio o i progetti relativi al livello dei liquidi.
Mantenere l'oggetto misurato entro l'intervallo di distanza consigliato e al di fuori della zona cieca di 2 cm.
Utilizzare una superficie target piatta e solida per una migliore riflessione degli ultrasuoni.
Evitare di misurare materiali morbidi, angolati, porosi o fonoassorbenti.
Utilizzare un'alimentazione stabile da 5 V e mantenere il cablaggio corto e sicuro.
Aggiungi un timeout a pulsaIn() per evitare blocchi prolungati quando non ritorna alcuna eco.
Media o mediana: filtrare diverse letture per ridurre il rumore.
Per una maggiore precisione, compensare la temperatura poiché la velocità del suono cambia con la temperatura dell'aria.
| Applicazione | Come viene utilizzato HC-SR04 |
| Robot per evitare gli ostacoli | Rileva gli oggetti vicini e aiuta il robot a cambiare direzione. |
| Sensore di parcheggio | Misura la distanza tra il veicolo e un ostacolo. |
| Rilevamento del livello del liquido | Misura la distanza dal sensore alla superficie del liquido senza contatto. |
| Cestino intelligente | Rileva una mano o un oggetto nelle vicinanze e attiva l'apertura automatica del coperchio. |
Per utilizzare un sensore a ultrasuoni HC-SR04 con Arduino, collega VCC a 5 V, GND a GND, TRIG a un pin di uscita digitale ed ECHO a un pin di ingresso digitale. Invia un impulso trigger da 10us, leggi la durata dell'eco con pulsaIn() e calcola la distanza con la formula del tempo di volo.
L'HC-SR04 è economico, facile da usare e adatto a molti progetti di misurazione della distanza Arduino. Per ottenere i migliori risultati, prestare attenzione alla superficie target, all'angolo di misurazione, alla zona cieca, alla potenza stabile, alla gestione del timeout e agli effetti della temperatura.
Arduino invia un impulso da 10us al pin TRIG. L'HC-SR04 emette otto impulsi ultrasonici da 40kHz e imposta il pin ECHO alto finché non ritorna il suono riflesso. Arduino misura questo tempo di impulso e calcola la distanza.
La formula è distanza = durata × velocità del suono / 2. In centimetri, una formula comune di Arduino è distanzaCm = durata × 0,0343 / 2, dove la durata è misurata in microsecondi.
Il tempo di eco misurato è il tempo di andata e ritorno dal sensore all'oggetto e di nuovo al sensore. Dividendo per 2 si ottiene la distanza unidirezionale tra il sensore e l'oggetto.
Puoi utilizzare la maggior parte dei pin digitali Arduino. In molti esempi, TRIG è collegato al pin digitale 9 ed ECHO è collegato al pin digitale 10. Il codice deve corrispondere ai pin utilizzati nel cablaggio.
Le cause più comuni includono cablaggio allentato, alimentazione a 5 V instabile, numeri di pin TRIG o ECHO errati, nessun oggetto nel raggio d'azione, superfici target angolate, materiali morbidi, testine del sensore bloccate o assenza di timeout nella funzione pulsaIn().
La zona cieca è la distanza minima alla quale il modulo non può effettuare misurazioni attendibili. Per HC-SR04, la zona cieca è solitamente di circa 2 cm. Oggetti più vicini di questo potrebbero produrre letture instabili.
Sì, HC-SR04 può essere utilizzato per semplici progetti di livello dell'acqua senza contatto se il sensore è protetto dall'umidità e montato sopra la superficie del liquido. Per serbatoi umidi, esterni o industriali, si consiglia un sensore a ultrasuoni impermeabile.
Utilizzare un'alimentazione stabile, mantenere il sensore perpendicolare al bersaglio, evitare superfici morbide o angolate, aggiungere il timeout di impulsoIn, eseguire più letture, utilizzare il filtro mediano e attendere circa 60 ms tra le misurazioni.