lunes, 21 de marzo de 2016

Arduino: leer códigos de mando a distancia (Read remote control)

Buenas a todos!!!
Hace un tiempo que quería hacer este ejemplo ya que considero que puede tener muchas posibilidades. Aunque en este ejemplo solo vamos a leer los códigos de un mando a distancia, lo bueno es que puede ser casi cualquier mando a distancia tanto de TV, DVD, etc. Con esto que podemos hacer, podemos por ejemplo encender luces conectadas a reles, subir y bajar unas persianas, abrir una puerta... en fin lo que se os pueda ocurrir.

Solo vamos a necesitar una librería llamada IRremote.h 

AVISO: esta librería me ha dado problemas ya que se supone que ya viene incluida en el IDE de Arduino, pero no se por que no funciono, leyendo en foros descrubrí que la mejor solución es reinstalar la librería. Para esto lo primero que tenemos que hacer es eliminar estos archivos que están alojados en libraries\RobotIRremote\IRremoteTools.cpp y libraries\RobotIRremote\IRremoteTools.h

Estos archivos están alojados en la carpeta de librerías de Arduino IDE que no es la misma que la carpeta donde se alojan las librerías que cargamos nosotros al añadir una librería.

>

Dicho esto, solo nos queda conectar el receptor de infrarojos en Arduino y comenzar a recibir datos de nuestro mando. Para conectarlo hay que mirar que tipo de IR tenemos, en nuestro caso es el VS1838B cuyo patillaje es: 1-OUT, 2-GND, 3-VSS.




A la hora de crear el ejemplo en Fritzing solo me deja este tipo de sensor IR que en lo único que se diferencia es en la posición de las conexiones.
Una vez tenemos esto empezamos con este sencillo programa:


#include "IRremote.h"

// Declarar Constantes
const int receiver = 11; // Declaramos que el pin de recepcion es el 11

// Declarar objetos
IRrecv irrecv(receiver);  // Creamos una instancia para 'irrecv'
decode_results results;   // Creamos una instancia para 'decode_results'


void setup(){   
  Serial.begin(115200);
  Serial.println("Lector de infrarojos Infotronikblog ");
  irrecv.enableIRIn(); //Activar el receptor
}

void loop(){   /*LOOP: se ejecuta constantemente */

  if (irrecv.decode(&results)){          // Cuando recibe una señal IR
    Serial.println(results.value, HEX);  // Imprime el código de cada botón
    irrecv.resume();                     // Recibe el siguiente valor
    delay(100);
  }
}




2 comentarios :