viernes, 17 de abril de 2015

IR Remote Control with Infrared Receiver

Utilizaremos el IR Remote Control, que es un Control remoto infrarrojo 


Y un Infrared Receiver, que es un Receptor infrarrojo

Cual podemos encontrar de mucho tipos y formas

Tenemos que tener en cuenta el significado de sus patas.
El que utilizaremos esta compuesto de la siguiente manera.

También deberemos descargar la librería correspondiente para poder utilizarlo

Les recomiendo ver el tuto -> Como agregar una nueva librería
Y si tienen el problema con el WProgram.h miren -> error wprogramh no such file



Atención: Si tienen problema con el <IRremote.h> Ver tutorial error-wprogramh

Ver Código
#include <IRremote.h>
int RECV_PIN = 11;
int led = 8;
IRrecv irrecv(RECV_PIN);
decode_results results;
 
void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
  pinMode(led, OUTPUT);
}
 
void loop()
{
  if (irrecv.decode(&results))
    {
     digitalWrite(led,HIGH);  //encender el led
     delay(500);              //espero 
     digitalWrite(led,LOW);   //apago el led
     Serial.println(results.value, HEX);
     irrecv.resume(); // Receive the next value
    }
}

Explicación
Es la librería que necesitamos para poder usar el Control Infrarrojo
#include <IRremote.h>

Es donde vamos a coloar la salida del receptor infrarrojo, en este caso el PIN digital 11
int RECV_PIN = 11;

Crea el objeto recibidor usando el nombre (en este caso) RECV_PIN
IRrecv irrecv(RECV_PIN);

decode_results es una clase que se encuentra en IRremote.h, lo que hacemos es instancearla creando un objeto llamado "results"
decode_results results;

Sirve para ver los resultados en el COMX (en mi caso el COM5)
Serial.begin(9600);

Comience el proceso de recepción. Esto permitirá a la interrupción del temporizador que consume una pequeña cantidad de CPU cada 50 mS.
irrecv.enableIRIn();

Intenta recibir un código de IR. Devuelve true si se ha recibido un código, o falso si no recibió nada todavía. Cuando se recibe un código, la información se almacena en "results".
if (irrecv.decode(&results))

Después de recibir, este deberá ser convocada para reiniciar el receptor y prepararla para recibir otro código.
irrecv.resume();

Salidas
Cada vez que apretamos los botones del control remoto tenemos las siguientes salidas.

Ya con esta información, como por ejemplo
El boton "1" representa un "FF30CF", entonces podes luego hacer una acción
Si (botton = FF30CF ) { acción } 
El código es mucho más complejo que eso, pero es solo para que se de en una idea, de que cada botón tiene un identificador que en este caso para el "1" es el FF30CF y no porque se ve raro representa un error, ni nada por el estilo.

Incluso lo interesante es que también probé con WatchOn de Samsung que se utiliza como control remoto del celular al televisor y funciona a la PERFECCIÓN.
Es decir, el receptor conectado a arduino me recibe señales del celular ya que justamente el celular transmite una señal infrarroja como el IR Remote Control.
En mi caso lo probé con un Samsung Galaxy S4.



Para finalizar este tutorial, quiero decir que hay que tener en cuenta dos bibliotecas una para enviar y otro para recibir

Recepción

IRrecv irrecv(receivePin)
Crea el objeto receptor, utilizando un nombre de su elección.
irrecv.enableIRIn()
Comienza el proceso de recepción. Esto permitirá a la interrupción del temporizador que consume una pequeña cantidad de CPU cada 50 mS.
irrecv.decode(&results)
Intenta recibir un código de IR. Devuelve true si se ha recibido un código, o falso si no recibió todavía. Cuando se recibe un código, la información se almacena en "resultados".
results.decode_typeSerá uno de los siguientes: NEC, SONY, RC5, RC6, o UNKNOWN. 
results.valueEl código IR actual (0 si el tipo es UNKNOWN
results.bitsEl número de bits utilizado por este código
results.rawbufUna serie de tiempos de pulso IR
results.rawlenEl número de elementos almacenados en la matriz
irrecv.resume()
Después de recibir, este deberá ser convocada para reiniciar el receptor y prepararla para recibir otro código.
irrecv.blink13(true)
Habilitar a parpadear el LED cuando durante la recepción. Porque no se puede ver la luz infrarroja, haciendo parpadear el LED puede ser útil mientras que la resolución de problemas, o simplemente para dar una respuesta visual.

Transmisión

IRsend irsend;
Crea el objeto de transmisión. Un número de pin fijo se usa siempre, dependiendo de que el temporizador de la biblioteca que se está utilizando.
irsend.sendNEC(IRcode, numBits);
Envia un código en formato NEC.
irsend.sendSony(IRcode, numBits);
Envia un código en formato Sony.
irsend.sendRC5(IRcode, numBits);
Envia un código en formato RC5.
irsend.sendRC6(IRcode, numBits);
Envia el código en RC6
irsend.sendRaw(rawbuf, rawlen, frequency);
Envia el código crudo. Normalmente se obtener los contenidos del rawbuf y rawlen utilizando el receptor muchas veces y promediando los resultados. Algunos ajustes pueden ser necesarios para un mejor rendimiento. La frecuencia resultante es la frecuencia de filtro de banda prevista en el receptor, donde 38 es la más utilizada.

1 comentario:

  1. Hola Soy nuevo con Arduino.

    realizo todos los pasos y de hecho el receptor recibe y muestra la señal pero esta es diferente,es decir presiono el botón power del control remoto y me entrega diferentes codigos para este mismo boton

    ResponderEliminar