Sorteo

En esta publicación, aprenderemos cómo controlar nuestros proyectos de Arduino usando un mando (control remoto) y receptor infrarrojos

En muchos controles remotos hay un LED infrarrojo que sirve para enviar un rayo de luz (señal) a un dispositivo receptor, ya sea un TV, un DVD, un equipo de sonido, etc. Esta señal es invisible al ojo humano, puesto que su longitud de onda se encuentra en el rango del infrarrojo. El espectro electromagnético distribuye todas las ondas electromagnéticas de acuerdo a su energía (longitud de onda y frecuencia), la luz que podemos observar en nuestro diario vivir es sólo una pequeña fracción de ese espectro, como lo vemos en la siguiente gráfica:
 
 
La señal enviada por el control remoto corresponde a un tren de pulsos infrarrojos cada vez que se presiona una tecla. Los pulsos forman un patrón que es único para cada tecla del control, así el dispositivo receptor reconoce dicho patrón y responde a él. Sin embargo, estos trenes de pulsos se envían de forma modulada a través de una onda portadora con el fin de evitar ruido e interferencias. Aquí es donde nacen los protocolos, varios fabricantes han optado por desarrollar el suyo philips, NEC, Sharp, etc.
 
En el mercado encontramos receptores infrarrojos como lo es el KY-022, que además de ser un receptor compatible con muchos fabricantes, nos demodula y amplifica la señal recibida, ahorrándonos así un gran trabajo. La conexión con el Arduino es sencilla, el – va al GND del Arduino, VCC se conecta a 5V y el pin de señal (S) se conecta a algún pin digital.
 
 

Materiales

Receptor infrarrojo KY-022
Control remoto infrarrojo
10 LEDs de cualquier color
10 resistencias de 220 ohms
Protoboard
Cables
Tarjeta Arduino

Para poder programar el receptor, vamos a necesitar una librería que se puede descargar en este enlace. Al descargarla, extraemos el archivo .zip y la carpeta resultante la guardamos en la carpeta “libraries”, la cual se encuentra en el directorio donde está instalado el programa de Arduino.

Nuestro primer ejemplo consiste en probar el receptor y el control. Para esto, realizamos un código que lea la señal recibida y la muestre en forma hexadecimal en el monitor serie. Sólo se necesita conectar el receptor al Arduino para realizar la prueba

El código para este ejemplo se puede descargar desde aquí: 
 

#include <IRremote.h>
//Incluimos la libreria del infrarrojo

//Conectaremos el sensor infrarrojo a un pin DIGITAL del Arduino, en este caso sera el pin 2

IRrecv sensor(2); //Inicializamos el sensor infrarrojo, poniendo el pin digital 2 como parametro
decode_results lectura;
//Variable que va a almacenar la lectura del control infrarrojo

void setup()
{
Serial.begin(9600); //Inicializamos el puerto serial
sensor.enableIRIn();
//Habilitamos el sensor infrarrojo para que pueda recibir lecturas

void loop()
{
if (sensor.decode(&lectura)) //Si hay una lectura recibida

{

Serial.println(lectura.value, HEX); //Se muestra en el monitor serie la lectura recibida, en formato hexadecimal

sensor.resume(); //Prepara el sensor infrarrojos para que reciba nuevas lecturas

}

}

Al observar los datos captados por el receptor, vemos que cada tecla posee un código propio, los cuales vemos a continuación:
 
Tecla
1
2
3
4
5
6
7
8
9
Código
 FF6897 
 FF9867 
 FFB04F 
 FF30CF 
 FF18E7 
 FF7A85 
 FF10EF 
 FF38C7 
 FF5AA5 
Tecla
OK
Arriba
Abajo
 Izquierda 
 Derecha 
*
0
#
Código
 FF02FD 
 FF629D 
 FFA857 
FF22DD
FFC23D
 FF42BD 
 FF4AB5 
 FF52AD 

Con estos datos, ya estamos listos para realizar nuestro segundo ejemplo, el cual consiste en controlar 10 LEDs de acuerdo a la señal que llegue al receptor y posteriormente al Arduino. Esto se realizará teniendo en cuenta los códigos propios de cada tecla del control. El programa analiza la señal recibida y por medio de un switch-case decide qué acción realizar. El esquemático es el siguiente:

 
El código para este ejemplo es el siguiente: 

#include <IRremote.h> //Incluimos la libreria del infrarrojo

//Conectaremos el sensor infrarrojo a un pin DIGITAL del Arduino, en este caso sera el pin 2

IRrecv sensor(2); //Inicializamos el sensor infrarrojo, poniendo el pin digital 2 como parametro
decode_results lectura; //Variable que va a almacenar la lectura del control infrarrojo

//Variables para controlar el encendido/apagado de los LEDs
int encendido1, encendido2, encendido3, encendido4, encendido5,
encendido6, encendido7, encendido8, encendido9, encendido0;

void setup()
{
Serial.begin(9600); //Inicializamos el puerto serial
sensor.enableIRIn(); //Habilitamos el sensor infrarrojo para que pueda recibir lecturas

//Con un ciclo for, declaramos los pines 3 hasta el 12 como salidas
for (int i = 3; i <= 12; i++)
{
pinMode(i, OUTPUT);
}
}

void loop()
{
if (sensor.decode(&lectura)) //Si hay una lectura recibida
{
switch (lectura.value)
{
case 0xFF6897: //Corresponde al boton 1
if (encendido1 == 0)
{
digitalWrite(3, HIGH); //Si estaba apagado lo enciende
encendido1 = 1;
}
else
{
digitalWrite(3, LOW); //Si estaba encendido lo apaga
encendido1 = 0;
}
break;

case 0xFF9867: //Corresponde al boton 2
if (encendido2 == 0)
{
digitalWrite(4, HIGH); //Si estaba apagado lo enciende
encendido2 = 1;
}
else
{
digitalWrite(4, LOW); //Si estaba encendido lo apaga
encendido2 = 0;
}
break;

case 0xFFB04F: //Corresponde al boton 3
if (encendido3 == 0)
{
digitalWrite(5, HIGH); //Si estaba apagado lo enciende
encendido3 = 1;
}
else
{
digitalWrite(5, LOW); //Si estaba encendido lo apaga
encendido3 = 0;
}
break;

case 0xFF30CF: //Corresponde al boton 4
if (encendido4 == 0)
{
digitalWrite(6, HIGH); //Si estaba apagado lo enciende
encendido4 = 1;
}
else
{
digitalWrite(6, LOW); //Si estaba encendido lo apaga
encendido4 = 0;
}
break;

case 0xFF18E7: //Corresponde al boton 5
if (encendido5 == 0)
{
digitalWrite(7, HIGH); //Si estaba apagado lo enciende
encendido5 = 1;
}
else
{
digitalWrite(7, LOW); //Si estaba encendido lo apaga
encendido5 = 0;
}
break;

case 0xFF7A85: //Corresponde al boton 6
if (encendido6 == 0)
{
digitalWrite(8, HIGH); //Si estaba apagado lo enciende
encendido6 = 1;
}
else
{
digitalWrite(8, LOW); //Si estaba encendido lo apaga
encendido6 = 0;
}
break;

case 0xFF10EF: //Corresponde al boton 7
if (encendido7 == 0)
{
digitalWrite(9, HIGH); //Si estaba apagado lo enciende
encendido7 = 1;
}
else
{
digitalWrite(9, LOW); //Si estaba encendido lo apaga
encendido7 = 0;
}
break;

case 0xFF38C7: //Corresponde al boton 8
if (encendido8 == 0)
{
digitalWrite(10, HIGH); //Si estaba apagado lo enciende
encendido8 = 1;
}
else
{
digitalWrite(10, LOW); //Si estaba encendido lo apaga
encendido8 = 0;
}
break;

case 0xFF5AA5: //Corresponde al boton 9
if (encendido9 == 0)
{
digitalWrite(11, HIGH); //Si estaba apagado lo enciende
encendido9 = 1;
}
else
{
digitalWrite(11, LOW); //Si estaba encendido lo apaga
encendido9 = 0;
}
break;

case 0xFF4AB5: //Corresponde al boton 0
if (encendido0 == 0)
{
digitalWrite(12, HIGH); //Si estaba apagado lo enciende
encendido0 = 1;
}
else
{
digitalWrite(12, LOW); //Si estaba encendido lo apaga
encendido0 = 0;
}
break;

case 0xFF42BD: //Corresponde al boton * (Asterisco)

for (int i = 3; i <= 12; i++)
{
digitalWrite(i, HIGH); //Enciende todos los LEDs
encendido0 = 1;
encendido1 = 1;
encendido2 = 1;
encendido3 = 1;
encendido4 = 1;
encendido5 = 1;
encendido6 = 1;
encendido7 = 1;
encendido8 = 1;
encendido9 = 1;
}
break;

case 0xFF52AD: //Corresponde al boton # (Numeral)

for (int i = 3; i <= 12; i++)
{
digitalWrite(i, LOW); //Apaga todos los LEDs
encendido0 = 0;
encendido1 = 0;
encendido2 = 0;
encendido3 = 0;
encendido4 = 0;
encendido5 = 0;
encendido6 = 0;
encendido7 = 0;
encendido8 = 0;
encendido9 = 0;
}
break;
}
sensor.resume(); //Prepara el sensor infrarrojos para nuevas lecturas
}
}

Ahora surge la pregunta: ¿Es posible realizar todo lo anterior con un control remoto de los que tenemos en casa, como el de un TV? La respuesta es sí.  Hasta la vista


ElectroMercado

    0 Comentarios

    Contesta

    CONTACTANOS

    Esta es su red social de tecnología para compartir tus ideas y proyectos .Puedes enviarnos un correo si tienes dudas.Nos vemos

    Enviando

    Inicia Sesión con tu Usuario y Contraseña

    o    

    ¿Olvidó sus datos?

    Create Account