InicioTarjetas de DesarrolloArduinoDetección de Obstáculos por medio de los Módulos KY-032 y KY-033

Detección de Obstáculos por medio de los Módulos KY-032 y KY-033

En este tutorial aprenderemos a utilizar los sensores de obstáculos KY-032 y KY-033, que entregan una señal digital al detectar alguna barrera por medio del emisor y receptor infrarrojo.

Funcionamiento de los Módulos KY

Los sensores de obstáculos KY-032 y KY-033 tiene un transmisor y un receptor de infrarrojos, que forman el par de sensores. El LED del transmisor emite una cierta frecuencia de infrarrojos, que el LED del receptor detectará. El LED de recepción detectará parte de la señal y activará el pin de “señal” de encendido / apagado digital cuando se haya detectado una “distancia” de umbral específica.

Como se puede observar la versión de este sensor es de dos tipos: con 3 y 4 pines. La versión de 3 pines no tiene la capacidad de habilitarse / deshabilitarse. La versión de 4 pines tiene un pin de habilitación opcional.

En el caso del KY-032 cuenta con 2 potenciómetros: uno de estos es para ajustar la sensibilidad del sensor, que ayudará al ajuste de la distancia de detección de objetos. Normalmente, el otro potenciómetro que cambia la frecuencia de infrarrojos del transmisor, no se ajusta.

Ahora conociendo las características de cada módulo procederemos a revisar su funcionamiento, para esto requerimos de estos materiales:

Diagrama de Conexiones

Realizaremos la siguiente conexión tanto para el KY-033 y posteriormente para el KY-032, nótese que para el segundo, en el PIN EN no se conectara y se mantendrá el puente en el pin ENEABLE de la placa.

Programa en IDE Arduino

Este sencillo código nos ayudara a visualizar cómo funcionan los sensores y en determinado caso realizar ajustes en el potenciómetro para poder determinar a que distancia requerimos la detección del obstáculos.

int valor,KY=3;                         // Variables enteras, valor donde se almacenaran los datos de los KY´s

void setup() {
  Serial.begin(9600);                   // Velocidad de comunicación serial a 9600 baudios
  pinMode(KY,INPUT);                    // Se configura sensor KY como entrada 
  } 
  void loop()   { 
    valor=digitalRead(KY);              // Se lee el valor digital del KY y se asigna a valor 
    if(valor==1){                       // Sí el valor es igual a uno ... 
      Serial.println("Libre");          // No hay detección de obstáculo e imprime mensaje
      }
      else if(valor==0){                // De lo contrario, si el sensor arroja un cero en la entrada digital
        Serial.println("Obstáculo");    // Se detecta obstáculo e imprime mensaje
             
}
delay(500);        // esperara .5 segundos para realizar nuevamente el proceso
}

Primero observaremos cómo es el comportamiento del módulo KY-032, previamente se calibró para que tuviese una detección de obstáculo al máximo (aproximadamente 40 cm), como se puede observar en el video:

Ahora observaremos cómo es el comportamiento del módulo KY-033, que a diferencia del anterior su alcance para la detección de obstáculo es corto (aproximadamente 5 cm), como se puede visualizar en el video:

Observando como es que funcionan ambos sensores y calibrando la distancia de detección de objetos, realizaremos un sencillo contador de objetos. Con el mismo código que previamente realizamos solo agregaremos unas líneas adicionales de comando.

int valor,KY=3;                         // Variables enteras, valor donde se almacenaran los datos de los KY´s
int cuenta=0;                          // Variable que realizara el conteo de detección de objetos
int dato;                              // Variable que almacena el dato del conteo

void setup() {
  Serial.begin(9600);                   // Velocidad de comunicación serial a 9600 baudios
  pinMode(KY,INPUT);                    // Se configura sensor KY como entrada 
  } 
  void loop()   { 
    valor=digitalRead(KY);              // Se lee el valor digital del KY y se asigna a valor 
    if(valor==1){                       // Sí el valor es igual a uno ... 
      Serial.println("Libre");          // No hay detección de obstáculo
      }
      else if(valor==0){                // De lo contrario, si el sensor arroja un cero en la entrada digital
        Serial.println("Obstáculo");    // Se detecta obstáculo 
        dato=cuenta++;                  // y cada vez que sea detectado realizara un conteo de el # de veces 
       Serial.print("Veces Detectadas: "); //de detección de objetos
       Serial.println(dato);               //Se imprimirá el # de veces de detección de objetos      
}
delay(500);        // esperara .5 segundos para realizar nuevamente el proceso
}

El resultado de nuestro programa es el siguiente:

Te invitamos a que integres este sensor en tus proyectos, por ejemplo en un carro seguidor de líneas

TUTORIALES RELACIONADOS