Radarino

RadarIno

Il progetto “RadarIno” consiste in un prototipo di radar che attraverso gli ultrasuoni identifica gli ostacoli nei 5 metri circostanti e tramite il wi-fi si ha una visuale sul pc.

Questo progetto è stato realizzato da Luca Castagna e Riccardo Berra i quali prendendo spunto dai quadranti sonar dei sommergibili hanno voluto realizzare un progetto analogo.

Come appare Radarino

Come appare Radarino

Elettronica

Altro Materiale

Le componenti principali del radarino

Le componenti principali del radarino

Codice e Software

Schema elettrico

Lo schema elettrico del radarino

Lo schema elettrico del radarino

Video dimostrativo

Principio di funzionamento

Il RadarIno deve il suo funzionamento all’utilizzo dei Sensori a ultrasuoni HC SR04 che permettono di ottenere la distanza di un oggetto posto fino a 5m dal sensore, con la precisione teorica di 1cm. Il suo principio di funzionamento è dato dalla velocità del suono (approssimata a 340 m/s per semplicità) e dal tempo che impiega un segnale di trigger inviato dal sensore stesso a ritornare dopo essere “rimbalzato” contro una superficie.

Il sensore restituisce il tempo impiegato per andare e tornare dalle onde sonore in microsecondi, inoltre è comodo avere la misura in cm, quindi bisogna convertire la velocità del suono da m/s in cm/µs:

1 m/s = 10^2/10^6 cm/µs = 10^-4 cm/µs => 340 m/s = 3,4*10^-2 cm/µs

Il tutto va ancora diviso per 2 in quanto il tempo che abbiamo convertito è quello impiegato per andare e tornare indietro dalle onde, mentre per calcolare la distanza dall’oggetto ci basta metà di questo tempo, la formula finale, dove t è il tempo restituito dal sensore in cm/µs è:

S = 1.7 * 10^-2 * t cm

Il sensore dispone di 4 pin:

  • Vcc (+5V)
  • Trigger
  • Echo
  • GND

Si invia un impulso alto sul pin Trigger per almeno 10 µs, a questo punto il sensore invierà il ping sonoro e aspetterà il ritorno delle onde riflesse, il sensore risponderà sul pin Echo con un impulso alto della durata corrispondente a quella di viaggio delle onde sonore, dopo 38 ms si considera che non sia stato incontrato alcun ostacolo. Per sicurezza si aspettano in genere 50 ms per far sì che non vi siano interferenze con la misura successiva.

Il RadarIno utilizza 4 sensori HC SR04 posti a croce perpendicolarmente tra di loro e rivolti verso l’esterno. In questo modo con un singolo segnale di trigger e 4 segnali di echo è possibile percepire le distanze delle superfici poste ai 4 lati del radar.

A questo punto entrano in gioco altre due componenti, il servo motore rotazione continua DS04-NFC e lo slip ring. I 4 sensori ad ultrasuoni sono posti su una superficie connessa tramite due ingranaggi al servo motore. La rotazione di quest’ultimo permette a sua volta la rotazione dei 4 sensori ad ultrasuoni, in modo da ottenere quindi nel tempo le distanze delle superfici con angolazioni diverse.

L’utilizzo dello slip ring si è reso necessario per evitare che i fili di echo/trigger e alimentazione/massa si intrecciassero tra loro durante la rotazione.

Infine è stato utilizzato un sensore ad effetto Hall posto esattamente al centro di uno dei sensori ad ultrasuoni. Questo permette di stabilire il tempo che intercorre il sensore a fare una rotazione completa di 360 gradi. Questo sistema si è reso necessario dall’impossibilità di sapere in tempo reale la posizione in gradi dei sensori ad ultrasuoni. A tal proposito quindi utilizzando il sensore ad effetto Hall si può sapere ogni volta che ci si trova all’angolo 0 e quindi quanto tempo è intercorso tra una passata e l’altra. Il tempo intercorso quindi ci permetterà di stabilire ad ogni intervallo di tempo trascorso l’esatta angolazione del sensore ad ultrasuoni, e conseguentemente anche l’angolazione degli altri 3, visto che sono posti rispettivamente ad angolazioni di +90 +180 e +270 gradi. La formula per sapere il grado in cui ci si trova nel tempo è data da:

g = cur_time * 360 / round_time

Dove cur_time è il tempo trascorso dall’ultima segnalazione del sensor hall, mentre round_time è il tempo intercorso fra due segnalazioni.

Per avere un round_time il più preciso possibile, per il calcolo dei gradi si utilizza una media degli ultimi 5 campioni calcolati. Questo significa anche che il RadarIno raggiungerà la sua massima precisione dopo che avrà percorso almeno 5 giri.

Il tempo di rotazione è stato impostato approssimativamente intorno ai 9 secondi (impostando opportunamente la velocità di rotazione del servo motore), questo per far si che, considerando 20 letture distanza al secondo (tenendo in considerazione i 50 ms tra una rilevazione e l’altra) potessimo ottenere almeno 180 letture per sensore, quindi quasi una lettura ogni 2 gradi.

La trasmissione dei dati viene effettuata tramite modulo WiFi del Fishino UNO, il quale crea una sua rete locale e si mette in ascolto su una porta specifica in modo che l’applicazione software vi si possa connettere.

Si è preferito utilizzare il protocollo TCP perchè permette di evitare la perdita dei dati anche a discapito di qualche ritardo di trasmissione.

Ogni 50ms i dati vengono inviati verso il client e sono:

  • cur_time (ms)
  • round_time (ms)
  • dist_sensor1 (cm)
  • dist_sensor2 (cm)
  • dist_sensor3 (cm)
  • dist_sensor4 (cm)

I dati vengono inviati in formato stringa secondo un formato preciso, in modo da semplificarne il parsing lato client:

#cur_time|round_time|dist_sensor1|dist_sensor2|dist_sensor3|dist_sensor4|

Ad esempio:

#100|9000|50|130|90|210|

Applicazione

L’applicazione è stata realizzata utilizzando un compilatore Borland Builder C++ per la semplicità dei tools che offre per la gestione di finestre e altro, malgrado sia un po’ datato.

E’ stata utilizzata l’interfaccia socket per la connessione TCP e la libreria OpenGL per la parte grafica.

Si è deciso di utilizzare una rotazione in senso oraria proprio per simulare i sonar dei sommergibili, quindi la matrice OpenGL è stata impostata in modo che l’asse Y sia crescente verso il basso, mentre normalmente matematicamente viene inteso crescente verso l’alto.

Questo perchè quando ad esempio vogliamo rappresentare l’angolo dei 90 gradi, vogliamo che esso sia posto in basso dello schermo, e non nella parte alta.

Il posizionamento dei punti viene fatto utilizzando un po’ di nozioni di trigonometria.

Come detto in precedenza, avendo il tempo trascorso dall’angolo 0 ed il tempo totale di rotazione, possiamo ottenere l’angolo in cui si trova il primo sensore. Poi utilizzando le funzioni di seno e coseno, possiamo sapere la posizione Y e X da 0 a 1. Questo coefficiente verrà poi usato per calcolare l’esatta posizione del pixel in base alla distanza indicata dal radar e alla scala dello schermo impostata in quel momento. La posizione X e Y sarà pertanto data dalla formula:

X = centro_x + raggio_max * (cos(angolo) * dist_sensor / scala)

Y = centro_y + raggio_max * (sin(angolo) * dist_sensor / scala)

Dove centro_x e centro_y sono la posizione in pixel del centro, mentre raggio_max è il numero massimo del raggio in pixel del cerchio più ampio.

Nel nostro caso il centro e raggio sono di 340 pixel. Pertanto con un angolo di 0 gradi e una distanza di 1m su una scala di 5m avremo:

X = 340 + 340 * (cos(0) * 100 / 500) = 340 + 340 / 5 = 408

Y = 340 + 340 * (sin(0) * 100 / 500) = 340 + 340 * 0 = 340

NB: le funzioni di seno e coseno in C++ richiedono l’angolo in radianti e non in gradi, quindi per il calcolo dei radianti basta sostituire nella formula indicata inizialmente 360 con 6.28318530718

Per ottenere l’effetto sfumato dei vari pixel nel tempo viene utilizzata una lista di tipo FIFO, dove il primo pixel inserito è anche il primo ad essere disegnato. Ogni pixel inserito nella lista contiene anche il tempo di inserimento. Questo tempo ed il tempo corrente in cui viene disegnato permette di stabilire l’età di quest’ultimo. In base all’età assumerà un colore sempre più tenue fino a scomparire. Quando il pixel in questione risulta troppo vecchio, viene rimosso dalla lista ed eliminato.

Difficoltà riscontrate

La principale difficoltà riscontrata nella costruzione di RadarIno è stata il concepire dal punto di vista hardware il modo di poter utilizzare più di un sensore ultrasuoni contemporaneamente mentre ruota di 360° in un tempo prestabilito sapendo esattamente l’angolo in cui ci si trova rispetto ad uno 0.

Inizialmente si è partiti dal pilotare i quattro sensori mentre erano statici e subito si è evidenziata l’impossibilità di poterli fare roteare perché ovviamente se il Fishino è fermo su un piano e i sensori ruotano, dopo un giro ci si trova con i cavi che si intrecciano e rompono il tutto.

L’impossibilità di non poter fare girare i fili senza che vi si intreccino ha dato sfogo all’ingegno, il quale ci ha portati ad arrivare a prendere in considerazione un componente molto valido: lo slip ring. Lo slip ring è un componente elettromeccanico che permette la trasmissione di segnali elettrici mentre si ha un moto stazionario o di rotazione.

Risolto il problema della rotazione dei sensori si è presentato il problema successivo , ovvero fare in modo che essi roteino in un tempo determinato da noi.

La soluzione di adottare un servo motore era chiara, ma il vero problema è stato arrivare a scegliere di implementare degli ingranaggi,i quali erano gli unici che data la grandezza dei quattro sensori sulla basetta mille fori, erano gli unici che riuscivano a dare una stabilità alla rotazione, evitando eccessive oscillazioni e di conseguenza garantendo un valore dei sensori più o meno attendibile.

Risolto il problema di come strutturare il moto, l’ultimo ostacolo che vi si presentava dal punto di vista hardware era l’implementazione di un sensore che permettesse di ricavare i gradi degli angoli. La scelta più funzionale si è rivelata con l’utilizzo del sensore hall.

Questo sensore crea una differenza di potenziale su un conduttore elettrico, ogni volta che esso si trova vicino ad un campo magnetico. L’effetto di hall è risultato proprio a caso nostro perché ponendo esattamente sotto ad un dente dell’ingranaggio più grande un piccolo magnete si è riusciti a capire quando la ruota dentata ha compiuto una rotazione di 360 gradi e di conseguenza risalire ai gradi in base al tempo trascorso.

Pubblicità

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.