RobotyPic son proyectos básicos de electrónica con microcontroladores PIC, de aplicación en el mundo de la robótica didáctica, con archivos fuente creados mediante el compilador CCS PIC C COMPILER en lenguajeC.

Emisor - Receptor de infrarojos con PIC

Antes que nada,  hay que tener claro el funcionamiento en la transmisión y recepción por infrarojos. Por un lado, el transmisor genera dos señales, la señal de control, que es la que lleva la información que será interpretada por el pic receptor,  y la portadora, con una frecuencia fija y mucho más alta que hace la función de “canal de la transmisión”. El receptor de infrarojos solo captará las señales con la frecuencia de la portadora.

Emisor receptor infrarojos con pic

En este proyecto se ha empleado como receptor IR un TSOP 1138, que capta las señales de 38KHz, por lo tanto, la frecuencia de la portadora emitida por el emisor debe ser de ese valor.

Esquema emisor receptor infrarojos con pic
pulsa en la imagen para ampliarla

Por tanto, para la emisión por infrarojos se van a emplear varias señales con diferentes frecuencias. Por un lado 3 señales de 200Hz, 100Hz y 60Hz generadas por el PIC en función del pulsador accionado. Por otro lado la señal de 38KHz que será la portadora de la señal de control, generada por un NE555.

En el receptor, el detector TSOP1138 demodula la señal eliminando la portadora y recuperando la señal de control que será interpretada por el pic receptor.

El pic mide el ancho del semiperiodo alto de la señal de control recibida y en función de ese valor ejecutará la acción que le corresponda, en este caso encender un led concreto.

Para generar la señal de control por el pic emisor, la variable “frecuencia” se carga con un valor concreto en función del pulsador accionado y por tanto de la frecuencia que se quiere generar. Cada vez que se produce un rebose del timer0 se ejecuta el bucle por la interrupción de rebose. En ese bucle se establece el estado en el que debe estar la salida que ofrece la generación de la señal.

   control_senal++;
     
   if (control_senal<frecuencia) Bit_PWM=1;     
   if (control_senal>frecuencia) Bit_PWM=0;
   if (control_senal>=(2*frecuencia))   control_senal=0;

Generada la señal de control, esta se modula con la portadora, es decir, cada semiperiodo en estado alto de la señal de control se transformará en un tren de impulsos de 38KHz de una duracion correspondiente al semiperiodo.

[+/-] Ver / Ocultar programa emisor completo en C


Ahora el receptor debe captar esta señal. El receptor infrarojos aquí empleado dispone internamente de un filtro pasabanda de 38KHz, es decir, solo leerá las señales a esa frecuencia de ahí el haber empleado una portadora con ese valor. Por tanto, esos trenes de impulsos los transformará en pulsos completos con lo que se obtiene la señal de control generada en el emisor.

Obtenida la señal, el pic receptor debe ahora interpretarla. Para ello vamos a medir el tiempo del semiperiodo en estado alto de la señal de control mediente el módulo CCP.

 
   if(cambio==0){                  
      TFS=CCP_2;                   
      setup_ccp2(CCP_CAPTURE_FE); cambio=1
   }
   else {                           
      TFB=CCP_2;                   
      setup_ccp2(CCP_CAPTURE_RE); cambio=0;
                          
      if(nuevopulso==0)            
         nuevopulso=1;             
   }

   if(nuevopulso==1){           
      TF=(TFB-TFS);              
      semiperiodo=TF/1000;      
      nuevopulso=0;   
   }

Y una vez obtenido el valor, se compara con los valores esperados para decidir la actuación a ejecutar

       if (semiperiodo<3&&semiperiodo>1) verde=verde+1
   if (verde>6)   portb=0x01;       
     
   if (semiperiodo<6&&semiperiodo>3) amarillo=amarillo+1;
   if (amarillo>6) portb=0x02;     
     
   if (semiperiodo<9&&semiperiodo>6) rojo=rojo+1; 
   if (rojo>6) portb=0x04;


[+/-] Ver / Ocultar programa receptor completo en C


Todos los archivos se pueden descargar en este enlace:





Descarga del proyecto para el PIC 16F628A:




El proyecto contenido en el artículo ha sido diseñado con la versión v4.084 de CCS PIC C COMPILER


15 comentarios:

Deyvis.... dijo...

Chabier he tratado de armar el circuito, pero podrias explicar por que has utilizado un condensador electrolitico de 0.0018uf y si se puede cambiar por otro.
Te dejo mi correo: alexanderlibra@hotmail.com.

Robotypic dijo...

Hola Deyvis.
Para la emisión-recepción de los infrarrojos necesitas una frecuencia portadora de 38KHz. Esos 38 KHz se obtienen mediante los valores de R11, R12 y C1 mediante esta expresión:

38.000 Hz = 1,44 / ((R11 + 2R12)*C1)

Si cambias el valor de C1 debes cambiar los valores de las resistencias de forma que el resultado te siga saliendo 38000

Deyvis.... dijo...

Hola Chabier.
De nuevo tengo una nueva duda, como calcular la potencia total del circuito de manera teorica para dar con los calculos, que formulas y metodos deberia aplicar.
Te dejo mi correo: alexanderlibra@hotmail.com.

Anónimo dijo...

Se podra montar para pic16f628a

Robotypic dijo...

Si. Al final del artículo tienes el enlace de descarga de los archivos.

Unknown dijo...

COMO OBTENGO LAS LIBRERIAS DE TSOP 1138 Y E TSL6200

Robotypic dijo...

Yelsin. No se necesitan librerías, solo el código mostrado.

Unknown dijo...

Disculpa amigo una duda soy nuevo en lo de los pics, una estas usando PIC C u otro y que código exactamente estas mandando con cada pulsador quiero enviar yo una señal parecida pero donde se mande una cadena continua y infinita 10101010101010101010101 que tendría que hacer para estos agradezco tu apoyo a y veo que en el circuito emisor en la parte del ne555 el código lo introduces al ne555 por la pata 4 reset como funciona esta parte garcías.

Unknown dijo...

Disculpa me queda otra duda el oscilador ne555 que usas en el emisor esta configurado a un 50% duty o funciona con cualquier porcentaje es deci 30% dyty 40%, 60% en treo otros o es necesario que sea aun 50% gracias.

Robotypic dijo...

Con el ne555 se crea una señal de 38Khz. Son los que se necesitan para que el receptor capte la señal del emisor. Con el PIC se le dice al ne555 cuando enviar estos 38Khz. Según la frecuencia con la que se envie el receptor sabe que pulsador se ha activado.

Unknown dijo...

Disculpa entonces no importa si la onda de salida del ne555 no es cuadra y disculpa como podría sacar un código de 010101010 infinita.

Robotypic dijo...

La señal de 38Khz debe ser cuadrada. Las señales generadas por el PIC pueden ser las que tu quieras pero teniendo en cuenta que el receptor debe saber interpretarlas.
Una señal 01010101 entiendo que es una señal cuadrada sin más.

Christ dijo...

Hola amigo, disculpa en la parte de emisor porque colocas la salida RB0 hacia el reset del 555 ?

saludos

Robotypic dijo...

Christ. De esta forma, durante los semiperiodos altos de la señal generada por el PIC el 555 generará la señal de 38KHz. En los semiperiodos en estado bajo el 555 mantendrá la señal también en estado bajo.

Hayhtem JLS dijo...

Hello,
I can't download code of this tutorial, could you please resolve this problem ?

Related Posts Plugin for WordPress, Blogger...

CONTACTA - (Haz referencia del artículo sobre el que trata la consulta o comentario)