Recibir información a través del receptor de infrarrojos
En la clase de hoy hemos trabajado con un nuevo componente, el receptor de infrarrojos. Este módulo tiene 3 pines, de los cuales 2 son para tierra (GND) y 5V (VCC), mientras que el otro es la salida digital de señal (S), que conectaremos a un pin digital de Arduino.
Este receptor (HX1838) se va a encargar de recibir la información mandada por un mando IR. Este mando es el que nos permite enviar información de forma inalámbrica a una placa de Arduino. La información emitida es digital y se agrupa en tramas de duración y número de bits fijados; es decir, cada botón del mando envía una serie distinta de códigos en el espectro infrarrojo, los cuales serán detectados e interpretados por el receptor. Para que esta comunicación sea posible se hace uso de protocolos de comunicación para determinar una codificación de la información. Por tanto, esta codificación deberá ser conocida tanto por el emisor como por el receptor.
Un protocolo muy conocido es el protocolo NEC, que es el que utiliza el mando IR incluido en Arduino. La onda portadora tiene un periodo de 26 microsegundos, mientras que cada pulso es de 560 microsegundos, algo más de 21 ciclos de la señal portadora. Para codificar los ceros y los unos se utiliza la diferencia en tiempo entre un pulso y el siguiente:
- Si llega 2.25 ms después, se considera un 1.
- Si llega 1.12 ms después, se considera un 0.
Una vez entendida gran parte de la teoría de cómo funciona este receptor de infrarrojos y a través de qué le vamos a poder enviar datos, vamos a ver el proyecto que montaremos hoy. Para el proyecto de hoy vamos a utilizar los siguientes componentes:
- Mando a distancia de infrarrojos
- Receptor de infrarrojos
- LED (en este caso utilizaremos uno rojo, pero el color es indiferente)
- Resistencia de 220 Ω (para el LED)
El objetivo del proyecto va a ser el siguiente: mediante el mando IR, deberemos ser capaces de encender y apagar el LED, y además poder controlar la potencia luminosa del LED entre 9 posibles niveles. Para poder controlar la potencia del LED deberemos conectarlo a un pin digital PWM, ya que es el que nos permitirá variar la potencia media mediante la función analogWrite().
Perfecto, pues antes de ir directos al código vamos a ver cómo podemos controlar este receptor y el mando IR a través del código.
Para usar el receptor con IRremote, lo primero que debemos hacer es importar una librería creada por: shirriff, z3t0 y ArminJo; esta se llama IRremote y se puede incluir de la siguiente manera:
| |
Por otro lado, tendremos que iniciar las comunicaciones con la siguiente instrucción en la función setup():
| |
Algunas funciones útiles de la librería IRremote son:
| |
Después de leer y guardar la información que nos interese, es obligatorio usar:
| |
Si no se llama a resume(), el receptor queda bloqueado y no podrá recibir otra señal.
Otra cosa a tener en cuenta, y esto lo puedo decir por experiencia, es que esta librería puede generar conflictos con ciertos temporizadores o pines PWM según la placa y la versión de la librería. Como recomendación, mejor utilizar otro pin PWM distinto al 3 como por ejemplo el 5.
Pues ahora ya sí que sí vamos con el código del proyecto:
| |
Versión mejorada: Mostramos el número en un visualizador de 7 segmentos
Para esta nueva versión mejorada lo que vamos a añadir es un visualizador de 7 segmentos y, manteniendo gran parte de la lógica de la versión anterior con la que podemos cambiar la potencia luminosa del LED, ahora vamos a mostrar los números del 1 al 9 dependiendo del botón pulsado en el mando. En esta versión no tenemos botón de encendido y apagado, sino que el número 1 deja el LED en el nivel mínimo y el 9 lo enciende a la máxima potencia. Por lo demás es igual.
El código es el siguiente:
| |