Skip to Content

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

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

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:

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

Cómo funciona un sensor de distancia IR emisor de luz y detector PSD
IR Distance Sensor

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.

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