Skip to Content

Come usare un sensore di distanza IR SHARP GP2Y0A21YK0F con Arduino

Come usare un sensore di distanza IR SHARP GP2Y0A21YK0F con Arduino

Il SHARP GP2Y0A21YK0F è un sensore di distanza a infrarossi facile da usare con un intervallo di 10 – 80 cm. È un ottimo sensore da utilizzare per robot autonomi o interruttori ottici senza contatto.

In questo tutorial imparerai come funziona il sensore e come usarlo con Arduino. Ho incluso uno schema di collegamento e un codice di esempio per iniziare a sperimentare con il tuo sensore.

Componenti necessari

Sensore di distanza GP2Y0A21YK0F

Arduino

Arduino Uno

USB Data Sync cable Arduino

Cavo USB per Arduino UNO

Dupont wire set

Set di fili Dupont

Half_breadboard56a

Breadboard

Condensatore( 10 µF)

Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.

Come funziona un sensore di distanza a infrarossi?

Un sensore di distanza a infrarossi utilizza un fascio di luce infrarossa che si riflette su un oggetto per misurarne la distanza. La distanza viene calcolata tramite triangolazione del fascio luminoso. Il sensore è composto da un LED IR e un rilevatore di luce o PSD (Position Sensing Device). Quando il fascio di luce viene riflesso da un oggetto, il fascio riflesso raggiunge il rilevatore di luce e si forma un ‘punto ottico’ sul PSD.

How an IR distance sensor works light emitter and detector PSD
Sensore di distanza IR

Quando la posizione dell’oggetto cambia, cambia anche l’angolo del fascio riflesso e la posizione del punto sul PSD. Vedi i punti A e B nell’immagine sottostante.

How an IR distance sensor works
Nota il cambiamento nell’angolo del fascio riflesso e nella posizione del ‘punto ottico’ sul PSD.

Il sensore ha un circuito di elaborazione del segnale integrato. Questo circuito elabora la posizione del punto ottico sul PSD per determinare la posizione (distanza) dell’oggetto riflettente. Fornisce un segnale analogico che dipende dalla posizione dell’oggetto davanti al sensore.

Come leggere un sensore di distanza IR?

I sensori di distanza IR forniscono un segnale analogico che varia in base alla distanza tra il sensore e un oggetto. Dal datasheet si vede che la tensione di uscita del SHARP GP2Y0A21YK0F varia da 2,3 V quando un oggetto è a 10 cm fino a 0,4 V quando un oggetto è a 80 cm. Il grafico mostra anche perché l’intervallo di rilevamento utile inizia a 10 cm. Nota che la tensione di uscita per un oggetto a 2 cm è la stessa di quella per un oggetto a 28 cm. L’intervallo di rilevamento utile quindi inizia dopo il picco a circa 10 cm o 2,3 V.

GP2Y0A21YK0F Output Characteristics
Caratteristiche di misura della distanza (uscita)

Il grafico mostra anche il limite di questi sensori: la risposta non è lineare. In altre parole, un grande cambiamento nella tensione di uscita non corrisponde sempre a un grande cambiamento nella distanza. Per determinare la distanza tra il sensore e un oggetto, è necessario trovare una funzione che converta la tensione di uscita in un valore di distanza.

Questo può essere fatto usando MS Excel e porta alla seguente formula per distanze > 10 cm:

Distanza (cm) = 29.988 X POW(Volt , -1.173)

Questa è la funzione usata nella libreria SharpIR, che useremo più avanti. Nota che questa funzione si basa solo sui dati del datasheet SHARP. Le caratteristiche di uscita del sensore possono variare leggermente da sensore a sensore, quindi potresti ottenere letture imprecise.

Se vuoi migliorare la precisione delle tue letture, puoi provare a misurare e tracciare molti punti dati in Excel e adattare una curva a questi punti. Una volta ottenuta una nuova funzione per il tuo sensore specifico, dovrai modificare la formula usata nel file SharpIR.cpp.

Specifiche del GP2Y0A21YK0F

Tensione di funzionamento 4,5 a 5,5 V
Corrente di funzionamento 30 mA
Intervallo di misura 10 a 80 cm
Tipo di uscita Analogica
Dimensioni 29,5 x 13 x 13,5 mm
Fori di montaggio 2x 3,2 mm, distanza 37 mm
Costo Check price

Per maggiori informazioni puoi consultare il datasheet qui.

Collegare il sensore IR GP2Y0A21YK0F ad Arduino

Lo schema di collegamento qui sotto mostra come collegare il sensore di distanza IR GP2Y0A21YK0F ad Arduino.

SHARP GP2Y0A21YK0 with Arduino Wiring Diagram
Schema di collegamento del sensore di distanza IR GP2Y0A21YK0F con Arduino.​

Questi tipi di sensori di distanza tendono a essere un po’ rumorosi, quindi si consiglia di aggiungere un condensatore tra Vcc e GND. Il datasheet suggerisce un condensatore da 10 µF o più (io ho usato 220 µF). Collega il terminale positivo del condensatore al filo Vcc e il terminale negativo al filo GND (vedi immagine). I condensatori sono spesso contrassegnati da una striscia che indica il terminale negativo. Il terminale positivo è spesso più lungo di quello negativo.

Collegamenti GP2Y0A21YK0F

GP2Y0A21YK0F Arduino
1 (Giallo) A0
2 (Nero) GND
3 (Rosso) 5V

Se il tuo sensore ha fili di colori diversi, assicurati di controllare il pinout qui sotto. Il pin Vo è collegato all’ingresso analogico di Arduino (A0).

SHARP GP2Y0A21YK0F Pinout
Pinout del sensore di distanza IR SHARP GP2Y0A21YK0F

Ora che hai collegato il sensore, è il momento di vedere un esempio di codice.

Installare la libreria SharpIR per Arduino

La  SharpIR  libreria scritta da Guillaume Rico e Thibaut Mauon rende molto più semplice lavorare con i sensori IR SHARP. Include le formule necessarie per convertire la tensione di uscita misurata in una distanza in centimetri. Attualmente, la libreria supporta i seguenti sensori: GP2Y0A02YK0F, GP2Y0A21YK0F, GP2Y0A710K0F e GP2YA41SK0F. L’ultima versione della libreria può essere scaricata da GitHub  o cliccando il pulsante qui sotto.

Puoi installare la libreria andando su Sketch > Include Library > Add .ZIP Library nell’IDE di Arduino.

Installing an Arduino library ZIP
Installare una libreria Arduino da file .ZIP.

L’autore della libreria ha notato che le letture del sensore possono variare molto. La libreria risolve questo problema prendendo più letture consecutive, scartando i valori anomali e calcolando la media per ottenere una lettura della distanza più stabile. Attualmente, la libreria calcola la media di 25 letture, che richiede circa 53 ms.

Codice di esempio per il sensore di distanza IR SHARP GP2Y0A21YK0F con Arduino

Il codice di esempio qui sotto può essere usato con il sensore GP2Y0A21YK0F e mostra la distanza misurata in centimetri nel monitor seriale.

Puoi copiare il codice cliccando il pulsante in alto a destra nel campo del codice.

/*SHARP GP2Y0A21YK0F IR distance sensor with 
  Arduino and SharpIR library example code. 
  More info: https://www.makerguides.com */

// Include the library:
#include "SharpIR.h"

// Define model and input pin:
#define IRPin A0
#define model 1080

// Variable to store the distance
int distance_cm;

/* Model :
  GP2Y0A02YK0F --> 20150
  GP2Y0A21YK0F --> 1080
  GP2Y0A710K0F --> 100500
  GP2YA41SK0F --> 430
*/

// Create a new instance of the SharpIR class:
SharpIR mySensor = SharpIR(IRPin, model);

void setup() {
  // Serial communication at a baudrate of 9600
  Serial.begin(9600);
}

void loop() {
  // Get a distance measurement and store it as distance_cm
  distance_cm = mySensor.distance();

  // Print the measured distance to the serial monitor
  Serial.print("Mean distance: ");
  Serial.print(distance_cm);
  Serial.println(" cm");

  delay(1000);
}

Nota che in questo esempio abbiamo chiamato il sensore mySensor. Se vuoi usare più sensori di distanza IR, puoi creare un altro oggetto sensore con un nome diverso:  SharpIR mySensor2 = SharpIR(IRPin2, model);  Nota che in questo caso devi anche usare un pin di ingresso diverso per il secondo sensore.

Dovresti ottenere il seguente output nel monitor seriale (Ctrl + Shift + M):

SHARP GP2Y0A21YK0F serial monitor output
Output del monitor seriale

Conclusione

In questo articolo ti ho mostrato come funziona il sensore di distanza IR SHARP GP2Y0A21YK0F e come usarlo con Arduino.

Se cerchi un sensore di distanza più economico o impermeabile, dai un’occhiata al HC-SR04 o al JSN-SR04T. Negli articoli seguenti spiego come funzionano questi sensori di distanza/prossimità e come usarli con Arduino.

Se hai domande, suggerimenti o pensi che manchi qualcosa in questo tutorial, lascia un commento qui sotto.