Controlar Arduino con control remoto de TV

En este proyecto, aprenderemos a controlar varios de nuestros proyectos de Arduino con un control remoto de TV.

Este proyecto es la continuación de una práctica anterior, realizaremos los mismos ejemplos pero modificados para que funcionen con un control remoto de TV. Recomiendo echar un vistazo a la anterior práctica desde este enlace.


Recordemos que la señal enviada por un 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, como Sony, Philips, NEC, Sharp, etc.

Utilizaremos en esta práctica el receptor infrarrojo 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 de TV (cualquier marca)
  • 10 LEDs de cualquier color
  • 10 resistencias de 220 ohms
  • 1 servomotor
  • Protoboard
  • Cables
  • Tarjeta Arduino
Para poder programar este receptor, utilizamos 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. La librería que descargamos tiene un ejemplo que nos permite probar controles remotos de distintas marcas, nos muestra el protocolo y también el código específico de cada tecla. El ejemplo se llama "IRrecvDumpV2" y lo abrimos como se ve en la siguiente captura de pantalla:


Probemos entonces con un control remoto marca Sony como el que se ve a continuación


A través del monitor serie, observamos qué código recibe el Arduino al presionar algunas teclas del control. Sólo se necesita conectar el receptor al Arduino para realizar la prueba


Los códigos que se obtuvieron de este control se pueden ver a continuación:

Tecla
1
2
3
4
5
6
7
8
9
Código
 0x10 
 0x810 
 0x410 
 0xC10 
 0x210 
 0xA10 
 0x610 
 0xE10 
 0x110 

Tecla
OK
Arriba
Abajo
 Izquierda 
 Derecha 
0
CC
Código
 0xA70 
 0x2F0 
 0xAF0 
0x2D0
0xCD0
 0x5CE9 
 0x910 
 0xAE9 

Nuestro segundo ejemplo consiste en controlar 10 LEDs de acuerdo a la señal que llega 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 acción qué realizar. El diagrama de conexiones es el siguiente:


 El funcionamiento se ve así:


El código de este ejemplo se puede descargar desde aquí: https://drive.google.com/open?id=1tu1FVVdEsO3vIiRBTg46OPOl9xhCoh5P

Nuestro tercer ejemplo consiste en controlar el movimiento de un servo por medio del control remoto. Resulta que si mantenemos presionada cualquier tecla del control, la señal que se recibe corresponde a 0xFFFFFFFF como se vio en el monitor serie, pero justo antes, llega la señal correspondiente a la tecla que se está presionando. Entonces, si queremos saber a qué tecla pertenece la señal 0xFFFFFFFF, debemos mirar la señal inmediatamente anterior recibida. Esto sirve para que se pueda mantener presionada una tecla y hacer girar el servo constantemente hacia la posición deseada.

En este ejemplo, también utilizamos un switch-case para que el programa decida qué acción realizar de acuerdo a la señal recibida. El esquema correspondiente a este ejemplo es el siguiente: 


El funcionamiento se ve así:


El código de este ejemplo se puede descargar desde aquí: https://drive.google.com/open?id=1EOpygKlARPGNj0sfajqw0pX_M-0k5KQj

Comentarios

Publicar un comentario