G041 Los Mandos de Infrarrojo

 ADM
Descripción
Las ondas electromagnéticas se caracterizan, principalmente, por su frecuencia o lo que es lo mismo, por el inverso de ésta que es el periodo, pero tambíen es la longitud de onda, ya que es la distancia que mide un periodo.

En el espectro electromagnético, partimos desde:
Campos Estaticos
Frecuencias: 0 Hz   Longitud de Onda: infinita 
Ejemplos: imanes permantes, el campo magnético de la tierra, en resonancias magnéticas.

Ondas de Radio
ELF (Extremely Low Frequency) Frecuencias extremadamente bajas
Frecuencias: 3 Hz a 30Hz   Longitud de Onda: entre 100.000 km y 10.000 km
Ejemplos: comunicación de submarinos, estudios geológicos y en investigación ionosférica.

SLF(Super Low Frequency) Frecuencias Super Baja
Frecuencias: 30Hz a los 300 Hz   Longitud de Onda: entre 10.000 km y 1.000 km
Ejemplos: redes electricas, la corriente alterna y  estudios geofísicos.

ULF (Ultra Low Frequency) o Frecuencia Ultra Baja
Frecuencias: 300Hz a los 3KHz   Longitud de Onda: entre 1.000 km y 100km
Ejemplos: minería, detección geológica y comunicación espacial

VLF (Very Low Frequency) Frecuencia Muy Baja
Frecuencias: 3 KHz - 30 KHz   Longitud de Onda: entre 100 km y 10 km 
Ejemplos: comunicación submarina, sistemas de navegación

LF (Low Frequency)
Frecuencias: 30 KHz - 300 KHz   Longitud de Onda: entre 10 km y 1 km
Ejemplos: radio navegación, radio marítima, radio de onda larga

MF (Medium Frequency) Frecuencia Media
Frecuencias: 300 KHZ - 3 MHz   Longitud de Onda: entre 1000 m y 100 m
Ejemplos: radio AM, comunicaciones márítimas

HF (High Frequency) Alta Frecuencia
Frecuencias: 3 MHz - 30 MHz   Longitud de Onda: entre 100 m y 10 m
Ejemplos: comunicaciones de aviación, radio aficionados, comunicaciones transoceánicas.

VHF (Very High Frequency) Muy Alta Frecuencia
Frecuencias: 30 MHz - 300 MHz   Longitud de Onda: entre 10 m y 1 m
Ejemplos: radio FM, comunicaciones aeronauticas y televisión antigua

UHF (Ultra High Frequency) Frecuencia Ultra Alta
Frecuencias: 300 MHz y 3 GHz   Longitud de Onda: entre 1 m y  10 cm
Ejemplos: Telefonía Movil, Wifi, GPS, TDT 

Microondas
SHF (Super High Frequency) Frecuencia Super Alta
Frecuencias: 3 GHZ - 30 GHz   Longitud de Onda: entre 10cm y 1cm
Ejemplos: Radar, Satélites, Wifi 5G, Telefonía 5G 

EHF (Extremely High Frequency) Frecuencias Extremadamente Alta
Frecuencias: 30 GHz - 300 GHz   Longitud de Onda: entre 1cm y 1mm
Ejemplos: radioastronomía, escaner de seguridad, horno microondas

Luz
Infrarrojo Lejano
Frecuencias: 300 GHz - 20 THz   Longitud de Onda: entre 1mm y 15 μm
Ejemplos: sensores termicos, astronomía

Infrarrojo Medio
Frencuencias: 20 THz - 100 THz   Longitud de Onda: entre 15 μm y 3 μm
Ejemplos cámaras termicas y espectrocopia

Infrarrojo Cercano
Frecuencias: 100 THz - 400 THz   Longitud de Ondas: entre 3 μm y 750 nm
Ejemplos: mandos a distancia, fibra óptica

Luz Visible Color Rojo
Frecuencias: 400 THz - 484 THz   Longitud de Ondas: entre 750 nm y 620 nm
Ejemplos: Tonos del Rojo profundo al rojo Anaranjado.

Luz Visible Color Naraja
Frecuencias: 484 THz - 508 THz   Longitud de Ondas: entre 620 nm y 590 nm
Ejemplos: Tonos del naranja rojizo al naranja amarillento

Luz Visible Color Amarillo
Frecuencias: 508 THz - 526 THz   Longitud de Ondas: entre 590 nm y 570 nm
Ejemplos: Tonos del Amarillo anaranjado al amarillo verdoso

Luz Visible Color Verde
Frecuencias: 526 THz - 606 THz   Longitud de Ondas: entre 570 nm y 495 nm
Ejemplos: Tonos del Verde amarillento al verde azulado

Luz Visible Color Azul
Frecuencias:606 THz - 667 THz   Longitud de Ondas: entre 495 nm y 450 nm
Ejemplos: Tonos del Azul verdoso al azul violáceo, pasando por el cyan.

Luz Visible Color Violeta
Frecuencias: 667 THz - 789THz   Longitud de Ondas: entre 450 nm y 380 nm
Ejemplos: Tonos del violeta azulado al violeta profundo

Ejemplos de la luz visible: fotografía, laser, el ojo humano, microscopio, espejos, optica...

UVA Ultravioleta cercano
Frecuencias: 750 THz -  950 THz   Longitud de Onda: entre 450 nm y 315 nm
Ejemplos: luz negra, luz forense, curado de resinas

UVB Ultravioleta medio
Frecuencias: 950 THz - 1,97 PHZ   Longitud de Ondas: entre 315 nm y 280 nm
Ejemplos: Producción de vitamina D, Bronceado y Quemaduras solares

UVC Ultravioleta lejano
Frecuencias: 1,97 PHZ -  3 PHZ   Longitud de Ondas: entre 280 nm y 100 nm
Ejemplos: Esterilización, Desinfección

EUV Ultravioleta extremo
Frecuencias: 3 PHz - 30 PHz   Longitud de Ondas: entre 100nm y 10 nm
Ejemplos: Litografía para microchips, Astronomía espacial

Rayos X Blandos
Frecuencias: 30 PHz - 3EHz   Longitud de Ondas: 10 nm y 100 pm
Ejemplos: radiografías, microscopia de rayos X

Rayos X Duros
Frecuencias: 3 EHz - 30 EHz   Longitud de Onda: entre 100 pm y 10 pm
Ejemplos: radiografía industrial, cristalografía

Rayos Gamma de Baja Energía
Frecuencias: 30 EHz - 300 EHz   Longitud de Onda: entre 10 pm y 1pm
Ejemplos: Medicína Nuclear y PET

Rayos Gamma de Alta Energía
Frecuencia: 300 EHz - sin límite conocido   Longitud de Onda: entre 1pm y sin límite conocido
Ejemplos: Agujeros negros, supernovas, púlsares, decaimiento radioactivo, investigación nuclear.


La capacidad energética de la radiación crece rápidamente con la frecuencia y por eso los rayos X y los gamma son muy dañinos para los seres vivos.

Una manera de describir los infrarrojos, seria como una luz con un color diferente, que no vemos, pero luz a pesar de todo.

Una curiosidad no muy conocida, es que seguramente la cámara de tu teléfono móvil, o tableta es capaz de ver, y mostrarte, la radiación IR de tus mandos a distancia. 

La luz infrarroja es adecuada para hacer mandos a distancia porque:

Utilizan luz en una frecuencia que no tienen consecuencias en los tejidos vivos. Menos impacto que la luz visible.

Como solemos ver la tele a oscuras, no se ve cuando usamos el mando.

Tiene relativamente poco alcance, pero no solemos ver la tele o tener la cadena de música más allá de 2 o 3 metros.
 
Así que es práctico, sencillo y barato, aunque tienen también inconvenientes.

El principal es que cualquier cosa con una cierta temperatura, incluidos nosotros, emitimos radiación infrarroja. Es por eso que las cámaras IR que veis en las pelis, pueden mostrar nítidamente en plena oscuridad a una persona o animal.   
Y esto podría interferir con el mando a distancia IR, lo mismo que cosas como la calefacción, el sol y demás cosas calientes. 

Así que la solución para evitarlo es modular la señal con una portadora.
La idea básica es mandar un tren de ondas estable (La portadora) y mezclarlo con la información  que queremos enviar (La señal). Este mismo principio se usa con la radio y casi con cualquier señal radioeléctrica que se envié por el aire.

He encontrado este Gif en la página de sbprojects y me ha parecido ideal para mostrar el proceso de modulación y transmisión.
 


El emisor es un sencillo transistor que gobiernan un LED infrarrojo muy similar a los LEDs rojitos normales que hemos usado hasta ahora, solo que diseñados para emitir luz en un color que no vemos.

Un pequeño procesador en el mando gobierna, la generación de la señal y la mezcla con la portadora, para garantizar que nuestra tele no recibe órdenes de otras fuentes

El proceso de mezclar una señal con la portadora se le llama modular.

El inverso, extraer la señal de una onda RF y obtener la señal limpia se llama demodular.
 
El receptor tiene un poco más de complejidad porque, las normas de emisión de IR para mandos a distancia, aparecieron
 que cada fabricante presento su propia norma.

Al final la industria acabo diseñando unos receptores capaces de recibir y demodular casi cualquier cosa, valen muy poco y son un prodigio tecnológico.

Un receptor IR típico actual, incluye el receptor, amplificador demodulador y lo que se te ocurra encapsulado y listo para usarse. No os imagináis la cantidad de electrónica que va incluido esta piececita de aspecto inocente.
 
Receptores de IR

Un típico receptor de infrarrojos, es el AX-1838HS, que se consigue por poco más de unos euros. 
En su hoja de normas encontráis este diagrama, y son relativamente fáciles de encontrar, en dos formas. Independientes y montados en un soporte para utilizar sin complicaciones con Arduino.
  


Materiales 
Placa de Arduino
1 Receptor de Infrarrojos AX-1838HS
4 Diodos LEDs de 5mm
4 Resistencias de 330
1 Mando IR 
Protoboard, cables para conexiónes y un cable USB para conectar arduino al PC y sirve ademas de alimentación

Esquema


El esquema de conexión nuevamente es trivial, pues el AX-1838HS solo tiene 3 pines: Vcc, GND y señal. Como vamos a usar una interrupción para leer la señal es imprescindible, que llevéis el pin de señal a el pin2 de Arduino (La interrupción 0) o al pin3 (La interrupción 1).
Yo lo voy a conectar al pin 2 y así lo reflejan los programas y los ejemplos. 

Montaje


Código
Recuerda que necesitas descargar e instalar una librería "IRLremote"
Vamos a empezar con un código recomendado para reconocer el mando a distancia que se usa. 
#include <IRLremote.h>

CHashIR IRL;

void setup()
{
  Serial.begin(115200);
  Serial.println("Startup");

  IRL.begin(2);
}

void loop()
{
  if (IRL.available())
  {
    auto data = IRL.read();

    Serial.println("----- IR RECEIVED -----");

    Serial.print("Address: 0x");
    Serial.println(data.address, HEX);

    Serial.print("Command: 0x");
    Serial.println(data.command, HEX);

    Serial.println("----------------------");
  }
}

Este programa, simplemente tratará de leer tu mando a distancia y enviar esa información a la consola. Asegúrate de que has puesto la velocidad a 115200:
 
Como veréis la rutina de servicio de la interrupción simplemente recoge los valores del protocolo que amablemente reconoce  sobre la marcha la librería. Los valores que presenta son

Address, dirección de tu mando. Cada mando lleva una dirección para identificarle. Podrías usar más de un mando a distancia para controlar lo que sea, y reconocerlos de forma diferenciada.
 
La orden o identificación del botón pulsado en el mando. Cada botón tiene un código diferente y estos son los códigos que usaras en tu programa para lanzar acciones diferentes en función del botón pulsado.

Yo he probado con 2 mandos IR diferentes y me ha reconocido correctamente los 2 a la primera. Son los de Samsung y Keyes.

Conviene comentar que si tienes una tele, o VHS o similares que ya no usas, puedes tirar el aparto si quieres pero conserva el mando porque hay muchas probabilidades de que puedas leerlo con tu Arduino.

Además tus antiguos cacharros con mando a distancia incluyen esto receptores de IR que puedes desarmar y reutilizar para tus cosas. 
 
Y en este programa está ya implícito todo lo necesario para utilizar un mando IR en tus proyectos. 

El resto de la sesión será sencillamente un ejemplo de cómo gestionar esos golpes de teclas con un Switch que es una instrucción C++ que hasta ahora no habíamos usado 
 
Al principio de esta sesión vimos que ya recibíamos las instrucciones del mando dirección del mando y Commando que corresponde al botón pulsado. Estos comandos son lo que se necesitan para diparar el programa.

Si tienes más de un mando y quieres usarlos, tendras que controlar también la dirección de cada mando.
 
En primer lugar correr el programa anterior para anotar los códigos que corresponden a cada tecla de vuestro mando, y haceros una tabla. No hace falta que anoteis todas las teclas por ahora, pero si al menos las que vayamos a usar.

En mi mando samsug el resultado es este:
Arriba
Adress        0X42      
Command   0XC9801E32
Abajo
Adress        0X2      
Command   0XA64EB032

Izquierda
Adress        0X2      
Command   0XC5782232

Derecha
Adress        0X2      
Command   0X7641B32

OK
Adress        0X2      
Command   0X4F6E4B32

Y con esto ya podemos escribir el programa de control. Vamos a utilizar la instrucción switch case, que es muy comoda cuando tienes que comprobar muchos valores y tomar acciones en respuesta a una variable. LA idea básica es como esto:
switch (IRCommand){  
  case 0XC9801E32:
    Serial.println("Arriba");
    digitalWrite(8, HIGH);
    break;
  case 0XA64EB032:
    Serial.println("Abajo");
    digitalWrite(9, HIGH);
    break;
  case 0XC5782232:
    Serial.println("Izquierda");
    digitalWrite(10, HIGH);
    break;
  case 0X7641B32:
    Serial.println("Derecha");
    digitalWrite(11, HIGH);
    break;
  case 0X4F6E4B32:
    Serial.println("OK");
    for (int k =0 ; k <12 ; k++)
    digitalWrite(k, LOW);
    break;
}

Le pasamos a switch la variable, cuyo valor determina la acción, en este caso el comando pulsado. Y después se establece una clausula de case para cada valor posible finalizando con dos puntos. Escribe las instrucciones a ejecutar y finaliza con break.
He puesto a propósito lo del Serial.println() para que veais que podeis poner varias líneas sin necesidad de bloques que ya esta implícito en el case. Y por fin finaliza la clausula con un break.

Puedes incluir una ultima clausula default, sin otro valor para poner una acción que se ejecute si el valor de la variable no coincide con niguno de los caso comprobados mas arriba.
#include <IRLremote.h>

CHashIR IRL;

void setup(){
  Serial.begin(115200);
  for (int i = 8; i < 12; i++) {
    pinMode(i, OUTPUT);
    digitalWrite(i, LOW);
  }
  IRL.begin(2);   // Receptor IR en el pin 2
}

void loop(){
  if (IRL.available()){
    auto data = IRL.read();
    switch (data.command){
      case 0XC9801E32:
        Serial.println("Arriba");
        digitalWrite(8, HIGH);
        break;
      case 0XA64EB032:
        Serial.println("Abajo");
        digitalWrite(9, HIGH);
        break;
      case 0XC5782232:
        Serial.println("Izquierda");
        digitalWrite(10, HIGH);
        break;
      case 0X7641B32:
        Serial.println("Derecha");
        digitalWrite(11, HIGH);
        break;
      case 0X4F6E4B32:
        Serial.println("OK");
        for (int k = 8; k < 12; k++){
          digitalWrite(k, LOW);
        }
        break;
    }
  }
}
 
La cláusula switch es muy útil para evitar if else encadenados que al final te hacen perder el hilo. Imagínate si tienes que comprobar todas las posibles teclas del mando.

No hay comentarios:

Publicar un comentario