«

»

giu 25

Tutorial: SHARP 2D120X e Arduino

Il sensore: SHARP 2D120X ha un costo contenuto, sotto i 20 euro, ed è utilissimo per realizzare i tuoi primi robot.

Sensore SHARP 2D120X

Per mostrarti come utilizzare questo sensore ho deciso di acquistarne uno e fissarlo al tavolo, collegarlo ad arduino e costruirmi un sistema di squadrette che possano scorrere le une sulle altre.

sistema di squadrette

Giocando con questi 2 assi puoi realizzare delle misurazioni e comprendere meglio cosa rileva il sensore.

Caratteristiche del sensore

se prendi come riferimento il datasheet del costruttore: SHARP 2D120X questo sensore è in grado di rilevare da 4 a 30cm un oggetto.

Non è un sensore di precisione ed il suo funzionamento non è lineare come mostra il grafico di risposta estratto dal datasheet ufficiale:

risposta del sensore SHARP 2D120X

per questo motivo le distanze inferiori saranno più precise e più facili da rilevare rispetto alle distanze maggiori.

Come funziona

Questa tipologia di sensore funziona sul principio della riflessione, ossia un led a raggi infrarossi emette una luce ( impercettibile all’occhio umano e non dannosa) ed un ricevitore cattura il fascio dopo che questo si è riflesso contro l’ostacolo:

sensore a riflessione

la distanza è calcolata grazie all’angolo con cui il fascio di luce si infrange contro la parte ricevente del sensore, questo angolo viene trasformato dall’elettronica a bordo del sensore in una variazione in volt da 2.55 a 1.95 ossia a distanza inferiore corrisponde maggiore voltaggio erogato.

il piano per il test

Per costruirlo puoi bloccare il sensore con del nastro adesivo al tavolo:

Sensore SHARP GP2Y0A21YK

poi prepari una riga ed una squadretta in modo che scorrano una sull’altra, la riga la fermi lungo l’asse perpendicolare al sensore:

sistema di squadrette

e sulla squadretta poni un cartoncino scuro in modo che abbia un lato verticale difronte al sensore:

sistema di test del sensore sharp

sei pronto per eseguire il test.

Lo sketch

inizialmente ho pensato di darti io uno sketch semplice con cui leggere un segnale analogico, nel mio caso ho collegato al pin A5 il Vo del sensore; cercando in internet ho trovato la libreria scritta per i sensori Sharp, nella realtà è scritta per il sensore GP2Y0A21YK che opera da 10 a 80 cm ma l’ho testato anche con questo sensore riscontrando una certa precisione fino ai 9 cm, oltre la misura va ritarata.

All’interno del file zip c’è sia la liberia vera e propria sia alcuni sketch di esempio, io ho provato quello che stampa nel moritor seriale la distanza in cm tra l’oggetto ed il sensore:

#include <DistanceGP2Y0A21YK.h>

DistanceGP2Y0A21YK Dist;
int distance;

void setup()
{
  Serial.begin(9600);
  Dist.begin(A5);
}

void loop()
{
  distance = Dist.getDistanceCentimeter();
  Serial.print("\nDistance in centimers: ");
  Serial.print(distance);
  delay(500); //make it readable
}

Lo sketch è davvero semplice, sono solo 18 linee di codice:

linea 01: includi la libreria di interfaccia per il sensore;

linea 03: inizializza l’oggetto Dist come istanza della classe DistanceGP2Y0A21YK;

line 04: imposta una variabile di tipo integer distance;

La funzione setup() ti serve per definire la comunicazione seriale e per indicare all’oggetto Dist su quale pin restare in ascolto dal sensore;

linea 08: imposta la comunicazione seriale con una velocità di 9600 baud, ricordati di impostare il monitor seriale alla medesima velocità;

linea 09: indica all’oggetto Dist su quale pin è collegato il Vo del sensore, nei miei test io ho utilizzato il pin A5;

linea 14:leggi dal pin A5 il valore inviato dal sensore e assegnalo alla variabile distance mediante il metodo getDistanceCentimeter() che restituisce il valore convertito in centimetri;

linea 15: scrivi a video la frase “Distance in centimers: “;

linea 16: aggiunge in fondo alla linea appena stampata sul monitor seriale il valore letto alla linea 14;

line 17: attende un tempo di 500 millisecondi (1/2 secondo) prima di ricominciare il ciclo di loop().

Utilizzando questo sketch noterai che la corrispondenza tra la distanza dell’oggetto ed il valore impostato non è costante ossia leggerai sul monitor seriale:

distanza oggetto (cm) distanza letta su arduino
4 0
5 5
6 6
7 7
8 8
9,3 9
10,4 10
11,9 11
13,3 12
14,9 13
16,5 14
18,2 15
20 16
15,5 17

Questo ti indica che fino ai 10cm la classe risponde in modo lineare, successivamente si discosta dalla misura reale, la differenza è dovuta al fatto che i due sensori non sono identici e che gestiscono in modo differente l’output di tensione a parità di distanza, in particolare il sensore 2D120X presenta una curva di risposta distanza/Vo mostrata sopra mentre il sensore GP2Y0A21YK ha una curva di questo tipo:

risposta del sensore SHARP GP2Y0A21YK

Per utilizzare quella classe dovresti modificarla ad hoc, in alternativa proverò a realizzare una tabella di conversione ed uno sketch adatto a risolvere questa differenza.

Per adesso ti consiglio di utilizzare la classe indicata solo per distanze inferiori ai 10 cm.

Ecco un video interssante realizzato con questo sensore:

Buon divertimento.

Important!


Ti è stato utile questo articolo?
Sostienimi cliccando sugli sponsor, io potrò continuare ad acquistare materiale per scrivere articoli e aiutarti nei tuoi progetti.

Basta un solo click al giorno.

Be Sociable, Share!

4 comments

1 ping

  1. Thomas

    Ciao Mauro, volevo chiederti una precisazione, giusto per capire meglio il mio problema.

    Sto usando un sensore sharp GP2Y0A21YK per controllare i canali RGB di una striscia led, per il momento è programmato per gestirne uno solo, ma il primo problema evidente è che sia da una distanza elevata (80cm) che ravvicinata (10cm) il segnale sembra piuttosto instabile, cioè la luce “sfarfalla”.

    Questo secondo te dipende dalla non elevata precisione del sensore ?

    E se così fosse c’è un modo per correggerla ? magari nello sketch ?

    Grazie infinite

    1. Mauro Alfieri

      Ciao Thomas,
      se la luce sfarfalla non penso sia direttamente lagato al sensore, per stabilirlo con certezza dovrei conoscere che cosa vuoi ottenerecambiando la distanza dell’oggetto dinanzi al sensore.
      Lo sfarfallio mi sembra di natura elettrica, tuttavia se così non fosse certamente puoi intervenire introducendo il concetto di tolleranza tra i valori rilevati e ciò che fai inviare ai led.

      Cerca la parola tolleranza nel blog, ricordo di aver scritto qualche tutorial in cui spiego cosa sia e come utilizzarla.

      Mauro

  2. Luigi

    Ciao Mauro, ottimo tutorial. Ho delle domande: posso usare un GP2Y0A21YK IR Proximity Sensor con Arduino due considerando la limitazione dei 3,3 V per gli ingressi analogici ? e la libreria funziona con il nuovo IDE? grazie

    1. Mauro Alfieri

      Ciao Luigi,
      la libreria funziona con l’ide 1.0
      Per il segnale a 3,3v devi realizzare un partitore resistivo, trovi un tutorial sul blog.

      Mauro

  1. Rover5: il montaggio e il primo test - Mauro Alfieri

    [...] +5v ), GND ( polo negativo o massa ) e segnale analogico, come puoi aver letto dal datasheet e nel Tutorial: SHARP 2D120X e Arduino dedicato a questo [...]

Lascia un Commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati *

Puoi usare i seguenti tag HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>