El SHARP GP2Y0A21YK0F es un sensor de distancia IR fácil de usar con un rango de 10 a 80 cm. Es un sensor ideal para robots autónomos o interruptores ópticos sin contacto.
En este tutorial aprenderás cómo funciona el sensor y cómo usarlo con Arduino. He incluido un diagrama de conexiones y un código de ejemplo para que puedas empezar a experimentar con tu sensor.
Partes necesarias

Sensor de distancia GP2Y0A21YK0F

Arduino Uno

Cable USB para Arduino UNO

Juego de cables Dupont

Protoboard

Condensador( ≥ 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.
¿Cómo funciona un sensor de distancia IR?
Un sensor de distancia IR utiliza un haz de luz infrarroja que se refleja en un objeto para medir su distancia. La distancia se calcula mediante triangulación del haz de luz. El sensor consta de un LED IR y un detector de luz o PSD (Dispositivo de Detección de Posición). Cuando el haz de luz se refleja en un objeto, el haz reflejado llega al detector de luz y se forma un ‘punto óptico’ en el PSD.

Cuando la posición del objeto cambia, también cambia el ángulo del haz reflejado y la posición del punto en el PSD. Observa los puntos A y B en la imagen abajo.

El sensor tiene un circuito de procesamiento de señal integrado. Este circuito procesa la posición del punto óptico en el PSD para determinar la posición (distancia) del objeto reflectante. Emite una señal analógica que depende de la posición del objeto frente al sensor.
¿Cómo leer un sensor de distancia IR?
Los sensores de distancia IR emiten una señal analógica que varía según la distancia entre el sensor y un objeto. Según la hoja de datos, la tensión de salida del SHARP GP2Y0A21YK0F varía desde 2.3 V cuando un objeto está a 10 cm hasta 0.4 V cuando está a 80 cm. El gráfico también muestra por qué el rango útil de detección comienza en 10 cm. Observa que la tensión de salida para un objeto a 2 cm es la misma que para uno a 28 cm. Por lo tanto, el rango útil de detección comienza después del pico, aproximadamente a 10 cm o 2.3 V.

El gráfico también muestra la desventaja de estos sensores: la respuesta es no lineal. En otras palabras, un gran cambio en la tensión de salida no siempre corresponde a un gran cambio en la distancia. Para determinar la distancia entre el sensor y un objeto, necesitas encontrar una función que convierta la tensión de salida en un valor de distancia.
Esto se puede hacer usando MS Excel y resulta en la siguiente fórmula para distancias > 10 cm:
Distancia (cm) = 29.988 X POW(Volt , -1.173)
Esta es la función que se usa en la librería SharpIR, que usaremos más adelante. Ten en cuenta que esta función se basa solo en datos de la hoja de datos de SHARP. Las características de salida del sensor pueden variar ligeramente entre sensores, por lo que podrías obtener lecturas inexactas.
Si quieres mejorar la precisión de tus lecturas, puedes medir y graficar muchos puntos de datos en Excel y ajustar una curva a esos puntos. Una vez que tengas una nueva función para tu sensor específico, deberás cambiar la fórmula usada en el archivo SharpIR.cpp.
Especificaciones del GP2Y0A21YK0F
| Voltaje de operación | 4.5 a 5.5 V |
| Corriente de operación | 30 mA |
| Rango de medición | 10 a 80 cm |
| Tipo de salida | Analógica |
| Dimensiones | 29.5 x 13 x 13.5 mm |
| Orificios de montaje | 2x 3.2 mm, separación de 37 mm |
| Precio | Check price |
Para más información puedes consultar la hoja de datos aquí.
Conexión del sensor IR GP2Y0A21YK0F al Arduino
El diagrama de conexiones a continuación muestra cómo conectar el sensor de distancia IR GP2Y0A21YK0F a un Arduino.

Este tipo de sensores de distancia tienden a ser un poco ruidosos, por lo que se recomienda añadir un condensador entre Vcc y GND. La hoja de datos sugiere un condensador de 10 µF o más (yo usé 220 µF). Conecta el terminal positivo del condensador al cable Vcc y el terminal negativo al cable GND (ver imagen). Los condensadores suelen tener una franja que indica el terminal negativo. El terminal positivo suele ser más largo que el negativo.
Conexiones GP2Y0A21YK0F
| GP2Y0A21YK0F | Arduino |
|---|---|
| 1 (Amarillo) | A0 |
| 2 (Negro) | GND |
| 3 (Rojo) | 5V |
Si tu sensor tiene cables de colores diferentes, asegúrate de revisar el pinout a continuación. El pin Vo está conectado a la entrada analógica del Arduino (A0).

Ahora que has conectado el sensor, es momento de ver un código de ejemplo.
Instalación de la librería SharpIR para Arduino
La SharpIR librería escrita por Guillaume Rico y Thibaut Mauon facilita mucho el trabajo con sensores IR SHARP. Incluye las fórmulas necesarias para convertir la tensión de salida medida en una distancia en centímetros. Actualmente, la librería soporta los siguientes sensores: GP2Y0A02YK0F, GP2Y0A21YK0F, GP2Y0A710K0F y GP2YA41SK0F. La última versión de la librería se puede descargar en GitHub o haz clic en el botón abajo.
Puedes instalar la librería yendo a Sketch > Include Library > Add .ZIP Library en el IDE de Arduino.

El autor de la librería notó que las lecturas del sensor pueden fluctuar bastante. La librería soluciona este problema tomando múltiples lecturas seguidas, descartando valores atípicos y calculando la media para obtener una lectura de distancia más estable. Actualmente, la librería calcula la media de 25 lecturas, lo que toma aproximadamente 53 ms.
Código de ejemplo para el sensor de distancia IR SHARP GP2Y0A21YK0F con Arduino
El código de ejemplo a continuación puede usarse con el sensor GP2Y0A21YK0F y muestra la distancia medida en centímetros en el monitor serial.
Puedes copiar el código haciendo clic en el botón en la esquina superior derecha del campo de código.
/*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);
}
Ten en cuenta que hemos llamado al sensor mySensor en este ejemplo. Si quieres usar varios sensores de distancia IR, puedes crear otro objeto sensor con un nombre diferente: SharpIR mySensor2 = SharpIR(IRPin2, model); Ten en cuenta que en ese caso también debes usar un pin de entrada diferente para el segundo sensor.
Deberías obtener la siguiente salida en el monitor serial (Ctrl + Shift + M):

Conclusión
En este artículo te he mostrado cómo funciona el sensor de distancia IR SHARP GP2Y0A21YK0F y cómo usarlo con Arduino.
Si buscas un sensor de distancia más económico o impermeable, echa un vistazo al HC-SR04 o al JSN-SR04T. En los artículos siguientes explico cómo funcionan estos sensores de distancia/proximidad y cómo usarlos 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
Si tienes alguna pregunta, sugerencia o crees que falta algo en este tutorial, por favor deja un comentario abajo.

