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.
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.
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.
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.
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.
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
Arriba
Adress 0X42
Command 0XC9801E32
Abajo
Adress 0X2
Command 0XA64EB032
Izquierda
Adress 0X2
Command 0XC5782232
Derecha
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:
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.
Adress 0X2
Command 0X7641B32
OK
Adress 0X2
Command 0X4F6E4B32
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;
}
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.
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.
#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