INFRARROJOS (IR)

Volvemos a este gráfico de la Wikipedia (del tema de telecomunicaciones) donde vemos que los infrarrojos (Por debajo del rojo) son casi ondas de luz visible, es decir un tipo de radiación electromagnética de una determinada longitud de onda.

Distribucion de frecuencias

De hecho se puede ver luz infrarroja usando cámaras normales (algunos móviles pueden grabarlas) o dispositivos específicos de visión infrarroja.

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. Además debemos tener un tiro «directo» sin obstáculos al receptor.

Para conseguir la comunicación necesitamos un emisor de infrarrojos (un led que está colocado en el mando que emite señales lumínicas) y un receptor (un sensor lumínico que «escucha» las señales [luces] enviadas).

EMISOR —————————>>>>> RECECPTOR

irsignal (1)

Este LED envía unas señales binarias: unos y ceros (es decir, encendido y apagado con cierta frecuencia y código), para que el receptor reciba una información (otra vez binaria) que puede descodificar en el mensaje original (p.ej. encender o apagar, subir o bajar volumen).

En nuestro caso el emisor es un mando (hay que poner la pila quitando el precinto de plástico)…

Y un receptor montado en una placa.

Resultado de imagen de elegoo mando ir

Recuerda que para conectar el sensor IR:

G: Ground/Tierra (-)

R: Entrada de corriente (+)

Y: Señal (a un pin digital)

El código tiene este formato para este mando en concreto:

case 0xFFA25D: («POWER»)
case 0xFFE21D: («FUNC/STOP»)
case 0xFF629D: («VOL+»)
case 0xFF22DD: («FAST BACK»)
case 0xFF02FD: («PLAY/PAUSE»)
case 0xFFC23D: («FAST FORWARD»)
case 0xFFE01F: («DOWN»)
case 0xFFA857: («VOL-«)
case 0xFF906F: («UP»)
case 0xFF9867: («EQ»)
case 0xFFB04F: («ST/REPT»)
case 0xFF6897: («0»)
case 0xFF30CF:(«1»)
case 0xFF18E7: («2»)
case 0xFF7A85: («3»)
case 0xFF10EF: («4»)
case 0xFF38C7: («5»)
case 0xFF5AA5: («6»)
case 0xFF42BD: («7»)
case 0xFF4AB5: («8»)
case 0xFF52AD: («9»)

Más teoría sobre mandos y conexión infrarroja en http://www.prometec.net/infrarrojos/ , https://www.luisllamas.es/arduino-mando-a-distancia-infrarrojo/ y http://geekayuda.blogspot.com.es/2013/12/arduino-sensor-ir-infrarrojo.html

CASOS CONDICIONALES «switch» «case»

A parte de la programación condicional basada en if/then/else podemos directamente asignar unas órdenes en caso de que una variable cumpla con una condición específica. En el caso del IR tenemos distintos códigos (uno por cada botón) a los que podemos asignar instrucciones específicas (p.ej si se detecta el botón de encendido encender un led determinado)

La sintaxis es así:

switch (Codigos.value) // especifica que la variable para ver los casos es "Codigos.value"(es decir, la info recibida por el sensor de IR)
//
{             //empiezan los casos en función de los valores de la variable
//
case 0xFFA25D: //codigo del botón del mando recibido (en este caso POWER) seguido de DOS PUNTOS
digitalWrite(ROJO, HIGH); //instrucciones a ejecutar para este caso (puede haber más líneas)
break; //fin de este caso
//
case 0xFFE21D: //código de otro caso posible ("FUNC/STOP") seguido de DOS PUNTOS
digitalWrite(ROJO, HIGH); //instrucciones a ejecutar para este caso
break; //fin de este caso
              //podría haber más casos precedidos por case y cerrados con break
} //fin de los tipos de casos a ejecutar.

PRÁCTICA (6PTOS)

Construye el siguiente circuito y monta el código. Debes conseguir un semáforo que se controle a distancia con los botones «POWER» y «STOP».

Recuerda que para conectar el sensor IR:

G: Ground/Tierra (-)

R: Entrada de corriente (+)

Y: Señal (a un pin digital)

No olvides cargar la librería correspondiente:

(IRremote.zip)

Este es el código.

#define ROJO 3
 #define AMBAR 4
 #define VERDE 5
 #include <IRremote.h>
 int ReceptorIR = 9;
 IRrecv irrecv(ReceptorIR);
 decode_results Codigos;

void setup() 
 {
  Serial.begin(9600);
  irrecv.enableIRIn();

pinMode(ROJO, OUTPUT);
 pinMode(VERDE, OUTPUT);
 pinMode(AMBAR, OUTPUT);

}
 void loop() 
 {
  if (irrecv.decode(&Codigos)) 
  {
  switch (Codigos.value)
  {
  case 0xFFA25D: //codigo POWER
  digitalWrite(ROJO, LOW);//apagar el rojo 
  digitalWrite(AMBAR, LOW);
  digitalWrite(VERDE, HIGH);//Encender el verde
  break;

case 0xFFE21D: //codigo FUNC/STOP
  digitalWrite(VERDE, LOW);//apagar el verde
  digitalWrite(ROJO, LOW);
  digitalWrite(AMBAR, HIGH);
  delay(2000);
  digitalWrite(AMBAR, LOW);
  digitalWrite(ROJO, HIGH);//Encender el rojo 
  break;
  }
  irrecv.resume();
  }

}

PUNTO EXTRA (2PTS)

Módifica el código para incluir 2 nuevos modos (botón a elegir) donde el semáforo se quede con el ámbar intermitente durante 10 segundos a distintas velocidades al accionar un botón de vuestra elección.

PUNTO EXTRA (2PTS)

Módifica el código y el cableado para incluir un zumbador activo que se active por un periodo de 2 segundos al accionar un botón de vuestra elección.


Práctica 7 – Infrarrojos (IR)

2 pensamientos en “Práctica 7 – Infrarrojos (IR)

  • junio 13, 2018 a las 5:40 am
    Enlace permanente

    Hola, buenos dias
    He probado su programa y me gusta, pero seria posible hacer que parpadearan.
    ej. rojo H, delay(500) rojo L delay(500)y volviera a rojo H,
    verde H,encender 0xFFAxxD verde L apagar 0xFFAxxD
    encender con 0xFFA25D y apagar con 0xFFA25D (mismo boton)
    el funcionamiento atual ya me gusta como esta.
    Muchas gracias por su ayuda

    Responder

Deja una respuesta

Tu dirección de correo electrónico no será publicada.