Sensore distanza Sharp GP2Y0A21YK0F (lezione 11)
Introduzione
I sistemi a movimentazione automatica devono avere in dotazione dei sensori capaci di rilevare eventuali ostacoli che si frappongono durante gli spostamenti.
Facciamo un esempio di un prodotto che negli ultimi periodi sta riscuotendo un notevole successo, come i robot per la pulizia automatica dei pavimenti, essi devono percorrere e mappare un’area che ha le dimensioni di un appartamento, gli ostacoli come delle sedie o giocattoli ecc. possono essere disposti in posizione sempre diverse e la mappatura dell’area d’azione non è sufficiente a garantire spostamenti senza collisioni.
Il sensore di distanza, rileva un ostacolo e lo spazio che intercorre dall’oggetto, in questo modo, il sistema a movimentazione automatica ha la possibilità di rallentare e cambiare direzione, per schivare l’oggetto. Questa tipologia di sensore può essere costruita con l’uso di diverse tecnologie come indicato nei punti di seguito:
- Simile ad un radar, un sistema che emette un’onda radio, che colpisce l’ostacolo che si trova difronte, il segnale radio riflesso è poi rilevato dal ricevitore che calcola la differenza di fase tra il segnale trasmesso e quello ricevuto, in base al risultato di questo calcolo è possibile determinare la distanza dell’ostacolo che ha riflesso l’onda radio.
- Misure tramite sistemi ad onde ultrasoniche, simile a quelle prodotte dai pipistrelli, dove la rilevazione della distanza dello ostacolo è determinata dall’intervallo di tempo che intercorre dall’istante in cui avviene la trasmissione alla ricezione del segnale riflesso.
- Rilevamento ottico, che approfondiremo in questo articolo.
Sensore Ottico
Il sensore ottico GP2Y0A21YK0F è un sistema usato per l’individuazione e il calcolo della distanza di un oggetto. In Figura 1 è riportata lo schema a blocchi funzionale del dispositivo.
![](https://www.quattrodispositivi.it/wp-content/uploads/2021/02/schema-a-blocchi-1.png)
Il sensore ottico ha un diodo IRED (Infrared Emitting Diode) e un ricevitore PSD (Position Sensitive Detector) , vedi Figura 2 e 3, il sistema di processamento del segnale ottico ricevuto, fornisce una tensione proporzionale alla distanza dell’oggetto rilevato. Questo particolare modello, selezionato per questo progetto, è idoneo per operare con distanze comprese nel range tra 10 a 80 cm.
![](https://www.quattrodispositivi.it/wp-content/uploads/2021/02/sensore-distanza.png)
![](https://www.quattrodispositivi.it/wp-content/uploads/2021/02/sensore-con-indicazioni.png)
La distanza e’ calcolata con il metodo matematico della triangolazione, si rileva l’angolo d’incidenza del segnale ottico ricevuto e grazie alle equazioni goniometriche determiniamo la distanza dell’ostacolo, questo metodo è stato ampiamente usato anche dagli antichi greci per misurare l’altezza di alcune strutture.
Stiamo usando una tecnica del passato, con la tecnologia moderna, ogni processo evolutivo è passato da tante piccole intuizioni e invenzioni individuali che hanno contribuito alla conoscenza che ha attualmente la nostra società.
Il rilevatore PSD è formato da un insieme di micro elementi, sensibili ai segnali alla frequenza ottica, in base all’elemento colpito, il sensore fornisce un determinato livello di tensione. Il micro l’elemento, del sensore PSD colpito, dipende dall’ angolo d’incidenza del segnale ottico riflesso, ed esso è funzione della distanza tra l’oggetto “colpito” e il sensore (vedi Figura 4). Maggiore è l’angolo e minore è la distanza dell’ostacolo.
![](https://www.quattrodispositivi.it/wp-content/uploads/2021/02/riflessione.png)
il sensore emette un segnale luminoso e rimane in attesa di ricevere il segnale riflesso, ovviamente questo processo è legato ad un timing interno, come indicato nella Figura 5 estratta dal datasheet del componente. L’acquisizione del segnale analogico, da parte del microcontrollore che gestisce il sensore deve essere effettuata ogni 5ms.
![](https://www.quattrodispositivi.it/wp-content/uploads/2021/02/timing-1024x402.png)
Le funzioni goniometriche, con le quali si ricava la distanza dall’ostacolo, hanno un andamento non lineare, cioè il doppio dell’angolo d’incidenza del segnale luminoso riflesso dall’ostacolo, non corrisponde al doppio della sua distanza, come riportato nel grafico a Figura 6, estratto sempre dal datasheet del costruttore.
![](https://www.quattrodispositivi.it/wp-content/uploads/2021/02/tensione-duscita-del-del-sensore--1024x692.png)
Questo tipo di comportamento richiede un ulteriore processamento da parte del microcontrollore. C’è il metodo empirico, cioè, si associa, tramite una tabella che deve essere memorizzata nel microcontrollore, la distanza e il valore di tensione analogica prodotta dal sensore, e nei punti intermedi si linearizza, maggiore e’ il numero di misure e minore sara’ l’errore commesso, oppure, nel caso esistesse e’ possibile usare un modello matematico che linearizza il comportamento del sensore. Fortunatamente, è possibile adottare l’ultima soluzione indicata, inoltre, Sharp, l’azienda produttrice del sensore, ha fornisce l’equazione di linearizzazione, riportata di seguito:
![](https://www.quattrodispositivi.it/wp-content/uploads/2021/02/equazione-5.png)
Dove con Volt e’ la tensione d’uscita del sensore e pow e’ la funzione della libreria di Arduino che eleva a potenza gli elementi numerici inserti tra le parentesi tonde.
Dal grafico in Figura 6, possiamo dedurre che alla distanza di 10 cm il sensore genera un tensione di 2,3V, mentre a 80 cm 0,4V, nel range compreso tra 0 e 10 cm non è possibile discriminare la distanza, perché il comportamento del sensore è fortemente non lineare e piccole variazioni di tensione, producono grosse variazione della distanza misurata, per evitare errori grossolani non si usa il sensore in questo range.
Schema elettrico
Per non complicare ulteriormente lo schema elettrico, alimentiamo il sensore con la tensione d’uscita della scheda di Arduino, ma dobbiamo inserire un condensatore di almeno 10 µF, per garantire, nella fase transitoria di trasmissione del fascio luminoso, la giusta riserva di carica necessaria per alimentare il diodo che emette il fascio luminoso che deve colpire la presenza dell’eventuale ostacolo. Il segnale analogico, e’ connesso all’ingresso del convertito ADC interno al microcontrollore di Arduino, al pin A0.
![](https://www.quattrodispositivi.it/wp-content/uploads/2021/03/schema-elettrico-1.png)
![](https://www.quattrodispositivi.it/wp-content/uploads/2021/02/pinnou-sensore.png)
La pin function del sensore è indicata nella Figura 7, i pins 2 e 3 sono gli ingressi dell’alimentazione (5V), mentre il pin 1 è l’uscita analogica.
Codice
/*SHARP GP2Y0A21YK0F sensore di distanza connesso ad Arduino //con l'uso della libreria SharpIR // includiamo la libreria: #include <SharpIR.h> // Definiamo il pin d'ingresso di a Arduino e il modello del sensore: #define IRPin A0 #define modello 1080 /* Modelli sel sensore IR Sharp : GP2Y0A02YK0F --> 20150 GP2Y0A21YK0F --> 1080 GP2Y0A710K0F --> 100500 GP2YA41SK0F --> 430 */ // Creamo una variabile dove memorizzare la distanza: int distanza_cm; // Creamo una nuova instanza della classe SharpIR: SharpIR mySensor = SharpIR(IRPin, modello); void setup() { // Inizializziamo la seriale al baudrate of 9600: Serial.begin(9600); } void loop() { // conertiamo il valore analogico in ingresso e linearizziamo il comportamento // il valore ritornato è la distanaza espressa in cm: distanza_cm = mySensor.distance(); Serial.print("la distanza e': "); Serial.print(distanza_cm); Serial.println(" cm"); delay(1000); }
![](https://www.quattrodispositivi.it/wp-content/uploads/2021/03/istruzione-funzione-1024x118.png)
L’istruzione riportata sopra e’ la funzione, presente nella libreria Sharp, che converte il segnale analogico prodotto dal sensore di distanza per poi applicare al valore letto la funzione di linearizzazione ed il risultato e’ la distanza espressa in centimetri.
![](https://www.quattrodispositivi.it/wp-content/uploads/2021/03/modello.png)
La funzione di linearizzazione e’ diversa in base al modello utilizzato e per questo motivo abbiamo inserito il modello secondo la codifica riportata sopra.