martes, 11 de febrero de 2014

Utilización mando infrarrojos I: Lectura del código y ejemplo

¿Cómo es un sensor 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

¿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 az 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.
Posteriormente, debe ser incluida en el apartado de Librerias del IDE.

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:


El sketch para la lectura que emplearemos será el siguiente:

#include <Arduino.h>
#include <NECIRrcv.h>
#define IRPIN 8   // pin al que conectamos el receptor de IR
static int aux = 1;
NECIRrcv ir(IRPIN) ;
void setup()
{
  Serial.begin(9600) ;
  Serial.println("NEC IR codigo recepcion") ;
  ir.begin() ;
}
void loop()
{
  unsigned long ircode ;
  while (ir.available()) { 
    ircode = ir.read() ;  
    Serial.println(ircode) ; 
  }
}

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

(Disculpen la calidad del vídeo, no tenía mejor cámara a mano)



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


Encendido/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. 

El sketch será el siguiente: 

#include <Arduino.h>
#include <NECIRrcv.h>
#define IRPIN 8   // pin that IR detector is connected to
int led = 7;
static int aux = 1;
NECIRrcv ir(IRPIN) ;
void setup()
{
  pinMode(led, OUTPUT);
  ir.begin() ;
}
void loop()
{
  unsigned long ircode ;
  while (ir.available()) { 
    ircode = ir.read() ;
    if(ircode == 3125149440){  /*en nuestro caso, corresponde con el botón encendido/apagado del mando*/
      if(aux == 0){
        digitalWrite(led, LOW);
        aux = 1;
      }
      else{
        digitalWrite(led, HIGH);
        aux = 0;
      }
    } 
  }
}

Con respecto al montaje del circuito, teniendo en cuenta las conexiones del sensor IR y el ejemplo de la lectura de los códigos, simplemente añadimos la conexión de un LED junto con una resistencia, en el pin 7 (Diodo LED. Introducción y ejemplo), quedando finalmente el resultado siguiente:





Y esto es todo. No dudéis en comentar y en preguntar cualquier duda.
Gracias por la atención.

I.