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 Uno

Cavo USB per Arduino UNO

Set di fili Dupont

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.

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.

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.

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.

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).

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.

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):

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.
- How to use an HC-SR04 Ultrasonic Distance Sensor with Arduino
- Waterproof JSN-SR04T Ultrasonic Distance Sensor with Arduino Tutorial
- How to use a SHARP GP2Y0A710K0F IR Distance Sensor with Arduino
- TOF10120 Distance Sensor with Arduino
- VL53L1X/TOF400C Distance Sensor with Arduino
- VL53L0X Distance Sensor with Arduino
Se hai domande, suggerimenti o pensi che manchi qualcosa in questo tutorial, lascia un commento qui sotto.

