Tauon Barcadero

Sensore a ultrasuoni HC SR04 e Arduino

with 5 comments


Un sensore a ultrasuoni come il HC SR 04 misura il tempo impiegato dalle onde sonore emesse da un sorgente a ritornarvici dopo aver incontrato un ostacolo che le riflette. Il fascio di onde sonore emesso ha forma conica e lo stesso vale per le onde riflesse da un ostacolo, questo fa si che il sensore riceva molte riflessioni da diversi oggetti, ciò rende il sensore, da solo,  incapace di distinguere un oggetto da un altro o aperture negli oggetti troppo piccole.

Sensore a ultrasuoni HC SR 04

Calcolo della distanza

La velocità del suono nell’aria alla temperatura di 20° è di circa 343,4 m/s, qui usero la velocità approssimata di 340 m/s per semplicità, se è necessaria una maggior precisione si può usare la seguente legge in funzione della temperatura t: V = 331.4 + 0.62*t

Il sensore restituisce il tempo impiegato per andare e tornare dalle onde sonore in microsecondi, inoltre è comodo avere la misura in cm, quindi bisogna convertire la velocità del suono da m/s in cm/microsecondo: 1 m/s = 10^2/10^6 cm/microsec = 10^-4 cm/microsec => 340 m/s = 3,4*10^-2 cm/microsec

Il tutto va ancora diviso per 2 in quanto il tempo che abbiamo convertito è quello impiegato per andare e tornare indietro dalle onde, mentre per calcolare la distanza dall’oggetto ci basta metà di questo tempo, la formula finale, dove t è il tempo restituito dal sensore in cm/microsec è:

S = 1.7 * 10^-2 * t cm

HC SR 04

Il sensore dispone di 4 pin: Vcc (+5V), Trigger, Echo, GND. Si invia un impulso alto sul pin Trigger per almeno 10 microsec, a questo punto il sensore invierà il ping sonoro e aspetterà il ritorno delle onde riflesse, il sensore risponderà sul pin Echo con un impulso alto della durata corrispondente a quella di viaggio delle onde sonore, dopo 38 millisec si considera che non sia stato incontrato alcun ostacolo. Per sicurezza si aspettano in genere 50-60 millisec per far si che non vi siano interferenze con la misura successiva. Per maggiori informazioni c’è il datasheet.

Connettere Arduino e il sensore

Basta connettere il sensore a +5V e GND di arduino rispettivamente ai pin Vcc e GND del sensore, e Trigger ed Echo a due porte qualsiasi di Arduino( o anche una sola se si fosse a corto di uscite ). Lo schema è il seguente:

Collegamenti tra Arduino e il sensore HC SR 04

Codice di esempio

Il seguente codice è un esempio per provare il funzionamento del sensore, il file può essere scaricato qui.


//HC RS04 Sensore ultrasuoni
int triggerPort = 7;
int echoPort = 8;

void setup() {

pinMode( triggerPort, OUTPUT );
pinMode( echoPort, INPUT );
Serial.begin( 9600 );
Serial.println( "Sensore ultrasuoni: ");

}

void loop() {
//porta bassa l'uscita del trigger
digitalWrite( triggerPort, LOW );

//invia un impulso di 10microsec su trigger
digitalWrite( triggerPort, HIGH );
delayMicroseconds( 10 );
digitalWrite( triggerPort, LOW );

long duration = pulseIn( echoPort, HIGH );

long r = 0.034 * duration / 2;

Serial.print( "durata: " );
Serial.print( duration );
Serial.print( " , " );
Serial.print( "distanza: " );

//dopo 38ms è fuori dalla portata del sensore
if( duration > 38000 ) Serial.println( "fuori portata");
else { Serial.print( r ); Serial.println( "cm" );}

//aspetta 1.5 secondi
delay( 1500 );
}

Written by barcadero

14 febbraio 2012 at 9:32 pm

5 Risposte

Subscribe to comments with RSS.

  1. usando questo codice e aprendo il serial monitor mi appare sempre 0 cm non è che mi daresti una mano
    #define echo 13
    #define trig 12

    void setup ()
    {pinMode (echo,INPUT );
    pinMode (trig,OUTPUT );
    Serial.begin(9600) ;}

    void loop ()
    {digitalWrite (trig,LOW);
    digitalWrite (trig,HIGH);
    delayMicroseconds (10);
    digitalWrite (trig,LOW);
    long time= pulseIn (echo,HIGH);
    long distance=time/58;
    Serial.print(distance);
    Serial.print(“cm”);
    delay (500);}

    • risolto inserendo un delayMicroseconds (10); nella riga 17

      Leonardo Awanasgana Pergola

      19 febbraio 2013 at 9:43 am

    • il monitor seriale registra continuamente i 234 cm circa costantemente….anche se passo un oggetto davanti al sensore, dove sbaglio?

      Daniele

      11 settembre 2013 at 5:25 pm

  2. [...] fanno gli altri provider) attraverso un ip pubblico ma li “rinchiude” invece in una MAN e attraverso una tecnica chiamata NAT permette la comunicazione con internet. Risultato è che noi [...]

  3. Provato a portare la variabile Duration a 400000 (che sarebbe un tempo di 0,4 secondi , ora leggo con precisione fino a 4 metri!
    Oggetto molto versatile :-D

    Ruby

    13 aprile 2013 at 8:24 pm


Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

Iscriviti

Ricevi al tuo indirizzo email tutti i nuovi post del sito.

%d blogger cliccano Mi Piace per questo: