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.

12 Comments

  1. Ermellino 16 maggio 2014
  2. SIGISdesign 19 maggio 2014
  3. gioam.lorenzini 19 maggio 2014
  4. SIGISdesign 20 maggio 2014
  5. gioam.lorenzini 20 maggio 2014
  6. Boris L. 23 maggio 2014
  7. maxvarese 6 maggio 2014
  8. gioam.lorenzini 6 maggio 2014
  9. Andrea e Matteo 1 giugno 2014
  10. Andrea e Matteo 1 giugno 2014
  11. gioam.lorenzini 1 giugno 2014
  12. Andrea e Matteo 3 giugno 2014

Leave a Reply