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>
)}}