Progetto

Generale

Profilo

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