HOME      PROJETOS      PROGRAMAÇÃO     

Detetor e Decodificador de Controle Remoto Infravermelho

Todos nós temos em casa aparelhos de TV, DVD, ar condicionado, ventiladores, som e outros que, em sua maioria são dispositivos operados por controle remoto infravermelho. Os controles remotos desses dispositivos podem variar de aparência e possuirem funções diferentes, sendo que muitos deles possuem teclado númerico, como os de TV, para permitir a digitação dos números dos canais.

Uma vez criei um projeto de relógio digital onde o acerto das horas era feito através de alguns botões conectados as portas do microcontrolador. O tempo passou e, um dia, enquanto manuseava um controle remoto de TV com teclado numérico, tive a idéia de usá-lo como teclado para entrada de dados no projeto do relógio.



Funcionamento do Controle Remoto Infravermelho

Antes de continuar, vamos dar uma olhada no funcionamento de um controle remoto infravermelho.

Dois circuitos são necessários para atingir o objetivo de um controle remoto: um para emitir os pulsos codificados de luz infravermelha e outro para detetar e decodificar esses pulsos a fim de entragá-los a quem possa interessar.

Os circuitos emissores, que se encontram alojados nos aparelhos que manuseamos diariamente, codificam os pulsos dentro de uma frequência portadora que fica entre 36KHZ e 38KHZ. Isso é necessário para evitar interferências de outras fontes luminosas que se encontram no ambiente, como lâmpadas incandescentes, lâmpadas florescentes, raios solares e outras fontes que possam emitir raios infravermelhos. Os sinais, emitidos pelo controle remoto, chegam ao circuito detetor cuja função é eliminar a onda portadora de alta frequência, amplificar o sinal e deixar passar somente os sinais digitais que contêm as informações. Na figura 1 temos o formato do pacote emitido pelo controle remoto.

O HEADER é um nível alto de 9,4ms (milisegundos) que indica o início da transmissão dos pulsos.

BREAK é um nível baixo de 2,0ms que indica que o que vem a seguir são bits de dados.

MARK é um nível alto de 0,8ms que indica que o próximo nível baixo é um bit de de dado.

DATA é o bit de dado propriamente dito, representado sempre por um nível baixo. A diferença entre um bit de valor 0 (zero) e um bit de valor 1, é a duração do tempo que o sinal permanece baixo. Se o sinal permanecer baixo durante 0,8ms, o valor do bit será 0 (zero) e, se o sinal permanecer baixo durante 1,6ms, o valor do bit será 1.

Apos enviar 32 bits de DADOS, será enviado um STOP, nível baixo de duração muito grande (maior do que 10ms), significando fim da transmissão.

Se a tecla do controle permanecer pressionada, o processo se repetirá desde o envio do HEADER.




O circuito detetor

O esquema elétrico do circuito detetor pode ser visto na figura 2. O elemento sensor desse detetor é um fototransistor TIL78 e, para amplificação, são usados dois estágios de um integrado LM324 que possui 4 amplificadores operacionais.

Esse circuito deteta os sinais infravermelhos do controle remoto da TV, filtra a portadora de 36KHz e entrega, na saída, um pacote de sinais digitais que serão injetados numa porta do microcontrolador.

Esse circuito não tem grande amplificação e serve somente como dispositivo de entrada de dados num projeto, substituindo um teclado local, assim, o controle remoto deverá ser usado em distâncias curtas como a uns 20cm desse detetor. Sua vantagem é a de usar apenas uma porta do microcontrolador para simular um teclado numérico de modo serial.

Convem observar que alguns controles remotos, pricipalmente os que possuem funções múltiplas como os de TV a cabo, podem não funcionar porque possuem codificação diferente da prevista para os controles remotos deste projeto, como é o caso do controle da TV a Cabo da Sky que usa codificação de 48 bits ao invés de 32 bits.

Alguns desses controles possuem uma chave para mudar de TVC (cabo) para TV. Tente posicionar a chave em TV para ver se funciona. Se não funcionar, tente usar um controle remoto específico para TV.

Além do circuito detetor mostrado no esquema acima, pode-se usar um receptor de infra vermelho HX1838, mostrado na foto à esquerda, ou qualquer outro equivalente, que já pussuem internamente todos os circuitos necessários para a amplificação do sinal, tornando o projeto mais fácil de realizar.



Processamento do sinal

O processamento lógico do sinal será feito por uma rotina escrita em linguagem assembler, que extrai os valores enviados no pacote e os armazena num buffer na RAM do microcontrolador, de onde podem ser usados para qualquer finalidade.

Antes de continuar, faça o download do arquivo Controle_Remoto.zip que contem o projeto completo desenvolvido no MPLAB.

A chave do projeto é a subrotina rmtctgenerico_services.inc que faz a decodificação dos pulsos transformando-os em dados para serem usados pelo programa. Para poder usar essa subrotina, deve-se, primeiramente, definir no programa os símbols e registradores abaixo:

rmtgcount res 1 ; contador de 1/2 periodos #define rmtgtris TRISB ; I/O #define rmtgport PORTB ; PORTA rmtgbit equ 0 ; BIT rmtgbuf res .4 ; buffer de leitura

Para ler o controle remoto fazemos a chamada da subrotina:

call rmct_generico ; leitura do controle remoto

Após a chamada devemos verificar se a leitura foi correta confrontando o valor retornado na localização rmtgbuf+0, que contem o valor da tecla complementado, com o valor da localização rmtgbuf+1 que contem o valor real da tecla. Para fazer isso usamos as instruções abaixo:

comf rmtgbuf+0, w ; descomplementa o valor complementado subwf rmtgbuf+1, w ; compara com o valor real da tecla btfss STATUS, Z ; os valores sao semelhantes??? goto erro ; NAO --> erro





Hardware para o programa de teste

O hardware necessário para o programa pode ser visto na figura 3.

Figura 3 - Hardware para o programa de teste
  • Um microcontrolador PIC18F4520
  • Clock de cristal de 20MHZ externo obrigatório.
  • O PORTB<RB0> recebe o sinal de saída do circuito detetor do controle remoto.
  • O PORTB<RB1> recebe o sinal de dados do LCD (LCD Data).
  • O PORTB<RB2> recebe o sinal de clock do LCD (LCD Clock).
  • O PORTB<RB3> LED indicador de funcionamento (opcional).

O arquivo ctrmt.hex pode ser gravado diretamente num microcontrolador PIC18F4520 e testado para verificar o funcionamento.

O projeto foi realizado num microcontrolador PIC18F4520 porque ele já estava sobre a bancada mas pode-se usar outro qualquer, inclusive da família 16F, embora o programa não tenha sido testado em microcontroladores dessa família.

Este projeto usa um LCD HD44780 com interface serial descrita em  Interface para LCD HD44780 com 2 fios .










Índice dos circuitos




H P S P I N

Desde 04 de Março de 2010

Atualização: 19 de Mar de 2024