The SHARP GP2Y0A21YK0F is an easy to use IR distance sensor with a range of 10 – 80 cm. It is a great sensor to use for autonomous robots or non-contact optical switches.
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 is a participant in the Amazon Services LLC Associates Program, an affiliate advertising program designed to provide a means for sites to earn advertising fees by advertising and linking to products on Amazon.com. As an Amazon Associate we 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 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// 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.
Benne is professional Systems Engineer with a deep expertise in Arduino and a passion for DIY projects.
Syimyk
Saturday 4th of November 2023
Compilation error: no matching function for call to 'SharpIR::SharpIR(const uint8_t&, int, int, int)' can you help me please.
Stefan Maetschke
Saturday 4th of November 2023
As far as I can see the SharpIR library has no constructor with four parameters. You have to call this constructor: SharpIR (int irPin, long sensorModel). See examples at: https://github.com/guillaume-rico/SharpIR
Alexis
Thursday 6th of April 2023
Hi, great lots of information. I had a small problem when reading the values in the output monitor. They all show the same value no matter the distance and position. At first, I thought that it may be se sensor but I have tried with four of them having the same results.
Do you know where things could have gone wrong?
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