5.-ONDAS: INFRARROJOS

 LOS INFRARROJOS

 ÍNDICE
0.- TEORÍA: LA RADIACIÓN INFRARROJA
1.- PRÁCTICA.



0.- TEORÍA: LA RADIACIÓN INFRARROJA



 

La radiación infrarroja, o radiación IR es un tipo de radiación electromagnética y térmica, de mayor longitud de onda que la luz visible, pero menor que la de las microondas. Consecuentemente, tiene menor frecuencia que la luz visible y mayor que las microondas. 


 La radiación infrarroja es emitida por cualquier cuerpo cuya temperatura sea mayor que 0 Kelvin, es decir, −273,15 grados Celsius (cero absoluto).





La materia, por su caracterización energética (véase cuerpo negro) emite radiación. En general, la longitud de onda donde un cuerpo emite el máximo de radiación es inversamente proporcional a la temperatura de éste (Ley de Wien). De esta forma la mayoría de los objetos a temperaturas cotidianas tienen su máximo de emisión en el infrarrojo. Los seres vivos, en especial los mamíferos, emiten una gran proporción de radiación en la parte del espectro infrarrojo, debido a su calor corporal.

La potencia emitida en forma de calor por un cuerpo humano, por ejemplo, se puede obtener a partir de la superficie de su piel (unos 2 metros cuadrados) y su temperatura corporal (unos 37 °C, es decir 310 K), por medio de la Ley de Stefan-Boltzmann, y resulta ser de alrededor de 100 vatios.


Esto está íntimamente relacionado con la llamada "sensación térmica", según la cual podemos sentir frío o calor independientemente de la temperatura ambiental, en función de la radiación que recibimos (por ejemplo del Sol u otros cuerpos calientes más cercanos): Si recibimos más de los 100 vatios que emitimos, tendremos calor, y si recibimos menos, tendremos frío. En ambos casos la temperatura de nuestro cuerpo es constante (37 °C) y la del aire que nos rodea también. Por lo tanto, la sensación térmica en aire quieto, sólo tiene que ver con la cantidad de radiación (por lo general infrarroja) que recibimos y su balance con la que emitimos constantemente como cuerpos calientes que somos. Si en cambio hay viento, la capa de aire en contacto con nuestra piel puede ser reemplazada por aire a otra temperatura, lo que también altera el equilibrio térmico y modifica la sensación térmica.

Los infrarrojos se utilizan en los equipos de visión nocturna cuando la cantidad de luz visible es insuficiente para ver los objetos. La radiación se recibe y después se refleja en una pantalla. Los objetos más calientes se convierten en los más luminosos.
Un uso muy común es el que hacen los mandos a distancia (ó telecomandos) que generalmente utilizan los infrarrojos en vez de ondas de radio ya que no interfieren con otras señales como las señales de televisión. Los infrarrojos también se utilizan para comunicar a corta distancia los ordenadores con sus periféricos.



LOS SENSORES DE INFRARROJOS
Un sensor de infrarrojos (IR) está compuesto básicamente por un LED que emite pulsos de luz infrarroja siguiendo un patrón determinado que permite al dispositivo conocer la función a realizar.


Para poder controlar nuestro Arduino mediante un mando a distancia y un sensor IR, deberemos conocer el protocolo interno de comunicación del mando.


sensor infrarrojos junto con mando compatible

Sensor IR – VS1838B
Tensión de alimentación     2.7 a 5.5 V
Frecuencia de trabajo     38 kHz
Consumo de corriente     0.4-1.5 mА
Decoded NEC     818E7
Material:     Plástico, aleación, Color: Negro, tono Plateado
Rango de detección     18 m
Ángulo de recepción     ± 45°



1. PRÁCTICA:
"SEÑAL DE INFRARROJOS POR EL PUERTO SERIE DE ARDUINO".

¿Cómo podemos distinguir en cada caso qué botón de nuestro mando estamos pulsando?

El mando emite una señal al dispositivo que lo controla, en este caso es un receptor de infrarrojos. Lo hace codificando una orden mediante un led infrarrojo que emite un haz de luz que debe ser leído por el dispositivo. Tendremos, por tanto, para cada botón del mando, una codificación distinta, de forma que podemos distinguir cada caso.


Para determinarlo, es necesario utilizar una nueva librería que deberemos incorporar al programa las librerías que el código referencia al inicio del programa.

Conexiones
Viendo el sensor de frente:
- patilla derecha conectada a 5V (el valor de la tensión puede variar entre 2,5 y 5,5V)
- patilla central conectada a tierra
- patilla izquierda, la que manda datos, con resistencia 220 a un pin digital.

Las conexiones de los elementos son las siguientes:


Utilizando cualquier mando y, monitorizando los valores que va adquiriendo cada botón mediante la opción Monitor Serial (del IDE).

Ahora que ya tenemos la lectura realizada, con el mismo mando procedemos a mostrar un breve ejemplo.

Con el pin11 recibimos la señal del IR que mostramos en hexadecimal en el puerto serie del IDE.

CODIGO EJEMPLO RECEPCIÓN SEÑAL CON LIBRERIA
 
#include <IRremote.h> int IR_PIN = 11;
IRrecv irrecv(IR_PIN);
decode_results results;
void setup(){
Serial.begin(9600);
irrecv.enableIRIn();
}
void loop() {
if (irrecv.decode(&results)) {
   Serial.println(results.value, HEX);
   irrecv.resume();
  } 

}
 
 


En este otro ejemplo, representaremos en el motinor serie el tipo de teclas pulsadas por el mando de infrarrojos.

CÓDIGO
 
#include <IRremote.h>
int IR_PIN = 11;
IRrecv irrecv(IR_PIN);
decode_results results;
#define CH1 0xFD00FF 
#define CH2 0xFD807F
#define CH3 0xFD40BF
#define OK 0xFDA857
void setup(){
 Serial.begin(9600);
 irrecv.enableIRIn(); 
}
void loop() {
 if (irrecv.decode(&results)) {
     if (results.value == CH1) {
    Serial.println("CH-1");
    delay(1000);
    }
   if (results.value == CH2) {
   Serial.println("CH-2"); 
   delay(1000);
   }
   if (results.value == CH3)  {
   Serial.println("CH-3");
   delay(1000);
   }
   if (results.value == OK)  {
   Serial.println("OK");
   delay(1000);
   }
   irrecv.resume(); 
  }
 } 



ACTIVIDADES:
1.- -Utilizando el mando de infrarrojos controla el encendido y apagado de un led.
Para el mando que hemos utilizado (el que se muestra en la primera foto), la lectura del ON/OFF se corresponde con el valor de 3125149440. Comprueba qué número es en tu mando.

CÓDIGO (habría que buscar primero las librerías):
#include <Arduino.h>
#include <NECIRrcv.h>
#define pinIr  8                               // pin that IR detector is connected to pin8
int pinLed = 13;                             //led de salida en pin13
static int aux = 1;
NECIRrcv ir(pinIr) ;
void setup() {
  pinMode(pinLed, OUTPUT);
  ir.begin() ;
}
void loop() {
  unsigned long ircode ;
  while (ir.available()) { 
    ircode = ir.read() ;
    if(ircode == 3125149440){  //en este mando es el botón on/off del mando
      if (aux == 0) {
        digitalWrite(pinLed, LOW);
        aux = 1;
      }
      else {
        digitalWrite(pinLed, HIGH);
        aux = 0;
      }
    } 
  }
}

2.- Utilizando el mando de infrarrojos controla el encendido de una RGB.


Para ello necesitaremos los siguientes componentes:
  •  Led RGB
  •  Sensor de infrarrojos + mando compatible
  •  4 resistencias 220Ω (una para cada color del led RGB y otra para el sensor de infrarrojos)
  •  Protoboard
  •  Cables




CÓDIGO(habría que tener primero la librería):

#include <WProgram.h>
#include <NECIRrcv.h>               //Libreria del protocolo NEC
#define  pinIr 8                            // Pin del receptor IR
NECIRrcv ir(IRPIN);

int pinRojo = 13;              //Pin del color rojo del led RGB
int  pinVerde = 12;          //Pin del color verde del led RGB
int  pinAzul = 11;           //Pin del color azul del led RGB

power = 4228087680;            //Codigo correspondiente al boton POWER del mando a distancia
botonRojo = 4161240960;     //Codigo correspondiente al boton 1 del mando a distancia
botonVerde = 4194664320;    //Codigo correspondiente al boton 2 del mando a distancia
botonAzul = 4177952640;     //Codigo correspondiente al boton 3 del mando a distancia

void setup()  {  
  Serial.begin(9600);                   //Iniciamos comunicacion serie
  ir.begin();                                 //Iniciamos la recepcion IR
  pinMode(pinRojo, OUTPUT);
  pinMode(pinVerde,OUTPUT);
  pinMode(pinAzul, OUTPUT);
}

void loop()  {
  unsigned long ircode;         //Variable que contendra el codigo decimal del boton pulsado
  while (ir.available()) {
      ircode = ir.read();                 //Leemos el codigo del boton pulsado
     if (ircode == power) {           //Si el boton de power... apagamos el led
       digitalWrite(rojo, LOW);
       digitalWrite(verde, LOW);
       digitalWrite(azul, LOW);
     }
     else if (ircode == butrojo) digitalWrite(rojo,HIGH);        //Si boton 1, encendemos color rojo
     else if (ircode == butverde) digitalWrite(verde,HIGH);   //Si boton 2, encendemos color verde
     else if (ircode == butazul) digitalWrite(azul,HIGH);      //Si boton 3, encendemos color azul
  }
}




3.- RECEPCIÓN CON IR 

Hace tiempo que vengo queriendo toquetear un poco las tecnologías inalámbricas, ya que nos permiten la transmisión de datos entre dos puntos sin necesidad de utilizar cables para conectarlos, lo que es una gran ventaja en muchos proyectos.
Hoy por hoy, hay muchos tipos de tecnología inalámbrica como wifi, bluetooth, radiofrecuencia, infrarrojos, gprs, gsm, etc. Yo me voy a centrar en los infrarrojos.
Esta tecnología conocida como IrDA (Infrared Data Association), es desarrollada por HP, IBM y SHARP allá por 1993 y está basada en rayos de luz que se mueven en el espectro infrarrojo.
(Invisible a los ojos humanos).
Se trata de mediante emisores y receptores (normalmente leds) de ondas infrarrojas, establecer comunicación desde un punto al otro. Es necesario que emisor y receptor se  “vean”, sin obstáculos de por medio.
Existen muchos protocolos de comunicación infrarroja, ya que este tipo de tecnología inalámbrica se ha utilizado en muchos dispositivos como portátiles, móviles,  PDA’s, y los que más conocemos y seguro todos tenemos en casa, los mandos de TV.
Yo voy a utilizar el protocolo NEC, protocolo que utilizan los mandos universales de TV.
Sigue leyendo!!
 


Para empezar, necesitamos de un receptor de infrarrojos. Yo en mi caso, destrozé un TV de 28” hace tiempo para reciclaje electrónico, y uno de los componentes reciclados fue un receptor TSOP 1238. (Datasheet) .
El TSOP1238 es un receptor de señales infrarrojas, con pre-amplificador de señal incluído que puede alimentarse desde 2,5V hasta 5,5V y su encapsulado de epoxy funciona como filtro IR.
Este receptor, está preparado para ser conectado a un microcontrolador (Arduino en mi caso) y es capaz de recibir señales a 38Khz, que para mi suerte, es la misma frecuencia que utiliza el protocolo NEC de los mandos universales de TV.
Para entender el protocolo NEC me he ayudado de esta web Wiki-Altium – NEC donde está muy bien explicado y básicamente copiaré el funcionamiento.
El protocolo NEC utiliza pulsos a distancia para la transmisión de un mensaje.
Cada ráfaga de pulsos tiene una duración de 562.5 μs a una frecuencia de 38Khz.
Para transmitir los bits correspondientes al mensaje, lo hace de la siguiente manera:
– 0 lógico: Envía un pulso de 562,5 μs, seguido de un espacio de 562,5 μs de duración,  con un tiempo de transmisión de 1,125 ms.
– 1 lógico: Envía un pulso de 562,5 μs seguido de un espacio de 1.6875 ms  de duración, con un tiempo de transmisión de 2,25 ms.
Al pulsar una tecla del mando, el mensaje se compone de la siguiente cadena de pulsos:
1) Una ráfaga de pulsos de 9 ms.
2) Un espacio 4,5 ms
3) La dirección para el dispositivo receptor (8 bits)
4) El inverso lógico de la dirección (8 bits)
5) El comando (8 bits)
6) El inverso lógico del comando (8 bits)
7) Un pulso de 562.5 μs para indicar el final de la transmisión del mensaje.
La siguiente imagen ilustra perfectamente el mensaje transmitido en la pulsación de una tecla de un mando a distancia para una dirección 00000000b y un comando 10110101b.

Para mi suerte, existe una librería para Arduino que se encarga de recibir esta señal y entregarnos un código hexadecimal a partir de los 4 bytes (32 bits) enviados por el mando para poder distinguir cada una de las teclas que hemos pulsado y así poder configurar las teclas del mando a nuestro antojo.
La librería en cuestión, se llama NECIRrcv y podemos descargarla de aquí:  NECIRrcv
Aparcamos la librería un momento y procedemos al montaje del circuito, utilizando el esquema que viene en el datasheet del receptor TSOP1238 para conectarlo al Arduino.
Donde vemos que el IR Receiver (TSOP1238) se conecta por su pin Vs a una resistencia (100Ω valen) y esta a 5V. El pin GND conectado a masa. Y el pin OUT, al microcontrolador, que en nuestro caso será el Arduino.
Listo el circuito y conectado al Arduino, el siguiente paso será recibir los códigos de los botones del mando que vayamos a utilizar en nuestro proyecto,  por lo que cargamos en el entorno de Arduino el ejemplo que viene en la librería NECIRrcv y lo ejecutamos.
Este ejemplo viene preparado para mostrar por el Serial Monitor los códigos correspondientes al botón que hayamos pulsado, como vemos en la siguiente imagen:

Códigos Hexadecimales
Ya utilizando estos códigos o su correspondiente en decimal (Al mostrarlos por el serial monitor quitamos el formateo en hexadecimal de modo que quede: Serial.println(ircode);) podemos controlar cualquier tipo de elemento conectado al Arduino con un mando de TV.
Yo sin complicarme mucho, conecté un led RGB al Arduino y con el mando a distancia podemos controlar el apagado y encendido de los distintos colores del led.
Está programado para controlar el led de la siguiente manera.
– Con el botón “Power” del mando apagamos el led.
– Con el botón “1” del mando encendemos el color ROJO.
– Con el botón “2” del mando encendemos el color VERDE.
– Con el botón “3” del mando encendemos el color AZUL.
El circuito:
Y con el circuito terminado, solo queda hacer las pruebas.
El código de este ejemplo lo dejo para descarga en los siguientes enlaces:
– Archivos librería protocolo NEC para Arduino: NECIRrcv
– Código ejemplo de control de un led RGB con mando a distancia: LedRGBIR.pde
Y una prueba de funcionamiento!