Crea, comparte, aprende y disfruta
Control por Infrarrojos
Todos los días empleamos infrarrojos para controlar aparatos de nuestra vida cotidiana. Encender la televisión, poner música, ajustar la temperatura… son tareas que normalmente hacemos con un mando a distancia que emite un haz en en el espectro de infrarrojos para enviar las ordenes a los aparatos que controlan.
¿Qué son los infrarrojos?
Los infrarrojos son un tipo de radiación electromagnética ,igual que la luz o las microondas pero en un espectro que nuestros ojos no pueden ver.
Todo lo que nos rodea, incluidos nosotros mismos emite radiación infrarroja siempre y cuando su temperatura sea superior a -273ºC.
¿Cómo se usan para controlar aparatos?
Los rayos infrarrojos se usan para multitud de cosas, cómo calentar o cortar materiales. Pero a nosotros en este caso lo que nos interesa es su capacidad para enviar información.
Si hacemos un poco de memoria, no hace muchos años muchos teléfonos móviles tenían la opción de enviar ficheros de audio o imagen por infrarrojos. Cuando usamos un mando a distancia hacemos algo parecido, pero más sencillo. Enviamos una información que contiene la orden que deseamos ejecutar, cómo subir o bajar el volumen, cambiar de canal, encender, apagar..etc
Esto puede realizarse de muchas formas, nosotros mismos podemos crear nuestro propio protocolo y hacer funcionar nuestros circuitos diseñados por nosotros mismos. Por ejemplo podríamos decir que dos pulsos de 10milisegundos significa encenderse, tres pulsos de 15mS apagar, y así hasta completar el conjunto de instrucciones que deseemos.
A nivel industrial algunos fabricantes hacen esto mismo, crean sus propios protocolos (sus propias ordenes para enviar por infrarrojos) para controlar los dispositivos que fabrican. Sin embargo desde hace años existe la tendencia de usar protocolos comunes, esto permite al usuario utilizar mandos universales,por ejemplo. Uno de los protocolos para mas utilizados es el protocolo NEC.
El protocolo NEC
El protocolo NEC utiliza una serie de pulsos para transmitir el mensaje. Cada uno de estos pulsos tiene una duración de 562.5microSegundos y una frecuencia de 38kHz.
Un mensaje del protocolo NEC consta de varias partes, lo primero que hace es mandar un pulso de 9 ms(milisegundos). Espera 4.5ms y envía la dirección del dispositivo al que controla, así dicho dispositivo sabe que las ordenes que vendrán después son para él.
Después envía el inversor de la dirección, es decir, si la dirección era 11011001 lo siguiente que enviará será 00100110.
A continuación el comando o la orden asociado al botón que hemos pulsado (subir el volumen, cambiar el canal…etc). Al terminar la orden, envía el inversor de la orden. Igual que hizo con la dirección y por ultimo envía un pulso de 562.5microsegundos para indicar al dispositivo que se ha completado el mensaje.
Esta sería la estructura completa de un mensaje empleando el protocolo NEC, cómo vemos tiene varios elementos de seguridad que garantizan el buen funcionamiento (El encabezado con la dirección del dispositivo, el inversor de los mensajes enviados..etc)
Toda la información importante que se manda (dirección, orden e inversores) tiene un tamaño de 8 bits, por lo que son mensajes pequeños pero permiten una cantidad enorme de posibilidades, más allá de las que ,en principio, serían necesarias para cualquier mando a distancia.
Ejemplos de uso
Algunos de los mayores atractivos a la hora de usar los infrarrojos para controlar algo es su simpleza y lo económicos que son sus componentes.
Cómo emisor solo necesitaremos un led IR con su correspondiente resistencia y un microcontrolador que lo gobierne.
En cuanto a los receptores, existen varios tipos pero todos funcionan de la misma forma. Un encapsulado con tres patillas. Dos son de alimentación y una envía la información recibida.
Para poder ser más claros y precioso vamos a centradnos en uno de estos receptores, el TSOP4838 pero todos los modelos funcionan de forma similar.
Cómo se puede apreciar en la imagen, consta de tres patas:
Pin | Función |
---|---|
1 | Señal |
2 | GND |
3 | Alimentación Vcc |
Infrarrojos y Arduino
Lo que vamos a hacer con este circuito es leer las ordenes que envía un mando a distancia que usa el protocolo NEC. Mostraremos esta orden en nuestra consola de serial con un formato parecido a este 0xEE11BF00.
El montaje es muy sencillo, dejaremos nuestra placa de Arduino conectada al ordenador y abriremos la consola de serial con este botón ahora enfocaremos nuestro mando al sensor de Infrarrojo, al pulsar una tecla el código asociada a ella aparecerá en nuestro monitor de serial.
Este es el código que debemos cargar en Arduino:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | #include //Llamamos a librería del protocolo NEC #include //Pin del sensor #define sensor 2; //Creamos un objeto de la libreria NEC llamado ir para poder usarla. NECIRrcv ir(sensor); void setup{ //iniciamos la comunicación serial Serial.begin(9600); //iniciamos la recepcion ir.begin(); } void loop{ /*Almacenaremos el código del botón pulsado en una variable llamada código*/ unsigned long codigo; //Mostramos el código en pantalla. Serial.print("Código: "); Serial.println(codigo) ; } |
Ahora que sabemos cómo leer los códigos de nuestros mandos a distancia podemos utilizarlos para controlar Arduino con un mando a distancia, o cualquier otra cosa que se nos ocurra.
Por realizar un ejemplo sencillo que después podamos modificar para controlar lo que queramos vamos montar un circuito que encienda y apague un led desde un mando a distancia.
Lo primero será realizar el siguiente montaje:
Cómo podemos ver, solamente necesitamos un receptor de infrarrojos, un led con su correspondiente resitencia y una placa de Arduino
Vamos ahora con el software:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | #include #include int IRPIN = 2; //Pin al que tenemos conectado el sensor de infrarrojo int led = 12; //Pin al que tenemos conectado el led static int aux = 1; //variable de bandera para saber si el led esta encendido o no NECIRrcv ir(IRPIN) ; void setup(){ pinMode(led, OUTPUT); ir.begin() ; } void loop(){ unsigned long ircode ; while (ir.available()) { ircode = ir.read() ; if(ircode == 3125149440){ //Este código lo hemos obtenido con el montaje anterior if(aux == 0){ digitalWrite(led, LOW); aux = 1; } else{ digitalWrite(led, HIGH); aux = 0; } } } } |
Utilizaremos la librería NECIRrcv.h para leer lo que envía el mando a distancia , después comparamos esas ordenes con la orden que estamos buscando. Si coinciden, el led se enciende o se apaga dependiendo de la orden recibida.
Cómo siempre este es un ejemplo básico de algo con mucho potencial. Podríamos programar ordenes para cada botón del mando a distancia y el led podría ser un relé, un motor.. lo que nosotros queramos.
Deja una respuesta