Skip to Content

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

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

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

Arduino Uno

USB Data Sync cable Arduino

Cable USB para Arduino UNO

Dupont wire set

Juego de cables Dupont

Half_breadboard56a

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.

How an IR distance sensor works light emitter and detector PSD
Sensor de distancia IR

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.

How an IR distance sensor works
Fíjate en el cambio del ángulo del haz reflejado y la posición del ‘punto óptico’ en el PSD.

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.

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

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.

SHARP GP2Y0A21YK0 with Arduino Wiring Diagram
Diagrama de conexiones del sensor de distancia IR GP2Y0A21YK0F con 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).

SHARP GP2Y0A21YK0F Pinout
Pinout del sensor de distancia IR SHARP GP2Y0A21YK0F

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.

Installing an Arduino library ZIP
Instalación de una librería Arduino en formato .ZIP.

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

SHARP GP2Y0A21YK0F serial monitor output
Salida del monitor serial

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.

Si tienes alguna pregunta, sugerencia o crees que falta algo en este tutorial, por favor deja un comentario abajo.