Misuriamo la distanza di un oggetto con un sensore Devantech SRF05 e Arduino¶
Il sensore ad ultrasuoni misura la distanza di un oggetto inviando una scarica di ultrasuoni e ricevendo il loro ritorno dopo che hanno rimbalzato sull'oggetto. Arduino dà il via alla scarica e attende il segnale di ritorno utilizzando un unico pin grazie alla funzione pulseIn(). Il tempo che passa tra l'invio della scarica e il segnale di ritorno corrisponde al tempo impiegato dagli ultrasuoni a percorrere la distanza fra il sensore e l'oggetto in andata e ritorno. La misura di questo tempo permette di calcolare la distanza dell'oggetto basandoci sulla velocità del suono. Utilizzando come unità di misura i pollici, abbiamo che la velocità del suono è di 73,746 microsecondi/inch, mentre utilizzando i centimetri abbiamo 29 microsecondi/cm. Dividendo il tempo trascorso tra l'invio del segnale e il suo ritorno per la velocità del suono otteniamo la lunghezza del percorso del suono dal sensore all'oggetto e ritorno; dividendo questa distanza per 2, otteniamo la distanza dell'oggetto dal sensore.
Vediamo come funziona il codice:
const int pingPin = 4; //identifica il pin del sensore
void setup() {
Serial.begin(9600); // inizializza la comunicazione seriale
}
void loop()
{
long duration, inches, cm; //stabilisce le variabili della durata e delle unita' di misurazione della distanza
pinMode(pingPin, OUTPUT); //stabilisce che il pin 4 agisce come output
digitalWrite(pingPin, LOW); //da' un impulso LOW per ripulire il segnale
delayMicroseconds(2); //attende 2 microsecondi prima di procedere
digitalWrite(pingPin, HIGH); //da' l'impulso che fa partire gli ultrasuoni
delayMicroseconds(5); //attende 5 microsecondi
digitalWrite(pingPin, LOW);
pinMode(pingPin, INPUT); //modifica il pin 4 come input per ricevere il segnale di ritorno
duration = pulseIn(pingPin, HIGH); //misura il tempo che impiega il segnale a tornare
inches = microsecondsToInches(duration); //converte il tempo in pollici
cm = microsecondsToCentimeters(duration); //converte il tempo in centimetri
Serial.print(inches); //scrive la distanza calcolata nella finestra di controllo
Serial.print("in, ");
Serial.print(cm);
Serial.print("cm");
Serial.println();
delay(100);
}
long microsecondsToInches(long microseconds)
{
return microseconds / 74 / 2; //calcola la distanza in pollici
}
long microsecondsToCentimeters(long microseconds)
{
return microseconds / 29 / 2; //calcola la distanza in centimetri
}
Riferimenti¶
{{html(
Arduino - <a href="http://www.arduino.cc/en/Tutorial/Ping" target="_blank">Ping</a>
)}}