🎯 ¿A qué distancia está? Mídelo con un Sharp 2Y0A21 y Arduino

🎯 ¿A qué distancia está? Mídelo con un Sharp 2Y0A21 y Arduino

0 comments

Introducción

¿Cómo podemos medir la distancia de un objeto sin utilizar una cinta métrica ni colocar físicamente un sensor sobre él?

En esta práctica utilizaremos el sensor de distancia Sharp 2Y0A21, también conocido como GP2Y0A21YK, junto con un Arduino UNO.

Este sensor utiliza luz infrarroja para detectar objetos y entrega una señal analógica cuyo voltaje cambia dependiendo de la distancia del objeto.

Su rango de medición aproximado es de 10 a 80 cm, por lo que resulta muy útil para proyectos de robótica, detección de obstáculos y sistemas de medición de distancia.

Durante esta práctica aprenderemos a identificar sus conexiones, conectarlo correctamente al Arduino UNO, leer su señal analógica y convertir esa lectura en una distancia aproximada en centímetros.

¿Qué es el Sharp 2Y0A21?

El GP2Y0A21YK0F es un sensor óptico de distancia fabricado por Sharp. Internamente combina un emisor infrarrojo, un detector de posición y un circuito de procesamiento de señal.

El principio utilizado es la triangulación. El sensor emite luz infrarroja hacia el objeto y analiza la posición de la luz reflejada para estimar qué tan lejos se encuentra.

A diferencia de un sensor ultrasónico, este dispositivo no calcula la distancia midiendo el tiempo que tarda un sonido en regresar. En cambio, utiliza la posición de la luz reflejada.

Sensor de distancia infrarrojo Sharp 2Y0A21 (GP2Y0A21YK0F)

Sensor de distancia infrarrojo Sharp 2Y0A21 (GP2Y0A21YK0F).

Características principales

Característica Valor
Modelo GP2Y0A21YK / GP2Y0A21YK0F
Tipo de salida Analógica
Rango aproximado 10 – 80 cm
Alimentación 4.5 – 5.5 V
Voltaje de salida aproximado Entre 0.3 y 3.1 V (según la distancia)
Consumo típico Aproximadamente 30 mA
Frecuencia de actualización típica Aproximadamente 26 Hz

Los valores de alimentación, rango y salida corresponden a la documentación del GP2Y0A21 y a las especificaciones publicadas para el GP2Y0A21YK0F.

¿Cómo funciona?

El funcionamiento puede dividirse en varios pasos:

  1. El sensor emite luz infrarroja.
  2. La luz llega hasta el objeto que queremos detectar.
  3. Una parte de la luz se refleja hacia el sensor.
  4. El detector interno analiza la posición de la luz reflejada.
  5. El circuito interno procesa esta información.
  6. El sensor genera un voltaje analógico relacionado con la distancia.
  7. Arduino lee ese voltaje mediante una entrada analógica.

Por esta razón, el sensor no entrega directamente un número como "25 cm". Lo que entrega es un voltaje, y nuestro programa utiliza ese voltaje para calcular una distancia aproximada.

Material necesario

  • Arduino UNO.
  • Sensor Sharp 2Y0A21 / GP2Y0A21YK.
  • Cables Dupont.
  • Cable USB para Arduino UNO.
  • Un objeto para realizar las mediciones.
  • Regla o cinta métrica para comprobar las mediciones.

Tabla de conexiones

Sharp 2Y0A21 Arduino UNO Función
VCC 5V Alimentación
GND GND Tierra
Vo / OUT A0 Salida analógica

El sensor trabaja con una alimentación de aproximadamente 5 V, por lo que resulta adecuado para realizar esta práctica directamente con el Arduino UNO. La documentación especifica un rango de alimentación de 4.5 a 5.5 V.

Nota: en los cables que se venden normalmente con este sensor, el color suele ser rojo = VCC, negro = GND y amarillo (o blanco) = Vo, pero puede variar según el proveedor. Verifica la función de cada cable en tu sensor antes de conectarlo, ya que invertir la alimentación puede dañarlo.

Sensor Sharp 2Y0A21 conectado a la protoboard y al Arduino UNO

Conexión física del sensor Sharp 2Y0A21 a la protoboard y al Arduino UNO.

Otra vista del montaje físico de las conexiones del sensor Sharp 2Y0A21 con Arduino UNO

Otra vista del montaje físico de las conexiones.

Diagrama de conexión del sensor Sharp 2Y0A21 al Arduino UNO: VCC a 5V, GND a GND y Vo a A0

Diagrama de conexión del Sharp 2Y0A21 con Arduino UNO: VCC a 5V, GND a GND y Vo a A0.

⚠️ Recomendación para la alimentación

El sensor realiza mediciones mediante pulsos y puede presentar cambios momentáneos en su consumo. Por esta razón, la documentación recomienda colocar un capacitor de 10 µF o mayor entre VCC y GND cerca del sensor para ayudar a estabilizar la alimentación.

Para una primera prueba sencilla podemos comenzar sin modificar el circuito, pero para un montaje definitivo es recomendable considerar este capacitor.

¿Por qué usamos A0?

La señal del Sharp es analógica, por lo que necesitamos una entrada analógica del Arduino.

El Arduino UNO dispone de entradas analógicas identificadas como:

A0, A1, A2, A3, A4 y A5

En esta práctica utilizaremos:

Vo → A0

Arduino convierte el voltaje recibido en una lectura mediante su convertidor analógico-digital.

El código

Ahora podemos utilizar un programa sencillo para leer el sensor y mostrar la distancia aproximada en el Monitor Serial.

// ==========================================
// SENSOR DE DISTANCIA SHARP 2Y0A21
// ARDUINO UNO
// RANGO APROXIMADO: 10 - 80 cm
// ==========================================

const int pinSensor = A0;

void setup() {

  Serial.begin(9600);

  Serial.println("================================");
  Serial.println(" SENSOR SHARP 2Y0A21");
  Serial.println(" RANGO: 10 - 80 cm");
  Serial.println("================================");
}

void loop() {

  // Leer la salida analogica
  int lectura = analogRead(pinSensor);

  // Convertir la lectura ADC a voltaje
  float voltaje = lectura * (5.0 / 1023.0);

  // Calcular distancia aproximada (funcion potencia
  // ajustada a la curva del sensor).
  // Si la lectura es 0 no se calcula, para evitar errores.
  float distancia = 0;
  if (lectura > 0) {
    distancia = 29.988 * pow(voltaje, -1.173);
  }

  Serial.print("ADC: ");
  Serial.print(lectura);

  Serial.print(" | Voltaje: ");
  Serial.print(voltaje, 2);
  Serial.print(" V");

  // Comprobar si la medicion esta dentro
  // del rango aproximado del sensor
  if (lectura == 0 || distancia < 10 || distancia > 80) {

    Serial.println(" | Fuera de rango");

  } else {

    Serial.print(" | Distancia: ");
    Serial.print(distancia, 1);
    Serial.println(" cm");
  }

  delay(200);
}

¿Qué hace el programa?

Primero definimos el pin donde está conectada la salida del sensor:

const int pinSensor = A0;

Después iniciamos la comunicación con el Monitor Serial:

Serial.begin(9600);

En el loop() Arduino realiza continuamente una lectura:

int lectura = analogRead(pinSensor);

Esta lectura tiene un valor entre 0 y 1023 en el Arduino UNO.

Posteriormente convertimos ese valor a un voltaje:

float voltaje = lectura * (5.0 / 1023.0);

Finalmente utilizamos una aproximación matemática para obtener la distancia:

float distancia = 0;
if (lectura > 0) {
  distancia = 29.988 * pow(voltaje, -1.173);
}

El if evita calcular la distancia cuando la lectura es 0 (por ejemplo, si el sensor está desconectado), ya que con voltaje cero la fórmula no tiene sentido.

Esta fórmula debe considerarse una aproximación. La salida del sensor no es lineal respecto a la distancia: el voltaje baja rápidamente al alejarse del sensor y cada vez más lento a mayor distancia. Por eso se utiliza una función potencia ajustada a la curva del sensor. Antes de usarla en una aplicación real, compárala con una regla en varias distancias (sobre todo cerca de 10 cm y de 80 cm) y ajústala si es necesario; para mayor precisión conviene calibrar el sensor con mediciones conocidas.

Prueba en el Monitor Serial

Después de cargar el programa en el Arduino UNO, abrimos el Monitor Serial y seleccionamos:

9600 baudios

Monitor Serial mostrando la lectura ADC, el voltaje y la distancia aproximada del sensor Sharp 2Y0A21

Monitor Serial mostrando la lectura ADC, el voltaje y la distancia aproximada.

Los valores reales pueden variar dependiendo del objeto, su reflectividad, la alimentación y las condiciones de la medición.

Realizando la prueba

Para comprobar el funcionamiento podemos colocar un objeto frente al sensor y medir la distancia real utilizando una regla.

Por ejemplo:

Distancia real Lectura del sensor
15 cm 14.5 cm
20 cm 18.9 cm
30 cm 29.5 cm
40 cm 38.8 cm
50 cm 49.5 cm

Al mover el objeto hacia el sensor, la lectura analógica debe cambiar y, dentro del rango útil, la distancia calculada también debe cambiar.

¿Por qué la medición puede variar?

Es importante entender que el sensor no funciona como una regla electrónica perfecta.

La medición puede verse afectada por diferentes factores:

  • Color del objeto.
  • Reflectividad de la superficie.
  • Forma del objeto.
  • Ángulo respecto al sensor.
  • Distancia del objeto.
  • Alimentación eléctrica.
  • Ruido eléctrico.
  • Temperatura y condiciones de funcionamiento.

Por esta razón, si necesitamos mayor precisión podemos realizar varias lecturas y obtener un promedio o crear una tabla de calibración.

Importante: cuando el objeto está muy cerca del sensor (menos de unos 10 cm) el voltaje de salida deja de aumentar y vuelve a bajar, por lo que la lectura se confunde con la de un objeto lejano. Por eso el rango útil del sensor empieza en 10 cm. Si el objeto puede acercarse más, conviene colocar el sensor un poco atrás del borde donde quieres medir.

Mejora: promediar varias lecturas

La salida del sensor suele fluctuar ligeramente entre una lectura y otra. Una forma sencilla de estabilizar el resultado es tomar varias lecturas seguidas y calcular su promedio. Para ello, en el programa anterior reemplaza la línea int lectura = analogRead(pinSensor); por el siguiente bloque (no dejes las dos, porque la variable lectura quedaría declarada dos veces y el IDE marcará error):

// Promedio de 10 lecturas para reducir el ruido
long suma = 0;
for (int i = 0; i < 10; i++) {
  suma += analogRead(pinSensor);
  delay(5);
}
int lectura = suma / 10;

Si prefieres, este es el programa completo con el promedio ya integrado:

const int pinSensor = A0;

void setup() {
  Serial.begin(9600);
}

void loop() {

  // Promedio de 10 lecturas para reducir el ruido
  long suma = 0;
  for (int i = 0; i < 10; i++) {
    suma += analogRead(pinSensor);
    delay(5);
  }
  int lectura = suma / 10;

  float voltaje = lectura * (5.0 / 1023.0);

  float distancia = 0;
  if (lectura > 0) {
    distancia = 29.988 * pow(voltaje, -1.173);
  }

  if (lectura == 0 || distancia < 10 || distancia > 80) {
    Serial.println("Fuera de rango");
  } else {
    Serial.print("Distancia: ");
    Serial.print(distancia, 1);
    Serial.println(" cm");
  }

  delay(200);
}

Calibración del sensor

Una de las mejoras que podemos realizar posteriormente es calibrar el sensor.

El procedimiento consiste en colocar un objeto a diferentes distancias conocidas y registrar el valor entregado por el sensor.

Por ejemplo:

Distancia real     Lectura ADC
-----------------------------
10 cm              454
15 cm              359
20 cm              287
25 cm              227
30 cm              211
40 cm              149
50 cm              132

Con estos datos podemos construir una tabla o una fórmula de corrección para obtener mediciones más cercanas a la distancia real.

Ventajas del Sharp 2Y0A21

  • Medición sin contacto: no necesitamos tocar el objeto.
  • Salida analógica: permite obtener información sobre la distancia y no solamente detectar presencia.
  • Rango de 10 a 80 cm: adecuado para numerosos proyectos de robótica.
  • Respuesta relativamente rápida: la frecuencia típica de actualización es de aproximadamente 26 Hz.
  • Conexión sencilla: únicamente requiere alimentación, tierra y una entrada analógica.
  • Tamaño compacto: puede instalarse fácilmente en robots y prototipos.

Las especificaciones publicadas para el GP2Y0A21YK0F indican un rango de 10–80 cm, salida analógica, alimentación de 4.5–5.5 V y una actualización típica de aproximadamente 26 Hz.

Aplicaciones

Este sensor puede utilizarse en diferentes proyectos electrónicos y de robótica:

  • Robots móviles.
  • Detección de obstáculos.
  • Medición de distancia.
  • Sistemas de proximidad.
  • Control de movimiento.
  • Robots seguidores y exploradores.
  • Sistemas de automatización.
  • Proyectos educativos.
  • Control de velocidad de motores.
  • Interacción sin contacto.

De hecho, este tipo de sensor se ha utilizado en demostraciones de robótica para modificar el comportamiento de un motor dependiendo de la distancia detectada.

Sharp vs. sensor ultrasónico

Característica Sharp 2Y0A21 Ultrasónico
Principio Infrarrojo / triangulación Ondas ultrasónicas
Salida Analógica Normalmente digital
Contacto Sin contacto Sin contacto
Rango del modelo 10–80 cm Depende del modelo

Conclusión

En esta práctica aprendimos a utilizar el sensor de distancia Sharp 2Y0A21 / GP2Y0A21YK con un Arduino UNO.

Aprendimos que este sensor utiliza un sistema óptico basado en infrarrojos y triangulación para determinar la distancia de un objeto. A diferencia de un sensor digital de presencia, el Sharp entrega un voltaje analógico que cambia de acuerdo con la distancia detectada.

También aprendimos a realizar las conexiones básicas:

SHARP 2Y0A21       ARDUINO UNO

VCC  ────────────→ 5V
GND  ────────────→ GND
Vo   ────────────→ A0

Finalmente utilizamos Arduino para convertir la lectura analógica en un valor de distancia aproximado y visualizarlo en el Monitor Serial.

Este proyecto representa una base muy útil para desarrollar sistemas más avanzados. Por ejemplo, podemos utilizar el sensor para que un robot detecte obstáculos, controlar la velocidad de motores dependiendo de la distancia o incluso combinarlo con otros sensores para crear un sistema autónomo.

El siguiente paso recomendado sería realizar una calibración del sensor para mejorar la precisión de las mediciones y posteriormente implementar un promedio de lecturas para obtener una distancia más estable.

Productos relacionados

Estos son los productos utilizados en esta práctica y puedes consultarlos directamente en Tecneu:

Productos utilizados en esta práctica

Tarjeta de desarrollo Arduino UNO R3 DIP con cable USB

Arduino UNO

Placa de desarrollo utilizada para leer la señal analógica del sensor y realizar el cálculo de distancia.

Comprar Arduino UNO en Tecneu

Sensor de distancia infrarrojo Sharp 2Y0A21 de 10 a 80 cm

Sensor de distancia Sharp 2Y0A21

Sensor infrarrojo analógico utilizado para medir distancias aproximadas entre 10 y 80 cm.

Comprar Sharp 2Y0A21 en Tecneu

Comentarios 

No comments

Dejar un comentario
Tu correo no será publicado, los campos requeridos estan marcados con *
Artículos relacionados
Suscríbete
Suscríbete a nuestro boletín y recibe las últimas ofertas y novedades.