RECEPTOR INFRARROJO

En esta práctica vamos a ver cómo leer la señal de un mando a distancia con un receptor IR. El objetivo será encender y apagar el LED 13 (integrado en la placa) utilizando 2 botones del mando.    

  1. ¿Qué es un receptor IR? 
  2. Circuito: Cómo conectar un receptor IR a Arduino
  3. Programación con Mblock
  4. Programación con Arduino IDE

1.  ¿Qué es un receptor IR TSOP?

Un TSOP es un módulo receptor de señal infrarroja capaz de realizar la lectura de señales emitidas por emisores como los que se encuentran en mandos a distancia.

Conectado a Arduino, podemos realizar la lectura de estas señales e interpretarlas, dando lugar a una acción determinada.

Existen kits que incluyen el módulo TSOP y un mando a distancia que podemos conectar y programar con Arduino.

Cada botón del mando envía una señal diferente al receptor, quedando cada botón identificado inequívocamente.

2. Circuito: Cómo conectar un puente en H a Arduino

Para realizar esta práctica necesitaremos el siguiente material

El módulo TSOP tiene 3 pines que conectaremos del siguiente modo

  • + Conectamos con el pin 5V de la placa Arduino
  • – Conectamos con el pin GND de la placa Arduino
  • S Conectamos con un pin PWM de la placa Arduino (ej pin 11)

¡Ya sólo nos queda programar! Para programar la placa Arduino puedes utilizar diferentes lenguajes. Nosotros nos vamos a centrar en dos opciones

  • MBlock – programación basada en bloques
  • Arduino IDE – programación basada en líneas de código

3.  Programación con Mblock

Este ejercicio cuenta con 2 fases. En la primera, tenemos que leer e identificar el código que envían los botones que vamos a utilizar. En la segunda, conocidos estos códigos, crearemos los condicionales necesarios para apagar y encender el led.

El primer paso es configurar la tarjeta, sigue los pasos que te indicamos en «Mblock: primeros pasos«  Una vez configurada la tarjeta comenzamos con la programación.

Para poder programar el mando a distancia, necesitamos instalar una extensión en Mblock. Descarga la extensión desde el siguiente enlace: Extensión IR Remote

A continuación arrastra el archivo de la extensión dentro del programa Mblock. Una vez instalada aparecerá una nueva sección de bloques llamada «Control IR». Cada vez que cierres el software la extensión desaparecerá y tendrás que volver a instalarla.

Para identificar los códigos de los botones que vamos a utilizar, hacemos un primer programa donde realizamos la lectura de un datos y lo enviamos al puerto serie para identificarlo.

Cuando trabajamos con esta extensión, no podemos utilizar el evento «Al hacer clic en la bandera». Debemos trabajar de forma autónoma.

En lugar de activar el botón «en vivo», debes pulsar el botón «cargar».

Una vez hecho esto, cuando accedas a los eventos verás un nuevo bloque disponible «Cuando Arduino Uno se inicia». Ese es el evento que utilizaremos cuando queramos trabajar con la placa en modo autónomo, como es en este caso.

Arrastra el bloque «Cuando Arduino Uno se inicia» al área de programación. Después, configura el receptor IR en el pin 11 e inicia la comunicación del puerto serie a 9600 baudios. Estos bloques los encontrarás en la nueva sección «Control IR».

Una vez configurado el receptor, introducimos un bucle infinito donde realizaremos la lectura de los códigos del mando. Si se ha recibido un dato, lo enviamos por el puerto serie para poder ver de qué código se trata.

Cargamos el programa en la placa pulsando el botón «conectar» y luego «subir».

Mblock, actualmente, no dispone de un monitor serie para ver los datos que se envían y se reciben, asique utilizaremos Arduino IDE para esta acción. Pulsa en el botón «desconectar» de Mblock y abre el software Arduino IDE. En el menú herramientas, selecciona la placa Arduino Uno y el puerto COM donde esté conectada.

Con la placa conectada al pc, pulsa de nuevo en el menú herramientas y selecciona «Monitor serie». Recuerda que es importante haber pulsado «desconectar» en mblock. Si no lo has hecho, Arduino IDE te indicará que el puerto COM esta ocupado y no podrá activar el monitor serie. Una vez abierto el monitor serie, aparecerá una pantalla como esta:

Fíjate bien que al pie de esta ventana a la izquierda tengas configurado el puerto a 9600 baudios.

Con la placa Arduino conectada al PC, coge el mando a distancia y, orientado al receptor,  pulsa el botón 1. Verás que en la ventana del puerto serie aparece un código. Pulsa el botón 2, y verás que aparece un código diferente. Estos códigos identifican a cada uno de los botones.

Ahora que conocemos el código que representa a cada botón, vamos a programar su comportamiento. Cierra el monitor serie y vuelve al programa Mblock.

Modificamos el código incluyendo dos condicionales que analicen el código recibido. Si el código se corresponde con el botón 1, encendemos el led 13, si se corresponde con el botón 2 apagamos el led.

Pulsa en el botón «subir» y el programa se cargará en la placa Arduino. Para comprobar su funcionamiento, coge el mando a distancia y orientado al TSOP, pulsa los botones 1 y 2. Verás como el led amarillo de la placa Arduino se enciende y apaga según el botón pulsado.

4.  Programación con Arduino IDE

Vamos a realizar el mismo programa, utilizando líneas de código con Arduino IDE El primer paso es configurar la tarjeta, sigue los pasos que te indicamos en «Arduino IDE: primeros pasos«. Una vez configurada la tarjeta comenzamos con la programación. Recuerda que al trabajar con código debemos respetar la sintaxis: Cuidado con las letras mayúsculas y minúsculas y con los signos de puntuación. ¡Son importantes!.

Utilizaremos la instrucción analogWrite para enviar la señal a los motores.

void setup(){
   pinMode(5, OUTPUT);
   pinMode(6, OUTPUT);
   pinMode(9, OUTPUT);
   pinMode(10, OUTPUT);
}

void loop(){

   analogWrite(5, 255);   // avanza
   analogWrite(9, 255);
   analogWrite(6, 0);
   analogWrite(10, 0);
   delay(1000);

   analogWrite(5, 0);   // retrocede
   analogWrite(9, 0);
   analogWrite(6, 255);
   analogWrite(10, 255);
   delay(1000);

   analogWrite(5, 255);   // gira
   analogWrite(9, 100);
   analogWrite(6, 0);
   analogWrite(10, 0);
   delay(1000);

   analogWrite(5, 100);   // gira
   analogWrite(9, 255);
   analogWrite(6, 0);
   analogWrite(10, 0);
   delay(1000);

   analogWrite(5, 0);   // para
   analogWrite(9, 0);
   analogWrite(6, 0);
   analogWrite(10, 0);
   delay(1000);
}


Pulsa en el icono subir, y comprueba el resultado.