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.

Prima di inserire un commento, per favore, leggi il regolamento

Permanent link to this article: https://www.mauroalfieri.it/elettronica/tutorial-sharp2d120x-e-arduino.html

19 pings

Skip to comment form

  1. […] +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 […]

  2. […] Qualche sensore come i sempre-verdi Sharp. […]

  3. […] Qualche sensore come i sempre-verdi Sharp. […]

Lascia un commento

Your email address will not be published.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.