Navegar / buscar

Transmisor infrarrojo (IR) con PIC 16F87, 16F877A y GP1UM28YK en CCS PIC-C

Hace poco participé en un proyecto de diseño de un control remoto con infrarrojo con unos requerimientos sencillos en cuanto a la cantidad de información que se prtendía transmitir (4 botones unicamente) y aunque encontré bastante material en internet, la mayoría era muy complejo para lo que se requería en la aplicación.

Así pues, decidí partir de ceros en la parte del infrarrojo e ingeniarmelas para desarrollar un mecanismo con el cual enviar los datos que necesitaba de forma sencilla y efectiva. Quiero compartir los resultados con ustedes por si alguna vez se enfrentan a éste tipo de proyectos.

Hardware

Componentes del sistema transmisor:

  • PIC16F87 configurado a 8MHz (oscilador interno)
  • Transistor 2N2222A
  • Resistencias de 47k y 100 Ohmios
  • LED Infrarrojo
Configuración: La salida de PWM (CCP1) del PIC18F87 se conecta a la base del transistor  2N2222A a través de la resistencia de 47k. El emisor del transistor va a tierra y entre colector y VCC se colocan la resistencia de 100 Ohmios y el LED infrarrojo para que éste conmute según el PWM del PIC.

Componentes del sistema receptor:

  • PIC16F877A configurado a 20MHz con cristal (y condensadores de 20 pF) y resistencia de 10k a VCC en el MASTER_CLEAR (Configuración básica del datasheet)
  • Demodulador GP1UM28YK (configurado con condensador y resistencia según el datasheet)
Configuración: La salida de datos del integrado demodulador se conecta directamente al PIN_B0 (INT Externa) del  PIC16F877A

Funcionamiento del sistema

Los datos para los transmisores infrarrojo deben estar modulados (generalmente a frecuencias entre los 30KHz y 50KHz) ya que de no estarlo se podrían generar interferencias de fuentes naturales de infrarrojos y por lo tanto se perderían los datos. Así pues, el sistema que diseñe tiene las situiente características:
  • Frecuencia de portadora de 40KHz proporcionada por el PWM del PIC transmisor. (40Khz debido a que ésta es la frecuencia a la cual esta sintonizado el demodulador GP1UM28YK, si se necesita otra frecuencia basta con cambiar los parámetros de configuración del PWM en el código del transmisor)
  • Codificación Manchester para garantizar las características de la señal requeridas por el GP1UM28Y
  • Trama de 1 byte (Figura 2)
  • Tiempo de bit de 2ms
  • Tiempo de trama de 16ms
  • Secuencia conocida para sincronización de la trama (4bits)
  • Carga útil de 4 bits por trama
  • Recepción sincronzada por interrupción externa

Figura 1

Las características de las señales del sistema se pueden observar en la figura 2.

Figura 2

Adjunto los archivos correspondientes al proyecto en CCS PIC-C (comentarios incluidos) y una simulación en Proteus que muestra los datos que están llegando al receptor en un LCD (2×16).Cmo se podrá ver en el código fuente, para enviar un dato basta con llamar la función “enviar(param)”  cuyo parámetro es un entero válido para enviar (más información en los comentarios del código).

Lso archivos para el transmisor se llaman “iR” y para el receptor “Rx877a”

Descargar proyecto de transmisor infrarrojo

Porsupuesto, éste proyecto pueden modificarlo y mejorarlo según su conveniencia, pero así como está funciona a una distancia de hasta 10m con una fuente de 3V para el transmisor.
Cualquier comentario o inquietud, no duden en comunicarla.
¡Saludos!

Entradas relacionadas:

  • spectro

    >Buenos dias Pablo, el infrarojo que utilizaste donde lo puedo conseguir en Bogota????,
    es el mismo que vende aqui sigma??

    http://www.sigmaelectronica.net/gp1um28yk-p-134.html

  • Pablo Borbón

    >Hola spectro, sí, es ése mismo y precisamente se compró allí al momento de realizar el proyecto.

    ¡Saludos!

  • German Rene

    >hola me podras mandar el codigo y el circuito esque lo necesito creo que me sirve para una practica nomas necesito saber donde va el infrarrojo este es mi correo.
    yerene1989@hotmail.com

  • Pablo Borbón

    >Hola Germán:

    El código del proyecto lo puedes encontrar en éste mismo post. Saludos.

  • Pingback: Tweets that mention Transmisor infrarrojo (IR) con PIC 16F87, 16F877A y GP1UM28YK en CCS PIC-C | Perspectiva electrónica -- Topsy.com

  • mauricio

    hola pablo estoy haciendo un proyecto en rf, me puedes ayudar??? no puedo hacer que la señal llegue a mi receptor, o bueno si llega pero con mucho ruido!!!! tendras algunos proyectos que me puedan servir porfavor!!! para que pueda llevar a acabo mi proyecto saludos… y esta muy bueno tu proyecto!!!

  • mauricio

    por cierto el proyecto lo estamos trabajando en pic c y veo que tu sabes mucho de ese programa!!!! y la base de nuestro proyecto es no usar drivers ni decodificadores, ya que lo queremos hacer muy economico, solo enviar por tx y recibir por rx, y no son muchos datos!!!! porfavor si me pudieras sugerir algo o decirme mis errores!!! estoy usando el pic18f4520 y los modulos tlp434 y el rlp434!!! saludos nuevamente y espero tu ayuda!!!

    • http://pabloborbon.com Pablo Borbón

      ¡Hola Mauricio!

      Disculpa que te conteste tan tarde pero he estado algo ocupado. Desafortunadamente no tengo a la mano ninguno de los proyectos de comunicaciones que utilizaban RF y ASK (Hablaré con mis compañeros de Universidad a ver si todavía tienen algo).

      Lo que si te puedo dar son algunas recomendaciones generales:

      - Ten en cuenta los límites de transmisión de datos del par tlp434 y rlp434 cuando inyectes la señal de entrada.
      - Trata de usar la máxima potencia disponible en la antena, ya sea mediante un acople o utilizando un bjt de ser necesario (aunque me dices prefieres no utilizar un driver).
      - Si se te distorsiona mucho la señal a la salida del receptor o parece tener mucho ruido, utiliza un filtro RC activo sintonizado a la frecuencia de la señal banda base para tratar de recuperarla ya que en muchas ocasiones un filtro pasivo te deteriora mucho el nivel de la señal. Para ASK, también puedes utilizar un detector de envolvente con un diodo rápido y luego un amplificador con ganancia muy alta para llevarlo a corte y saturación y dejar la señal lo “más cuadrada posible”.

      Por último sería interesante que me contaras: ¿Qué método estás utilizando para sincronizar los datos entre Tx y Rx? ¿Cuál es el propósito de tu proyecto y cuál es la tasa de transmisión de datos que escogiste? ¿Para qué utilizas el PIC?

      ¡Saludos y gracias por tus comentarios!

  • mauricio

    hola pablo, mi proyecto es un tablero de control hospitalario y lo queremos hacer por RF, el metodo es simple: un teclado, el transmisor que te mencione y el receptor con un lcd, esto es para que el paciente elija sus necesidades basicas de atencion hacia las enfermeras, todo sera inalambrico, el pic es para programar las secuencias de datos que estan llegando, hasta ahora hemos logrado enviar la señal y recibirla pero con algo de ruido, para eso queremos implementar el codigo manchester pero no sabemos como utilizarlo si me das tu correo te mando mis documentos con simulacion ahora logrados!!! saludos y gracias por tu respuesta!!!

  • Christiansm88

    hola pablo, dejame decirte que la logica de tu programa me parece muy interesante…he intentado armarlo fisicamente en protoboard pro no he podido conseguir el pic 16f87 para el transmisor. Mi pregunta es si puedo implementar el transmisor con otro pic, por ejemplo el pic 16f876 y es debido a que cuando intento compilar el programa del transmisor en el pic 16f876 me sale error en algunos ; siendo especificos en estos:

    UNKNOWN KEYWORD IN #FUSES “INTRC_IO”UNKNOWN KEYWORD IN #FUSES “NOMCLR”
    UNKNOWN KEYWORD IN #FUSES “FCMEN”
    UNKNOWN KEYWORD IN #FUSES “IESO”
    UNIDENTIFIED ITENDIFIER — SETUP_COMPARATOR
    UNIDENTIFIED ITENDIFIER — SETUP_VREF
    UNIDENTIFIED ITENDIFIER — SETUP_OSCILLATOR

    agradecria tu respuesta …atte christian salazar , mi correo es: christiansm88@hotmail.com