Come rilevare Velocità Ultrasuoni

Ciao a tutti

Dopo alcuni calcoli teorici (vedi Costruire modulo amplificatore - #33 by tazzo - Generale - Arduino Forum) ho costruito su breadboard il circuito A Cheap Ultrasonic Range Finder con l'unica modifica di un'induttanza da 100uH invece che 330uH per limitare i Vrms ad un valore più conservativo e dalle prove eseguite i dati sperimentali non discostano di molto dai teorici.

Le codizioni di test sono state:
Distanza: 17,5 cm
Vrms: 10 volt (da simulazione spice, non verificato in quanto non dispongo di oscilloscopio per verificare)

Ho rilevato un picco massimo di 254mV ricevuti (senza alcuna amplificazione!), dai conti teorici risultava un minimo di 192mV.

Un grafico vale più di mille parole quindi:

Nella prima colonna sono indicati i uSecondi dopo la fine dell'intero treno di 10 impulsi a 40 KHz (durato quindi 250uS) mentre nella seconda i relativi valori letti dall'ADC di Arduino.

L'ADC campionava alla velocità di 77 Khz e via software venivano scartati i valori più piccoli di 8 mV per eliminare eventuale rumore e veniva salvato il tempo di ricezione.

Tra due valori consecutivi può quindi esserci un intervallo di 20uS il che porta ad una frequenza di campionamento più bassa dei 12.5uS richiesti dal teorema di Nyquist.

Ciò che mi sorprende sono alcune letture dal valore esattamente identico dopo 52,76,96 e 408uS.... :astonished:

Il grafico non è proprio in scala ma non dovrebbe essere difficile capire l'andamento reale.

Il primo valore ricevuto poco dopo la fine della trasmissione (dopo 32uS) è dovuto ad un effetto chiamato Ringing ed è quindi sicuramente da scartare.

A 17,5 cm considerando la velocità del suono mi sarei aspettato un ritardo di 0,175 m / 343,4 m/s = 510uS mentre rilevo un valore di picco un pò distante di 736uS.

Non ho ben capito, e qui vi chiedo aiuto, quale valore ricevuto devo considerare come l'inzio della ricezione, il picco o il primo valore sopra una certa soglia? Ad esempio il segnale di 24mV dopo 464uS?

In tal caso devo contare il tempo da dopo tutto il treno di impulsi (quindi 462uS) o a partire dal primo impulso (quindi 462-225=237uS)? La differenza sarebbe abbastanza significativa e in entrambi i casi non vicina ai 510uS che mi aspettavo.

Ciao e grazie a tutti

Nella prima colonna sono indicati i uSecondi dopo la fine dell'intero treno di 10 impulsi a 40 KHz (durato quindi 250uS) mentre nella seconda i relativi valori letti dall'ADC di Arduino.

Se vuoi avere 40Khz un impulso non puó avere 250µS, ma l' impulso piú la pausa deve avere 25µS. Se hai un duty cicle di 50% allora l' impulso dovrá avere una lunghezza di 25µS e una pausa di 25µS.

Questo invalida tutto il resto dei Tuoi conti e Misure. Una frequenza di 40kHz non riesci a campionare a 77kHz. Se vuoi misurare la tensione massima del segnale devi elaborarlo analogicamnete oppure campionarlo con una frequenza moooolto piú alta.

Ciao Uwe

Mi sono spiegato male, trasmetto 10 impulsi, ogni impulso con 12.5uS di ON e 12.5uS di OFF (Duty cycle 50%), in totale 25uS * 10 = 250uS di trasmissione a 40 KHz, quindi va bene.
Per il campionamento non dovrebbe essere perfetto in quanto la frequenza è un pochino bassa ma vorrei solamente capire quando ricevo qualcosa, non mi interessa ottenere fedelmente il segnale trasmesso ma solamente il ritardo con cui ricevo per costruire un anemometro ultrasonico.

Ciao e grazie

ciao
hai visto questa discussione
http://arduino.cc/forum/index.php/topic,92311.0.html
il sensore è più compatto

stefano

Ho visto il link ma purtroppo non mi ha aiutato e mi rimangono le domande che ho posto..