Home
Accesso / Registrazione
 di 

Distanza: sensore ultrasuoni HC-SR04 e Arduino

HC-SR04

In questo articolo vi spiegherò come funziona e come usare, in special modo con Arduino, il sensore di distanza ad ultrasuoni HC-SR04. Vediamo anche come inviare i dati al monitor seriale, e come calcolare la variazione della velocità del suono per avere delle misure più precise. Alla fine vedremo anche uno sketch per utilizzare i sensori ad ultrasuoni sulla macchina.

Curiosità: anche gli animali utilizzano gli ultrasuoni. Ad esempio il pipistrello utilizza gli ultrasuoni per localizzare ostacoli e prede.

In questo progetto useremo la celebre board Arduino, acquistabile da Conrad, ed il sensore di distanza HC-SR04.

Il sensore è costituito da una scheda, con a bordo integrati ed altri componenti, davanti un oscillatore e due cilindri vuoti; uno di questi invia ultrasuoni che rimbalzano contro il generico oggetto posto di fronte ad esso ed entrano nell'altro cilindro. Il sensore misura il tempo che ha impiegato il suono e da questo si può ricavare la distanza.

L'HC-SR04 è un sensore digitale ed utilizza due pin, uno per inviare il suono ed uno per riceverlo. Esso misura una distanza compresa tra 2 e 400 cm con una precisione di 3 mm.

Caratteristiche tecniche:

  • Tensione di lavoro: 5 v;
  • Corrente assorbita: 15 mA;
  • Frequenza di lavoro: 40 Hz;
  • Distanza max: 400 cm;
  • Distanza min: 2 cm;
  • Angolo di misura: 15°.

+

Funzionamento

  1. Bisogna inviare un impulso di 10 us al sensore sul pin trig;
  2. Il sensore invia 8 impulsi di ultrasuoni ad una frequenza di 40 Hz;
  3. Bisogna calcolare il tempo da quando si è mandato il primo impulso fino a quando riceve un impulso sul pin echo.

+

Per fare il calcolo della distanza la formula base è:

Distanza = tempo * velocità del suono / 2 = tempo * 3,4 * 10^-2 / 2

Velocità di propagazione delle onde sonore

La velocità di propagazione di un’onda sonora dipende fondamentalmente dal mezzo che deve attraversare e non dalle caratteristiche del suono. La velocità delle onde aumenta all’aumentare della temperatura e della densità del mezzo e per quanto riguarda quelli presi in esame, essa è:

Mezzo Velocità (m/s)
Aria 340
Acqua 1480
Acciaio 5980

Ma concentriamoci sulla velocità delle onde sonore in base alla temperatura. L’equazione che ci permette di venir a conoscenza della stessa è per l’aria la seguente:

V = 331.4 + 0.62 * T

Se si vuole calcolare la distanza in modo più preciso è quindi necessario tenere conto della temperatura dell'ambiente. Quindi bisogna usare anche un sensore di temperatura.

Utilizzo con Arduino

Per questo sensore non esistono librerie, visto che l'utilizzo è molto semplice.
Ecco uno sketch che misura la distanza e la trasmette al PC tramite il monitor seriale.

/*
Per HC-SR04
Temperatura di 20 *C
VVC del sensore connesso a +5V
GND del sensore connesso a GND
TRIG del sensore connesso al pin digitale 12
ECHO del sensore connesso al pin digitale 13
*/

const int TRIG_PIN = 12;
const int ECHO_PIN = 13;

void setup() {
// Inizializza la comunicazione seriale:
Serial.begin(9600);

pinMode(TRIG_PIN,OUTPUT);
pinMode(ECHO_PIN,INPUT);
}

void loop()
{
long durata, distanza;

// Dare un corto segnale basso per poi dare un segnale alto puro:
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
durata = pulseIn(ECHO_PIN,HIGH);

// Converti il tempo in distanza:
distanza = durata / 29.1 / 2 ;

if (distanza <= 0){
Serial.println("Out of range");
}
else {
Serial.print(distanza);
Serial.println("cm");
Serial.println();
}
delay(1000);
}

+

​Lo sketch che vediamo adesso è più complesso e serve per essere precisi nelle misure anche con il variare della temperatura ambientale. Per misurare la temperatura si può utilizzare il sensore BMP085 descritto in questo articolo o il sensore DHT11 descritto in questo articolo

Io ho scritto lo sketch per il BMP085.

Trovate lo sketch in allegato nel file ZIP in fondo alla pagina.

+

Sensori per Auto/Ape Car o altro mezzo

Per l'Ape Car di un mio amico ho realizzato un sensore di retromarcia, con due sensori ad ultrasuoni, un sensore di temperatura e umidità, un RTC e un display acquistabile da Conrad.
Come sensore di temperatura e umidità ho usato il DHT-22, che misura la temperatura da -40 °C a +80 °C con un accuratezza di 0.5 °C. Misura anche l’umidità da 0% a 100% con un accuratezza da 2% a 5%. È un sensore lento, che bisogna leggere massimo ogni due secondi, ma da’ buoni risultati.
RTC significa Real Time Clock ed è un orologio e calendario, che conteggia il tempo anche senza alimentazione, visto che ha integrata una batteria tampone. Io ho usato il DS3231, collegato ad arduino attraverso l'interfaccia I2C (di cui ho parlato qui) e l'ho gestito tramite una libreria.
Sul display vengono visualizzati sempre ora e data, e tramite la pressione di un pulsante si alterna distanza sensori e temperatura e umidità.
Per capire cosa visualizzare ho utilizzato una variabile, che viene incrementata di un'unità ad ogni pressione di un tasto. Con il comando modulo (%) ho calcolato il resto della variabile diviso due.

Ho 2 risultati, zero se il numero è pari e uno se è dispari. Se:

  • Risulta 1 visualizzo sul display la temperatura e l'umidità;
  • Risulta 0 visualizzo sul display la distanza.

E' possibile eliminare tutto questo sistema utilizzando un display a quattro righe per far stare per intero tutti i dati senza cambiare schermata.

Non mi è stato ancora possibile testare il sistema sul mezzo di trasporto ma mi riservo di farlo quanto prima.

Trovate lo sketch in allegato nel file ZIP in fondo alla pagina.

+

+

Adesso usate la vostra fantasia per trovare un'applicazione e magari condividerla con la community. Se vi è piaciuto condividete questo articolo su Facebook, Twitter, Google+ e Linkedin.

AllegatoDimensione
Distanza sensore ultrasuoni HC-SR04 e Arduino.rar14.75 KB

 

 

Scrivi un commento all'articolo esprimendo la tua opinione sul tema, chiedendo eventuali spiegazioni e/o approfondimenti e contribuendo allo sviluppo dell'argomento proposto. Verranno accettati solo commenti a tema con l'argomento dell'articolo stesso. Commenti NON a tema dovranno essere necessariamente inseriti nel Forum creando un "nuovo argomento di discussione". Per commentare devi accedere al Blog
ritratto di maxvarese

Altri sensori a US

Ottimo articolo !.
Personalmente ho utilizzato il modello SFR08 e recentemente i sensori a ultrasuoni della MaxBotix per la misura del livello dell'acqua: hanno qualche funzione aggiuntiva ma però il costo il avvicina a 100 euro.

Massimo

ritratto di gioam.lorenzini

Grazie per i complimenti

Grazie per i complimenti.

Ho dato un occhiata al SFR08 e ai sensori della MaxBotic che mi sembrano molto precisi e ben fatti.

Giovanni

ritratto di Ermellino

Complimenti

Bellissimo articolo,molto dettagliato specialmente per chi è alle prime armi :)

Domenico

ritratto di SIGISdesign

Richiesta informazioni

Salve sono una ragazza che studia design e sto preparando un esame su dispositivi di ausilio per ipovedenti per praticare attività sportiva. Premetto che non sono preparata sul campo dell'elettronica, ma vorrei avere informazioni riguardo a questi sensori, per quanto riguarda dimensioni, e se fosse possibile inserirli in un braccialetto o una cavigliera in modo da poter individuare per tempo eventuali ostacoli ed inviare dei feedback ad altri dispositivi per avvertire la persona per tempo.

ritratto di gioam.lorenzini

Buona sera, Il sensore che ho

Buona sera,
Il sensore che ho utilizzato io ha dimensioni:

  • 4,5 cm di larghezza
  • 2 cm di altezza
  • 1,5 cm di profondità

Ci sono anche sensori più piccoli.

In un braccialetto non metterei il sensore:

  • non ci sta
  • il braccio a fare sport, e quindi il braccialetto, si muovono molto e possono cambiare anche direzione; quindi il segnale, inviato dal sensore, magari ha dei problemi a ritornare al sensore, che potrebbe dare misure errate

Il sensore, secondo me, è possibile metterlo in una cavigliera. Si può controllare il sensore con un arduino tipo come il LilyPad creato appositamente per prodotti indossabili.

Ad esempio si può mettere una condizione che se la distanza è minore di 30cm inizi a suonare un cicalino

Sono a disposizione per ulteriori informazioni

Giovanni Lorenzini

ritratto di SIGISdesign

Innanzitutto, grazie infinite

Innanzitutto, grazie infinite per la risposta e per la disponibilità, ho dato un' occhiata al sensore, ed il fatto che interagisca con prodotti indossabili è esattamente quello che cercavo, però c'è un punto che non ho ben specificato nel commento, che forse può cambiare le cose. Per attività sportiva vorrei riferirmi alla corsa, in quanto potrebbe risultare l'attività sportiva più alla portata di tutti, e più praticabile per un ipovedente (non cieco). Allo stesso tempo però, correndo, c'è un movimento continuo sia di gambe che di braccia. Questi sensori sarebbero comunque in grado di rilevare gli ostacoli? Se sì, è possibile rilevarli ad una distanza maggiore? (ripeto, sono ignorante sul campo dell' elettronica)

Per farle capire meglio, nel mio progetto volevo creare sia una cavigliera, sia un braccialetto, che potessero rilevare gli ostacoli, alle rispettive altezze, ed interagire: o con degli auricolari bluetooth tramite un segnale sonoro, o con l'abbigliamento (maglietta e pantaloncini) tramite segnali meccanici (vibrazione ad esempio).

E' possibile o è pura fantascienza?

La ringrazio in anticipo.

ritratto di gioam.lorenzini

Allora, il sensore può

Allora, il sensore può misurare una distanza fino a 4 metri. Per rilevare ostacoli nella corsa è meglio usare un sensore con un angolo di misura alto e metterlo in modo che quando la gamba è rivolta verso terra, la misura inizia a farla dal livello della caviglia in su (quindi con il sensore rivolto leggermente verso l'alto).

Per fare una misura il sensore ci mette poco tempo, quindi si possono fare misure ripetute e confrontarle.

Inoltre si può istallare un sensore per gamba, e quindi confrontare i dati.

Si può anche fare una scala di suono (tipo i sensori di retromarcia delle auto) che mano a mano che ti avvicini all'oggetto la frequenza del suono emesso dagli auricolari  aumenta. 

Ad arduino è possibile collegare un modulo bluetooth e inviare e ricevere dati con smartphone ed altri dispositivi. Io non so se è possibile configurare degli auricolari bluetooth, ma mi informerò.

Sono a disposizione per ulteriori informazioni.

ritratto di Boris L.

Complimenti, ti sei messo

Complimenti, ti sei messo davvero d'impegno nella spiegazione :)

ritratto di Andrea e Matteo

Ottimo

Ottimo articolo!
Veramente ben fatto e molto dettagliato.
Devo farti i miei complimentiAndrea

ritratto di Andrea e Matteo

Dubbio

Buonasera,
una cosa non mi è chiara, perchè si utilizza la stringa:

// Converti il tempo in distanza:
distanza = durata / 29.1 / 2 ;

da dove esce 29,1/2?
Grazie per un'eventuale risposta

ritratto di gioam.lorenzini

Grazie per i

Grazie per i complimenti,

Distanza = tempo * velocità del suono / 2
2 perché il suono compie due volte il percorso.

Quindi sarebbe:
Distanza (cm) = 1 (ms) * 0,034 (cm/ms) / 2
Distanza (cm) = 0,034 cm / 2 = 0,017 cm

Volendo si può invece che moltiplicare dividere per un numero:
1 / 0,034 (cm/ms) = 29,1 (ms/cm)

Quindi con questo numero risulta uguale:
Distanza (cm) = 1 (ms) / 29,1 (ms/cm) / 2
Distanza (cm) = 0,034 cm / 2 = 0,017 cm

ritratto di Andrea e Matteo

Grazie mille! ;)

Grazie mille!
;)

 

 

Login   
 Twitter Facebook LinkedIn Youtube Google RSS

Chi è online

Ci sono attualmente 1 utente e 39 visitatori collegati.

Utenti online

Ultimi Commenti