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
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:
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:
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:
Buon divertimento !!!
27 commenti
Vai al modulo dei commenti
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….
Autore
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
Ciao Mauro, mi sei stato molto d’aiuto perché non riuscivamo io e i miei compagni di classe a capire come funzionava.
Un bacione grande.
Autore
Grazie Alessio.
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.
Autore
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
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
Autore
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
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
Autore
Ciao Antonio,
i sensori ad ultrasuoni sono cari 🙁
Hai valutato l’uso di sensori ottici?
Mauro
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?
Autore
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
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
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.
Autore
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.
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.
Autore
Ciao Simone,
sabato 28 marzo c’è l’arduino Day 2015 in 253 città nel mondo, ti riferisci a questa competizione?
Che cosa vorresti realizzare?
Ciao Mauro,
Non sono molto esperto e ti vorrei chiedere se nel tuo progetto potrei usare un SRF04
Autore
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.
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
Autore
Ciao Pietro,
a quali pin hai connesso il PWM del/dei motoriduttori e a quali pin il sensore?
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
Autore
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?
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
Autore
Ciao Mauro,
comprendo, certo esistono i filtri e gli algoritmi di analisi che puoi usare in quel caso.
Ciao Mauro, è un po che giro intorno a questi sensori, mi serve qualcosa che sia in grado di leggere una distanza con tolleranza decimale (0,1 mm) da usare sempre con arduino. Mi puoi dare qualche dritta? Ho visto che il sensore in questione lavora con tolleranza di 0,3cm ma io voglio 0,1 mm. Grazie
Autore
Ciao Marius,
posso consigliarti di rivolgerti ad un segmento, professionale o semiprofesionale, questo tipo di sensore è economico e diretto ad un segmento maker o hobbystico.