Cómo utilizar un sensor de distancia IR SHARP GP2Y0A21YK0F con Arduino

Cómo utilizar un sensor de distancia IR SHARP GP2Y0A21YK0F con Arduino

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:


Suministros

Componentes de hardware

GP2Y0A21YK0FSensor de distancia IR SHARP GP2Y0A21YK0F× 1Amazon
Arduino Uno Rev 3Arduino Uno Rev3× 1Amazon
Tablero de pruebas× 1Amazon
Cables de puente~ 10Amazon
condensadorCondensador (10 µF o más)× 1Amazon
Cable USB tipo A/B× 1Amazon

Software

Arduino IDEArduino IDE

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.

Cómo funciona un sensor de distancia IR emisor de luz y detector 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.

Cómo funciona un sensor de distancia IR
Obsérvese el cambio en el ángulo del haz reflejado y la posición del "punto óptico" en el PSD.

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.

GP2Y0A21YK0F Características de salida
Características de medición de la distancia (salida)

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 funcionamiento4,5 a 5,5 V
Corriente de trabajo30 mA
Rango de medición10 a 80 cm
Tipo de salidaAnalógico
Dimensiones29,5 x 13 x 13,5 mm
Agujeros de montaje2x 3,2 mm, 37 mm de distancia
CosteComprobar 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.

SHARP GP2Y0A21YK0 con diagrama de cableado de Arduino
Sensor de distancia IR GP2Y0A21YK0F con diagrama de cableado 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

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

SHARP GP2Y0A21YK0F Pinout
GP2Y0A21YK0F Pinout del sensor de distancia IR de SHARP

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.

Instalación de una biblioteca Arduino ZIP
Instalación de una biblioteca Arduino .ZIP.

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

Salida de monitor en serie SHARP GP2Y0A21YK0F
Salida de monitorización en serie

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.