lunes, 21 de marzo de 2016

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

Buenas a todos Arduineros y Arduineras!!!

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 la 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 la ruta 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 (+5v)

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 receiverPin = 11; 

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


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

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

2 comentarios :