«

»

Nov 19

Stampa Articolo

Sensore ad ultrasuoni srf05

Oggi voglio raccontarti di qualche esperimento che ho potuto eseguire con il sensore ad ultrasuoni srf05 in grado di misurare la distanza da 3cm a 4m

sensore ad ultrasuoni srf05

per fare i miei test ho utilizzato arduino uno.

Il sensore ad ultrasuoni srf05 è formato da un emettitore o Tx di ultrasuoni ed un ricevitore o Rx degli stessi orientati nella stessa direzione, è inoltre dotato di una circuiteria, visibile in figura, che ti aiuta ad eseguire le misurazioni facilmente.

Per eseguire una misura è necessario inviare un segnale ( Trigger ) e leggere l’eco di quel segnale dopo che esso dopo aver rimbalzato sull’oggetto torna indietro.

Per comprendere meglio il principio di funzionamento del sensore ad ultrasuoni srf05 ho realizzato un disegno:

sensore ultrasuoni srf05

ora dovresti avere più chiaro il principio di funzionamento dei sensori ad ultrasuoni in generale, questa tecnica è simile a quella utilizzata dai radar ad ultrasuoni o gli eco-scandagli ad uso nautico.

In pratica l’ultrasuono emesso dal trasmettitore ( Tx ), non udibile dall’orecchio umano in quanto oltre la soglia che puoi percepire, rimbalza sul muro o altro oggetto e torna nella stessa direzione in modo che l’eco, questo è il nome del segnale di ritorno, possa essere captato dal ricevitore ( Rx ).

Teoria del sensore ad ultrasuoni srf05

Per utilizzare il sensore ad ultrasuoni sfr05 per misurare la distanza di un oggetto puoi utilizzare una formula fisica che già conosci quella relativa alla velocità ossia:

Velocità = Spazio / Tempo

da cui puoi facimente ricavare che:

Spazio = Velocità * Tempo

La Velocità è un valore noto in quanto trattandosi di suono sai che la velocità del suono è 331,5 m/s (metri al secondo) ad una temperatura di 0° e puoi calcolarla alla temperatura ambiente come:

331,5 m/s + 0,62 * T

in cui T è la temperatura misurata in °C per cui a 20°C la velocità del suono è:

331,5 + 0,62 * 20 = 331,5 + 12,4 = 343,9 m/s

che puoi arrotondare a 343 m/s che puoi approssimare a 0,0343 cm/microsecondi, tornando alla misura della distanza che puoi eseguire con il sensore ad ultrasuoni srf05 puoi sostituire questo valore alla formula della velocità:

Spazio = 0,0343 * Tempo

Osservando il disegno ti sarai accorto che il suono viaggia sia in direzione dell’ostacolo sia come eco nel ritorno per cui devi dimezzare il valore calcolato con la formula precedente:

Spazio = (0,0343 * Tempo) / 2 = 0,01715 * Tempo

hai semplicemente diviso il primo valore della formula per 2 ossia hai dimezzato il valore, per semplificare ancora la formula puoi considerarla come scritta in questa notazione:

Spazio = 1/Tempo * 1/0,01715 = 1/Tempo * 58,31 = Tempo / 58,31

Per calcolare lo spazio percorso dal suono e quindi ricavare la distanza dell’oggetto rilevato puoi quindi inviare un segnale a ultrasuoni e attendere che il sensore ad ultrasuoni srf05 riceva l’eco della trasmissione, il tempo intercorso puoi sostituirlo nella formula per calcolare lo spazio e quindi la distanza.

Cosa uso per calcolare la distanza con srf05

Il comando che puoi utilizzare per misurare il tempo inytercorso tra l’invio del suono e la ricezione del suo eco è pulseIn( pin,STATO ) di cui ho già trattato nell’articolo dedicato a Leo-Wi Rover5 in grado di misurare il tempo trascorso tra un impulso ed il successivo presente sul pin.

Il sensore ad ultrasuoni srf05 ha una propria elettronica che genera un treno di impulsi proporzionali al tempo trascorso tra l’invio del suono e la ricezione dell’eco.

Inviando quindi un suono e misurando il treno di impulsi generato dal sensore ad ultrasuoni srf05 puoi conoscere la distanza dell’oggetto applicando la formula già vista.

Collegare il sensore ad ultrasuoni srf05 ad Arduino

le connessioni e parte delle informazioni che hai letto le ho apprese da sito ufficiale arduino su cui trovi il seguente schema per i collegamenti:

srf05

Rispetto ai pin che hai visto nella prima figura devi collegare il modo a massa (GND) il positivo ed il negativo rispettivamente ai +5v e Gnd e il pin Trigger devi collegarlo al pin 8 di arduino od a qualsiasi altro pin ricordandoti di modificarlo anche nello sketch di esempio riportato di seguito.

Lo sketch

lo sketch rappresnta un semplice esempio:

int durata;            // durata dell'impulso
int distanza;          // distanza dell'oggetto
int pin_segnale = 8;   // pin Arduino a cui è collegato l'SRF05
int boud_rate = 9600;

void setup()
{
  Serial.begin(boud_rate);
}

void loop()
{
  pinMode(pin_segnale, OUTPUT);
  digitalWrite(pin_segnale, LOW);
  delayMicroseconds(2);
  digitalWrite(pin_segnale, HIGH);
  delayMicroseconds(10);
  digitalWrite(pin_segnale, LOW);
  pinMode(pin_segnale, INPUT);
  durata = pulseIn(pin_segnale, HIGH);
  distanza = durata/58;
  Serial.println(distanza);
  delay(100);
}

in pratica questo sketch genera sul pin trigger un segnale HIGH per la durata di 10 millisecondi, necessario al sensore per generare il suono da trasmettere ( Tx ) e di conseguenza attendere sul pin 8 il treno di impulsi generato in funzione del tempo trascorso tra invio e ricezione dell’eco.

linea 16: poni il pin 8 ad HIGH;

linea 17: attendi i 10 millisecondi necessari ad inizializzare il sensore ad ultrasuoni srf05;

linea 18: riporta il pin a LOW per riportare il sensore in modalità di ricezione dell’eco;

linea 19: cambia la modalità da OUTPUT ad INPUT per poter ricevere l’input generato dal sensore;

linea 20: usa il comando pulseIn( pin, STATO ) per rilevare la frequenza del treno d’onda generata dal sensore ad ultrasuoni srf05;

linea 21: calcola la distanza con la formula Spazio = Tempo/58 in cui Tempo è il valore ritornato dal comando pulseIn() alla linea 20;

Ora tutto è più chiaro ma se ti chiedi cosa te ne fai di un sensore ad ultrasuoni srf05 pensa al tuo prossimi robot, potresti misurare la distanza dai muri con questo sensore o altre applicazioni tipo rilevare una persona che entra nel tuo appartamento o attivare una serie di luci e suoni quando qualcuno passa davanti alla tua vetrina o al tuo plastico.

Inoltre proprio in questi giorni ho scoperto che l’AR Drone della Parrot utilizza un sensore simile a questo per stabilire la distanza da terra durante il volo:

parrot ar drone

Buon divertimento !!!

Permalink link a questo articolo: http://www.mauroalfieri.it/elettronica/sensore-ad-ultrasuoni-srf05.html

23 comments

Vai al modulo dei commenti

  1. Gianni

    Buonasera, vorrei fare una domanda……… posso utilizzare questo sensore oppure il precedente HC-SR04 (che tra l’altro posseggo) per creare una barriera ultrasuoni che mi segnali una eventuale interruzione, ad esempio il passaggio di una persona, animale, ecc….

    1. Mauro Alfieri

      Ciao Gianni,
      non l’ho mai utilizzato in questa veste ma penso che non ci siano problemi a farlo, certo quello che rileva è solo un oggetto ad una certa distanza.
      Quindi volendolo utilizzare in questo modo puoi definire la distanza da controllare e se rileva un ostacolo ad una distanza minore deduci che qualcosa è entrato nell’area visiva del sensore.

      Mauro

  2. Antonio

    Salve volevo chidergli una cosa, come dovrebbe essere collegato questo sensore?

    http://img145.imageshack.us/img145/5992/catturafq.png

    E molto simile al suo SFR05 ma ha delle piccole differenze, l’ ho comprato su ebay al costo di 5 euro.

    1. Mauro Alfieri

      Ciao Antonio,
      il link che mi hai inviato mostra un SFR05 oltre ai pin di connessione e sono identici a quelli posseduti dal mio sensore, puoi collegarlo come nell’articolo.

      Mauro

  3. antonio

    Ciao Mauro,
    ho iniziato da poco a “giocare” con Arduino, e trovo il tuo sito molto utile, chiaro e completo (si vede che non c’è nulla di “copiato” ma tutto provato e vissuto): complimenti!
    Vorrei costruire un robot inseguitore di oggetto, cioè Arduino cerca di mantenere una distanza preimpostata da un oggetto (in movimento), sensore ultrasuoni.
    Sul web ho trovato poco, qualche video ma niente di aiuto sulla costruzione.
    E’ per caso un progetto in cantiere?
    Sarei fortunato!
    Saluti
    Antonio

    1. Mauro Alfieri

      Ciao Antonio,
      sei fortunato !!!
      Non ho nulla in cantiere, ne di già fatto, ma la fortuna è che tu abbia delle idee e voglia di provare a metterle in pratica, se ti va di provare a ipotizzare un modo di realizzare il tuo robot io ti supporto e magari pubblichiamo un articolo a tuo nome come ho fatto oggi con Matteo.

      Mauro

  4. antonio

    Ciao Mauro,
    OK seguiamo la…buona stella.
    In settimana, lavoro permettendo, proverò a pensare qualcosa.
    Credo che occorreranno 2 sensori leggermente angolati per distinguere dx e sx.
    Io sto usando un URM37, ma proverò a cercare qualcosa di più economico.
    Grazie

    1. Mauro Alfieri

      Ciao Antonio,
      i sensori ad ultrasuoni sono cari 🙁
      Hai valutato l’uso di sensori ottici?

      Mauro

  5. antonio

    Ciao Mauro,
    no, non ho valutato sensori ottici: mi sembravano un poco limitati (distanza, superficie riflettente…)
    Con un piccolo sforzo sul budget vedremo di procedere con quelli ad ultrasuoni.
    Se il robot fosse un 2 ruote in equilibrio probabilmente dovrei avere un terzo sensore!
    Un sacco di “carne al fuoco”!
    Antonio

    PS come posso contattarti professionalmente?

    1. Mauro Alfieri

      Ciao Antonio,
      interessante l’idea di usare un accellerometro per realizzare un robot a due ruote che si bilanci da solo.
      Si è tanta altra carne al fuoco, ma il bello di arduino è proprio che puoi iniziare con poco e farlo evolvere, per questo mi diverto.

      Il gioco non finisce mai 🙂
      Per contattarmi professionalmente puoi scrivermi a info @ mauroalfieri . it

      Mauro

  6. antonio

    Ciao Mauro,
    non pensavo ad un accelerometro ma ad un altro sensore a ultrasuoni che misuri la distanza da terra, se questa varia in più o in meno il robot deve andare avanti o indietro per compensare.
    Probabilmente ci sarà ina “deriva” ma, come dici tu, si può risolvere in un secondo tempo.
    Purtroppo prox settimana sarò in Germania per lavoro….

    Antonio

  7. Riccardo

    Ciao Mauro, ho provato il tuo codice SRF05 con Arduino Uno rev 3 e collegato come scritto ma non funziona..
    Controllato mille volte i fili ma nulla.
    Una info: dietro l’SFR05 c’è un led che indica se è alimentaTO? gRAZIE.
    Ciao

    ps
    Grazie infinite per il tutorial.

    1. Mauro Alfieri

      Ciao Riccardo, sei sicuro di tratti di un SRF05 e non di un SRF04? Sono simili m con funzionamento totalmente differente. Il mio non presenta led che io ricordi.

  8. simone

    ciao mauro,
    sabato 28 c’è una competizione tra ragazzi utilizzando la scheda Arduino.
    Perciò, dato che sei un molto bravo in questo argomento, e sono a corto di idee, mi potresti consigliare qualcosa?
    Grazie,simone.

    1. Mauro Alfieri

      Ciao Simone,
      sabato 28 marzo c’è l’arduino Day 2015 in 253 città nel mondo, ti riferisci a questa competizione?
      Che cosa vorresti realizzare?

  9. Simone

    Ciao Mauro,
    Non sono molto esperto e ti vorrei chiedere se nel tuo progetto potrei usare un SRF04

    1. Mauro Alfieri

      Ciao Simone,
      il SRF04 può sostituire in alcuni ambiti il SRF05 ma dovrei sapere cosa stai realizzando perché hanno caratteristiche differenti e sono controllati in modo completamente differente.

  10. Pietro

    Ciao Mauro.
    Insegno Automazione ai periti meccanici meccatronici. Ho deciso di introdurre arduino nei programmi didattici. Intanto ti ringrazio perche ho utilizzato le tue esoerienze. Poi ti chiedo consiglio sul sensore Srf05. Ho notato che legge correttamente le distanze fino a quando non attivo dei piccoli motoriduttore che uso per un semplice rover. In questo caso dá della distanze spurie che disturbano il programma. Mi sai dire qualcosa e come posso ovviare?
    Grazie ancora
    Pietro

    1. Mauro Alfieri

      Ciao Pietro,
      a quali pin hai connesso il PWM del/dei motoriduttori e a quali pin il sensore?

  11. Mauro

    Ciao Mauro, sono un novizio e vorrei costruire un contacurve da moto. Pensavo di utilizzare una coppia di SRF04, inclinati di circa 30° rispetto all’orizzontale e posti sui due lati della moto.
    avrei due domande:
    -devono proprio essere perpendicolari al terreno per funzionare?
    -pensi che abbiano problemi dati dalla vicinanza del motore con alta tensione sulle candele etc?
    Grazie

    1. Mauro Alfieri

      Ciao Mauro,
      sono entrambi aspetti da testare sul campo, non ho mai provato, ti darei solo una mera opinione.
      Mi incuriosiscono anche gli effetti delle vibrazioni introdotte dalla moto e dei fluidi termici generati dal motore, magari non influiscono, è da provare.
      L’ipotesi di usare un accellerometro/giroscopio l’hai già scartata?

  12. Mauro

    Ciao, non ho provato con l’accelerometro/giroscopio perchè ho paura che ci siano troppe variabili, buche, correzzioni di traiettoria etc. Questa settimana dovrebbero arrivarmi i sensori, appena riesco a provare ti faccio sapere come è andata.
    Per il momento grazie

    1. Mauro Alfieri

      Ciao Mauro,
      comprendo, certo esistono i filtri e gli algoritmi di analisi che puoi usare in quel caso.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Puoi usare i seguenti tag ed attributi HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>