This sketch is missing a short description
Collegare un sensore di prossimità ad Arduino per calcolare la distanza da un oggetto.
Esistono diversi circuiti integrati che assolvono questo compito.
Le tecnologie utilizzate sono sostanzialmente due: infrarossi ed ultrasuoni. La mia scelta è caduta sul Sonic SRF05 che impiega la seconda tecnologia: dal datasheet e dai vari post che ho visto in giro, sembrava quello più affidabile, più economico e più semplice da impiegare.
Il circuito si presenta così:
![enter image description here](https://sites.google.com/site/arduinoita/SRF05.jpg "Componente SRF05")
Il funzionamento è semplice, avviene inviando un impulso ad ultrasuoni (frequenza attorno ai 40Khz), attendendo che l’impulso ritorni dopo aver colpito un oggetto. Misurando il tempo impiegato fra il momento in cui l’impulso è stato emesso e quello in cui questo ritorna, viene calcolata la distanza fra il sensore e l’oggetto. Le distanze misurabili vanno dai 3 cm ai 4 metri.
Interfacciare il sensore ad Arduino è veramente molto semplice, ci sono solo 4 connettori di cui preoccuparsi: alimentazione, massa, trigger ed echo.
L’alimentazione richiesta è pari a 5V, esattamente la tensione emessa da Arduino, per cui per alimentarlo è sufficiente collegarlo al controllore senza l’ausilio di alimentazioni esterne.
Schema di collegamento
![enter image description here](https://sites.google.com/site/arduinoita/SchemaSRF05.jpg "Schema di assemblaggio")
Colleghiamo il connettore ‘echo’ al Pin 3 del controllore, quello trigger al Pin 2 e, in fine, i due Pin di alimentazione (+5V e GND).
Fatti i dovuti collegamenti hardware passiamo alla parte software, useremo questo algoritmo per la lettura della misura: dopo aver inizializzato le variabili e i PIN del controllore, eseguiamo 10 letture consecutive, ne calcoliamo le media e prendiamo quella come valore della distanza in cm.
La porzione di codice:
digitalWrite(initPin, HIGH);
delayMicroseconds(10);
digitalWrite(initPin, LOW);
pulseTime = pulseIn(echoPin, HIGH);
distance = pulseTime/58;
manda un impulso per 10us aspetta e si mette in ascolto aspettando l’eco di risposta. Attraverso la primitiva pulseIn(), calcola il tempo fra l’emissione del segnale e la ricezione dell’impulso di risposta. La distanza in cm si ottiene dividendo per 58 questo valore.
La seconda parte del codice, esegue 10 letture consecutive, le mette in un array. Calcola la media delle letture e stampa questo valore sulla seriale.
Embed This Sketch
Use the following HTML code to embed the sketch code above in your blog or website.
<iframe style="height: 510px; width: 100%; margin: 10px 0 10px;" allowTransparency="true" src="https://codebender.cc/embed/sketch:62863" frameborder="0"></iframe>
Embed The Serial Monitor
You can also embed the Serial Monitor section! Just use this HTML code.
<iframe style="height: 510px; width: 100%; margin: 10px 0 10px;" allowTransparency="true" src="https://codebender.cc/embed/serialmonitor" frameborder="0"></iframe>