# Robotica educativa/Misurazione della distanza

Robotica educativa

## Introduzione

* PrerequisitiRobotica educativa/Prerequisiti
* Etica della roboticaRobotica educativa/Etica della robotica

## Robotica con Arduino

* Le basi dell'informaticaRobotica educativa/Le basi dell'informatica
* Le basi dell'elettronicaRobotica educativa/Le basi dell'elettronica
* Esercizi di elettrotecnicaRobotica educativa/Esercizi di elettrotecnica
* Sicurezza elettricaRobotica educativa/Sicurezza elettrica

## Primi passi nella robotica

* Invio di un SOSRobotica educativa/Invio di un SOS
* Che tempo che faRobotica educativa/Temperatura e umidità
* TermostatoRobotica educativa/Termostato
* Misurazione della distanzaRobotica educativa/Misurazione della distanza
* Sensore di parcheggioRobotica educativa/Sensore di parcheggio
* Gestione di un servomotoreRobotica educativa/Servomotore
* TelepassRobotica educativa/Telepass
* Dal computer ad ArduinoRobotica educativa/Dal computer ad Arduino
* Musica maestro!Robotica educativa/Musica maestro
* Lettore RFIDRobotica educativa/Lettore RFID
Modifica il sommario
Prima di cominciare è bene riepilogare tutti i concetti di fisica classica che si spera siano noti allo studente (o ignoti, se l'esperienza venisse proposta nelle scuole primarie).
L'eco si verifica quando un suono incontra un oggetto di dimensioni proporzionali alla sua lunghezza d'onda (che verrà indicata col simbolo $\lambda$, per non confonderla con la lunghezza $l$).
In questo caso, conoscendo la frequenza di lavoro $F=40~{\text{kHz}}$ e la velocità del suono $c=343~{\text{m/s}}$ si ha:
$\lambda ={\frac {c}{f}}={\frac {343~{\text{m/s}}}{40~{\text{kHz}}}}\simeq 8,58~{\text{mm}}$
Fortunatamente, la natura non è così rigorosa, pertanto l'eco si otterrà anche intercettando oggetti di dimensioni differenti. Questo approccio serve per illustrare che non tutti gli oggetti saranno individuabili e che l'eco (come quando si urla verso una montagna) si verifica poiché sussistono determinate condizioni e... i pipistrelli, per procacciarsi il loro cibo, emettono frequenze con lunghezze d'onda della dimensione degli insetti. Solo queste verranno riflesse e... buon appetito.
In questo caso, la cosa più interessante è la distanza $d$ del bersaglio, che si calcola con la solita formula della velocità:
$d=c\cdot t$
dove $c$ è la velocità del suono, che si considera costante, pari a $c=343~{\text{m/s}}$. Tuttavia il dispositivo scelto, Arduino, non utilizza le unità di misura del Sistema Internazionale ma, per la misurazione del tempo, utilizza i microsecondi e (per nostro comodo) la distanza verrà espressa in centimetri.
Pertanto, con un'opportuna equivalenza, la velocità del suono diventa:
$c=343~{\text{m/s}}=343~{\text{m/s}}{\frac {10^{2}~{\text{cm/m}}}{10^{6}~\mu {\text{s/s}}}}=0,0343~{\text{cm/}}\mu {\text{s}}$
Quest'equivalenza è fondamentale per comprendere la linea dove verrà definita la velocità del suono.

## Schema di montaggio

Come sempre, si inizia con le cose facili. Si supporrà la velocità del suono nell'aria costante, avente velocità $c$ pari a $c=343~{\text{m/s}}$. Questa è la velocità del suono a $20~^{\circ }{\text{C}}$, come a casa o in un'aula scolastica.
Questo significa che, se si riesce a comprendere il codice, lo schema di montaggio è composto soltanto dal microcontrollore Arduino, dal sensore di prossimità HC-SR04 e – letteralmente – quattro fili.
Si noti che la breadboard è facoltativa (i cavi potrebbero essere connessi direttamente al sensore). È invece opportuna in due contesti:
* quando si desidera una discreta accuratezza nella misurazione delle distanze;
* quando, oltre al sensore di prossimità, si desiderano inserire anche altri componenti (come nel Telepass, un'espansione di questo progetto).
Naturalmente, nello schema di montaggio, l'alimentazione di Arduino è sottintesa, poiché l'output viene mostrata nel computer.
Lo schema di montaggio, come visibile in figura, è estremamente semplice. Il sensore deve essere alimentato e la sua alimentazione ($V_{cc}=5~{\text{V}}$, filo rosso, e $GND=0~{\text{V}}$, filo nero) sono fornite da Arduino.
Il sensore ha altri due pedini, uno chiamato trigger, al quale si invia un impulso di $10~\mu {\text{s}}$ per far partire l'impulso. Dopodiché vi è un secondo pedino, chiamato echo, che restituisce il tempo impiegato dal segnale a raggiungere il bersaglio (e ritornare). Pertanto, nel calcolo della distanza, questo tempo dovrà essere diviso per 2 (andata e ritorno).
   Va ricordato che il sensore a ultrasuoni HC-SR04 nelle sue specifiche tecniche, dichiara di poter rilevare la presenza di un ostacolo quando questo si trova tra 2 centimetri e 4 metri di distanza, con un margine di errore di 3 millimetri. Utilizza una frequenza di lavoro pari a $40~{\text{kHz}}$, pertanto la sua lunghezza d'onda approssimativa è di poco inferiore al centimetro (l'ordine di grandezza degli oggetti che si intende individuare).
   Infine, l'oggetto da individuare deve essere collocato in un angolo non superiore a $15~^{\circ }$, rispetto al suo asse.

### Utilizzo del sensore HC-SR04

Dalle specifiche tecniche del sensore si legge che il trigger deve essere portato a livello alto per $10~\mu {\text{s}}$. Pertanto, per essere certi del suo corretto funzionamento, prima lo si porta a livello basso per almeno $5~\mu {\text{s}}$, come mostrato in figura.
In questo modo il sensore invierà un segnale a $40~{\text{kHz}}$ della durata di $10~\mu {\text{s}}$ e l'echo (dopo aver riportato il trigger a livello basso) si metterà in ascolto. Quando riceverà il segnale inviato (la sua eco) ne darà notifica al microcontrollore portandosi a livello alto.
Cronometrando il tempo intercorso tra invio e ricezione del segnale, e dividendolo per due (andata e ritorno) si ha il tempo che il suono impiega per incontrare l'ostacolo (o il bersaglio). Moltiplicando questo tempo per la velocità del suono si ottiene, finalmente, la distanza cercata.

## Codice

Di seguito il codice utilizzato per visualizzare nel monitor seriale la distanza degli oggetti localizzati dal sensore.
Da sottolineare che – per l'utilizzo di questo sensore – non è stato necessario utilizzare nessuna libreria. È sufficiente stimare il tempo in cui echo si porta a livello alto. Per far questo viene utilizzata la funzione pulseIn che risponde esattamente a questo scopo.

# Espansioni suggerite

Questo progetto si presta a numerose espansioni.
* In primo luogo si è ipotizzata la velocità del suono costante. Non è così: la velocità del suono varia al variare della temperatura. Pertanto si può migliorare il risultato utilizzando un sensore di temperatura e – attraverso la temperatura acquisita – determinare la velocità del suono e una stima della posizione del bersaglio migliore.
* Questi parametri possono essere mostrati mediante un display: così facendo non sarà più necessario l'utilizzo del computer.
* Similmente – anzi, più semplicemente – possono essere espressi tramite segnali acustici, realizzando un vero e proprio sensore di parcheggio.
* Infine, il sensore di prossimità può essere collocato al di sopra di un servomotore, così da simulare il comportamento di un radar. Quest'ultima applicazione è particolarmente suggestiva se si dispone di una stampante 3D con la quale stampare un supporto analogo a quello di un radar.

## Datasheet e funzioni di riferimento

* 1 2 Datasheet by SparkFun, Ultrasonic Ranging Module HC - SR04, su Digi-Keys Electronics
* ↑ pulseIn, come da documentazione ufficiale di Arduino