El SHARP GP2Y0A21YK0F es un sensor de distancia por infrarrojos fácil de usar con un alcance de 10 a 80 cm. Es un gran sensor para utilizar en robots autónomos o interruptores ópticos sin contacto.
En este tutorial, aprenderás cómo funciona el sensor y cómo utilizarlo con Arduino. He incluido un diagrama de cableado y un código de ejemplo para que puedas empezar a experimentar con tu sensor.
Si buscas un sensor de distancia más asequible o resistente al agua, 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 puedes utilizarlos con Arduino.
Otros sensores de distancia/proximidad:
- Cómo utilizar un sensor de distancia ultrasónico HC-SR04 con Arduino
- Sensor de distancia ultrasónico impermeable JSN-SR04T con tutorial de Arduino
- Cómo utilizar un sensor de distancia IR SHARP GP2Y0A710K0F con Arduino
Suministros
Componentes de hardware
Sensor de distancia IR SHARP GP2Y0A21YK0F | × 1 | Amazon | |
Arduino Uno Rev3 | × 1 | Amazon | |
Tablero de pruebas | × 1 | Amazon | |
Cables de puente | ~ 10 | Amazon | |
Condensador (10 µF o más) | × 1 | Amazon | |
Cable USB tipo A/B | × 1 | Amazon |
Software
Makerguides.com participa en el Programa de Asociados de Amazon Services LLC, un programa de publicidad de afiliados diseñado para proporcionar un medio para que los sitios ganen honorarios de publicidad mediante la publicidad y los enlaces a productos en Amazon.com.
¿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 la triangulación del haz de luz. El sensor consta de un LED IR y un detector de luz o PSD (Position Sensing Device). 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, el ángulo del rayo reflejado y la posición del punto en el PSD también cambian. Véase el punto A y el punto B en la siguiente imagen.

El sensor lleva incorporado un circuito de procesamiento de señales. 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 cambia en función de la distancia entre el sensor y un objeto. En la hoja de datos se puede ver que la tensión de salida del SHARP GP2Y0A21YK0F oscila entre 2,3 V cuando un objeto está a 10 cm de distancia y 0,4 V cuando un objeto está a 80 cm. El gráfico también muestra por qué el rango de detección utilizable comienza a 10 cm. Observe que la tensión de salida de un objeto que está a 2 cm es la misma que la de un objeto que está a 28 cm. El rango de detección utilizable, por lo tanto, comienza después del pico a aproximadamente 10 cm o 2,3 V.

El gráfico también muestra el inconveniente de estos sensores, la respuesta no es lineal. En otras palabras, un gran cambio en la tensión de salida no siempre se corresponde con un gran cambio en el alcance. Para determinar la distancia entre el sensor y un objeto, hay que encontrar una función que convierta la tensión de salida en un valor de alcance.
Esto se puede hacer con MS Excel y da como resultado la siguiente fórmula para distancias > 10cm:
Distancia (cm) = 29,988 X POW(Volt , -1,173)
Esta es la función que se utiliza en la biblioteca SharpIR, que utilizaremos más adelante. Tenga en cuenta que esta función se basa únicamente en los datos de la hoja de datos de SHARP. Las características de salida del sensor variarán ligeramente de un sensor a otro, por lo que podría obtener lecturas inexactas.
Si quiere mejorar la precisión de sus lecturas, puede intentar medir y trazar muchos puntos de datos en Excel y ajustar una curva a través de estos puntos. Una vez que tenga una nueva función para su sensor específico, tendrá que cambiar la fórmula utilizada en el archivo SharpIR.cpp.
Especificaciones del GP2Y0A21YK0F
Tensión de funcionamiento | 4,5 a 5,5 V |
Corriente de trabajo | 30 mA |
Rango de medición | 10 a 80 cm |
Tipo de salida | Analógico |
Dimensiones | 29,5 x 13 x 13,5 mm |
Agujeros de montaje | 2x 3,2 mm, 37 mm de distancia |
Coste | Comprobar el precio |
Para más información, puede consultar la hoja de datos aquí.
Cableado - Conexión del sensor IR GP2Y0A21YK0F a Arduino
El siguiente diagrama de cableado 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 cable positivo del condensador a la conexión del cable Vcc y el cable negativo a la conexión del cable GND (ver imagen). Los condensadores suelen estar marcados con una raya que indica el cable negativo. El cable 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 viene con cables de diferente color, asegúrate de comprobar el pinout de abajo. El pin Vo se conecta a la entrada analógica del Arduino (A0).

Ahora que has cableado el sensor es el momento de ver algún código de ejemplo.
Instalación de la biblioteca SharpIR Arduino
La librería SharpIR escrita por Guillaume Rico y Thibaut Mauon facilita el trabajo con los sensores IR de 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 biblioteca se puede descargar aquí en GitHub o hacer clic en el botón de abajo.
Puedes instalar la librería yendo a Sketch > Include Library > Add .ZIP Library en el IDE de Arduino.

El autor de la biblioteca se dio cuenta de que las lecturas del sensor pueden fluctuar bastante. La biblioteca resuelve este problema tomando varias lecturas seguidas, descartando los valores atípicos, y tomando la media para obtener una lectura de distancia más estable. En la actualidad, la biblioteca toma la media de 25 lecturas, lo que lleva aproximadamente 53 ms.
Código de ejemplo para el sensor de distancia IR SHARP GP2Y0A21YK0F con Arduino
El código de ejemplo siguiente puede utilizarse con el sensor GP2Y0A21YK0F y muestra la distancia medida en centímetros en el monitor de serie.
Puede copiar el código haciendo clic en el botón de 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 // Create 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() { // Begin 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); }
Observe que hemos llamado al sensor 'miSensor' en este ejemplo. Si quieres utilizar 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 utilizas un pin de entrada diferente para el segundo sensor.
Debería obtener la siguiente salida en el monitor de serie (Ctrl + Shift +M):

Conclusión
n este artículo te he mostrado cómo funciona el sensor de distancia IR SHARP GP2Y0A21YK0F y cómo puedes utilizarlo con Arduino. Espero que te haya resultado útil e informativo. Si lo has hecho, ¡compártelo con un amigo al que también le guste la electrónica!
Me encantaría saber qué proyectos planeas construir (o ya has construido) con este sensor de distancia IR. Si tienes alguna pregunta, sugerencia, o si crees que faltan cosas en este tutorial, por favor deja un comentario abajo.
Tenga en cuenta que los comentarios son retenidos por la moderación para evitar el spam.
Trevcharl
Miércoles 12 de octubre de 2022
Tengo un módulo de microondas, creo que puedo usar el sketch de IR para obtener distancias también, pero eso es algo que todavía tengo que hacer. El problema es si las microondas se reflejan en las paredes. Voy a introducir el sketch y el cable en el módulo de microondas y a ver qué pasa.
GABRIEL DZIK
Lunes 29 de marzo de 2021
Hola Gracias por la gran guía, ¿alguna posibilidad de que puedas explicar cómo has llegado a esta fórmula? Distancia (cm) = 29.988 X POW(Volt , -1.173) ¿especialmente de dónde sale el 29,988? Gracias
Cass
Viernes 22 de enero de 2021
Hola, ¿alguien sabe cómo podría cambiar los códigos para obtener el valor de la mediana de las 25 lecturas? Porque actualmente se encuentra la media
Joao
Martes 16 de junio de 2020
Hola,
En primer lugar, ¡gracias por compartir este increíble post!
¿Sería capaz de decir en qué medida la longitud del cable afecta negativamente al experimento? He buscado en la literatura y sólo he encontrado información sobre posibles interferencias de otros cables. Lo pregunto porque tengo previsto colocar un cable de 30-40cm entre la placa del arduino y el sensor.
Joao
Benne de Bakker
Miércoles 17 de junio de 2020
Hola Joao,
No creo que un cable de 30-40 cm sea un gran problema. Un consejo es que los mantengas alejados de los cables de alimentación que van a los motores, etc., que pueden causar interferencias. Si te preocupa esto, también puedes utilizar un cable apantallado y conectar un lado del apantallamiento a tierra.
Benne
Alexander Smith
Sábado 2 de mayo de 2020
También estoy recibiendo este código de error:
estado de salida 1 'distance_cm' no fue declarado en este ámbito
He descargado el archivo .ZIP de este mismo post que has hecho. ¿Algún arreglo? ¿Debo introducir algo en esta línea?
Benne de Bakker
Lunes 18 de mayo de 2020
Parece que la variable distance_cm no fue declarada antes de la sección de bucle del código. ¿Copiaste completamente el código de este artículo? En el ejemplo, la variable 'distance_cm' se crea en la línea 11.