«

»

Jul 18

Simple conmutador de infrarrojos con PIC

mandoEn este artículo vamos a ver una manera muy sencilla, rápida y barata de aprovechar cualquier mando a distancia que tengamos por casa para interactuar con un PIC, aunque el mismo método se puede adaptar de forma muy simple a una placa Arduino o cualquier otro tipo de microcontrolador.

La idea es aprovechar algún aparato viejo para obtener el sensor de IR y el mando a distancia, aunque también podemos comprar por poco dinero ambos elementos (entorno a 2€ el conjunto o 1€ el sensor). Yo he probado con el mismo sensor (tipo 1838B) los mandos a distancia que tengo en casa y funcionan todos correctamente, pero no puedo garantizar que eso sea así para todo el mundo, ya que existen diversas codificaciones y frecuencias de modulación en función del fabricante. La forma más fácil de que todo vaya bien es comprar el pack de receptor y mando.

 

El sensor es como un led de color negro con tres patas, dos de ellas sirven para alimentarlo y la tercera nos devuelve la señal en forma de un tren de pulsos.

En mi caso el datasheet indica que la pata izquierda es la señal, la central 0V y la derecha +Vcc (de 2.7V a 5.5V).

sensor_ir   sensor_ir2  fuente

Lo que voy a hacer ahora es poner el osciloscopio en la pata de señal para ver que es lo que obtenemos al salida al pulsar los botones de diferentes tipos de mando a distancia.

Enchufamos la fuente de 5V entre las patas central y derecha y ponemos la pinza del osciloscopio en la pata izquierda. Lo primero que vemos es que cuando no hay señal IR obtenemos 5V y cuando se pulsa un botón del mando aparecen varios trenes de pulsos. Si congelamos uno de ellos vemos lo siguiente:

osccap1

Cada mensaje empieza con un pulso “muy largo” de unos 9 ms a 0 y luego otro pulso de unos 4 ms a 1 y luego una trama que depende en parte del botón que se ha pulsado y en parte del modelo del mando a distancia.

En este artículo vamos a buscar la aplicación más simple posible así que simplemente intentaremos detectar con el micro el primer flanco de la señal y con eso encenderemos y apagaremos un led conectado a una pata.

Usaré una maqueta de un PIC18F1320 a 20MHz y conecto en RA0 el sensor y en RB3 el led con una resistencia en serie de 1K.pic_18f1320

El programa muestréa continuamente la entrada RA0 y cuando se pone a 0 cuenta el tiempo hasta que vuelve a ser 1 y si es mayor de 8 ms cambia el estado del led.

#include <main.h>

void main()
{ 
int16 t0;

   setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);   //1.6 us   
         

   while(TRUE)
   {  
      if (!input(PIN_A0)) {                                                      
         t0=get_timer1();                                                
         while (!input(PIN_A0));                 
         if ((get_timer1()-t0)>5000) {   
            output_toggle(PIN_B3); 
            delay_ms(100); 
         }            
      }
   }

}

Se puede hacer aun más simple eliminando el timer1 y poniendo un delay un poco más largo, de 1 sg por ejemplo con lo que el programa queda reducido a 3 líneas:

#include <main.h>

void main()
{ 

   while(TRUE)
   {  
      if (!input(PIN_A0)) {                                                      
            output_toggle(PIN_B3); 
            delay_ms(1000); 
      }
   }

}

Y por supuesto se puede decodificar el tren de pulsos y diferenciar la tecla pulsada para realizar diferentes acciones pero eso lo veremos en algún otro momento.

Deja un comentario

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

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies