Arduino

Controle Remoto IR para TV com Arduino

Fala projetista fora do comum! Você sabia que com o Arduino fica fácil de ler e enviar informações via infravermelho e controlar sua televisão, ar-condicionado, luzes, relés e muito mais? É isso mesmo que você leu! Hoje vamos nos divertir muito aprendendo como funciona um controle infravermelho, como funcionam alguns protocolos de codificação, como usar o receptor infravermelho AX-1838HS, e ver como clonar e construir um controle remoto de uma televisão com Arduino! Bora nessa!

Como funciona o controle remoto IR?

O controle remoto IR (infrared, ou infravermelho, em português) é um dispositivo que possui um microcontrolador, teclado e um LED infravermelho. Quando o usuário pressiona uma tecla, o microcontrolador manda o LED piscar com uma série de pulsos que formam o código, que é recebido pelo sensor que fica na televisão. Cada tecla possui um código diferente, assim o dispositivo receptor consegue identificar qual tecla você pressionou.

Mas como assim o LED pisca? Eu não vejo nada! Isso porque ele acende como uma cor que o olho humano não consegue ver, a cor infravermelho.
O olho humano só consegue enxergar as cores entre o vermelho e o violeta, e tudo abaixo do vermelho, ou seja, infravermelho nós não vemos, e tudo acima do violeta, ou seja, ultravioleta também não vemos. Dá uma olhada em como é classificado o espectro eletromagnético:

Espectro de ondas eletromagnéticas

Curiosidade: Seu olho não consegue ver a luz infravermelha, porém, algumas câmeras conseguem. Aquelas que conseguem são as que não tem um filtro infravermelho tão bom assim. Teste com seu celular: aponte a luz do controle para o seu celular e pressione um botão, a luz deverá piscar na tela do seu celular. Se o seu celular for um Iphone, não vai aparecer, pois o filtro IR é muito bom e filtrará todo o IR que o LED emite.

Protocolos de comunicação IR

Cada controle vem programado para transmitir esses pulsos de um jeito específico, ou seja, cada um possui um tipo de protocolo de comunicação.
Esse são alguns dos protocolos mais comuns:

Várias empresas utilizam esses protocolos antigos, e por esse motivo é importante saber qual protocolo o controle que você quer clonar está usando. Você pode descobrir isso com a ajuda de um receptor IR e um osciloscópio, ou pode pesquisar nesse site aqui pra ver se encontra a marca de seu aparelho. A maioria gigantesca dos aparelho utiliza o protocolo NEC fabricado pela empresa japonesa NEC, que agora se chama Renesas.

O protocolo NEC

Vamos agora ver como o protocolo NEC organiza as informações!
Primeiramente, esse protocolo utiliza uma frequência portadora de 38KHz para transmitir os pulsos que representam os bits, que contém as informações. Na imagem abaixo, podemos perceber que, quando temos a transmissão de vários pulsos em 38KHz, consideramos como nível lógico alto, e quando não temos esse pulsos de 38KHz, consideramos nível lógico baixo. De acordo com o tempo na qual esse pulsos (38KHz) ficam ligados ou desligados (período), consideramos um bit 1 ou 0. Esse tipo de modulação é conhecida como PCM, ou em português, Modulação por Código de Pulsos.

Saída do LED do controle remoto

Essa modulação dos pulsos em 38KHz é importante para evitar interferências externas nos receptores como o sol, por exemplo, que emite muito infravermelho.

O receptor infravermelho AX-1838HS

Graças ao avanço da tecnologia não é mais necessário montar grandes circuitos para filtrar a frequência portadora do sinal e obter os pulsos limpinhos, agora temos tudo em um único componente! O receptor infravermelho AX-1838HS, já possui uma etapa amplificadora, filtro e demodulador, tudo integrado nesse único componente. Assim, esse receptor fornece para nós o sinal pronto e limpinho. A imagem abaixo mostra o diagrama em bloco do circuito do receptor.

Diagrama em blocos do receptor IR AX-1838HS
Receptor IR AX-1838HS

Esse daqui é o modulo que vendem para Arduino, que possui o AX-1838HS, capacitor de desacoplamento e também um LED que indica os pulsos recebidos.

Módulo para Arduino com o AX-1838HS

O AX-1838HS pode trabalhar com tensões de 2,1 até 5,5V, o consumo de energia é baixo, na casa de 1,5mA, e a frequência de modulação dos pulsos de dados é de 38 KHz. O comprimento de onda da luz infravermelha percebida é de 940 nm, e o ângulo de visão é de aproximadamente 90 graus. 

O controle da imagem abaixo é o que acompanha o kit de controle remoto IR para Arduino. Ele também trabalha com o protocolo NEC, e tudo que você ver nesse tutorial pode ser empregado nele:

Utilizando o AX-1838HS

Para te mostrar como o AX-1838HS filtra a portadora de 38KHz, eu realizei um experimento. Eu desmontei o controle remoto citado acima e medi o sinal diretamente do terminal do LED:

Capturando pulsos diretamente do controle IR para Arduino

Na imagem abaixo, você pode ver os pulsos que representam os bits junto com a frequência de 38KHz (perceba que enquanto o circuito está em nível alto ele está totalmente preenchido).

Captura de pulsos dos terminais do LED do controle citado nesse artigo

Inclusive, se eu der um zoom bem grande nesse sinais em nível alto, eu consigo medir a frequência da portadora. Primeiramente um pouco de zoom:

Um pouco de zoom

Agora, mais um pouco de zoom e já conseguimos posicionar os cursores do osciloscópio, e ver, no canto direito superior da tela, em 1/ΔT, a frequência de aproximadamente 38KHz. Muito massa né!

Agora mais zoom ainda

Agora vamos conectar o AX1838HS no osciloscópio e capturar os pulsos a partir dele:

Conectando o AX-1838HS no Osciloscópio
Captura de pulsos do controle citado nesse artigo com o AX-1838HS

Percebam que o AX-1838HS fez toda a preparação do sinal removendo a frequência portadora.

Continuando sobre o protocolo NEC

A primeira coisa enviada no protocolo NEC é o que chamamos de LEAD CODE, que basicamente avisa o receptor que o transmissor vai começar a mandar os bytes contendo a informações. Como você podem ver na imagem abaixo, ele é composto por um pulso em nível alto de 9ms, e depois um em nível baixo de 4.5ms.

LEAD CODE

Exatamente o tempo que capturei no osciloscópio:

LEAD CODE pulso de 9ms
LEAD CODE pulso de 4.5ms

Depois, vem os bytes contendo o endereço e o comando propriamente dito. O bit 0 é representado por um pulso que tem a metade da largura de pulso do bit 1:

Descrição dos bits no protocolo NEC

E aqui nós podemos ver perfeitamente os bits:

Representação Bit 0
Representação Bit 1

Após o LEAD CODE, são enviados os 32 bits, ou 4 bytes, que contém a informação da tecla pressionada. Eles são enviados primeiro pelos bits menos significativos (LSB), e por último os bits mais significativos (MSB). O primeiro byte é o de endereço. O segundo byte é basicamente o primeiro, só que invertido, ou seja, o que era bit 1 vira bit 0 e vice-versa. Essa inversão é utilizada para o receptor confirmar se o o byte está correto. O terceiro byte é o comando, e o quarto é o terceiro invertido. Na imagem abaixo isso fica claro:

Existe também o chamado REPEAT CODE, que é um sinal enviado para o dispositivo para que ele possa repetir rapidamente um comando, já que o envio completo dos bytes é mais lento. Quando você clica na tecla, ela primeiramente envia o código com os bytes, e se você continuar pressionando o botão, ele ficará enviado somente o REPEAT CODE.

REPEAT CODE
Pulsos se continuarmos pressionando o botão
REPEAT CODE no osciloscópio

Clonando um controle remoto com Arduino

Agora que vimos um pouco de teoria, vou começar a fazer um controle remoto para minha televisão, que é da LG e utiliza o protocolo NEC de 32bits.

O circuito necessário para poder capturar o código do controle é esse abaixo, e eu utilizei um Arduino UNO e o receptor AX-1838HS.

Arduino e Receptor IR AX-1838HS

Para poder capturar os códigos do controle, vou utilizar a biblioteca IRremote, que aceita vários protocolos e pode capturar códigos de no máximo 32bits. Você pode instalar essa biblioteca diretamente pela IDE do Arduino. Primeiramente, clique em:
Sketch > Incluir Biblioteca > Gerenciar Bibliotecas 

Após abrir a janela do Gerenciador de Biblioteca, digite IRremote. Na biblioteca IRremote feita pelo Shirrifi, selecione a versão 2.7.0, que foi a versão utilizada nesse artigo,  e depois clique em Instalar. Após alguns segundos, ela será automaticamente instalada. Seu computador precisa estar conectado à internet para baixar a biblioteca. Após a instalação da Biblioteca, é necessário que você feche e abra novamente o programa  Arduino IDE.

Esse primeiro código serve para capturar o código do controle e convertê-lo para um valor em hexadecimal.

A partir daí, eu capturei os códigos de 4 botões do meu controle: Power, Volume+, Volume-, e Input. Esses são os códigos:

Código controle TV LG

Para montar meu controle vou utilizar o Arduino Pro Mini, por ter um tamanho menor. Como o Arduino Pro Mini não tem conversor USB serial, é necessário utilizar um outro Arduino para gravá-lo, veja como fazer isso aqui.
No circuito abaixo, o LED infravermelho é conectado através de um resistor de 220R no pino 3 do Arduino, e é nesse pino que serão gerados os pulsos por padrão da biblioteca IRremote.

Os quatro botões vão conectados nos pinos de 4 à 7, e todos possuem um capacitor cerâmico de 100nF (104) conectado a eles para fazer o debounce. Isso impede que seja feito mais de um disparo de dados quando o botão é pressionado.

Para fazer a alimentação do circuito eu utilizei uma bateria Li-Po com capacidade de 290Ah. Para o gerenciamento da carga e descarga da bateria eu utilizei o módulo para Arduino TP4056, assim podemos carregar o controle via USB. Como a tensão desse tipo de bateria varia entre 3.0 e 4.2V, e o Arduino, em 16MHz, trabalha com 5V, coloquei um conversor DC-DC do tipo Boost para elevar a tensão para 5V. É muito importante que você regule a tensão para 5V do conversor DC-DC antes de conectá-lo ao Arduino!

O circuito eletrônico ficou assim:

Controle remoto para TV com Arduino Por mini

Agora, para enviar os códigos no protocolo NEC, vamos utilizar esse código abaixo. Nesse caso temos quatro botões que estão conectados nos pinos de 4 até 7 do Arduino. Cada botão dispara um código através do método irsend.sendNEC. Lembre-se de colocar os códigos em hexadecimal capturados de cada tecla do controle que você deseja clonar.

É claro que, para esse projeto se tornar um controle de verdade são necessárias algumas melhorias como:

  • Colocar o microcontrolador no modo sleep para consumir muito menos energia;
  • Otimizar o circuito de carga e descarga da bateria para aproveitar a sua máxima capacidade;
  • Remover componentes como LEDs, que consomem energia desnecessariamente;
  • Otimizar a programação para utilizar a menor quantidade de ciclos de clock possíveis para realizar a tarefa. Isso reduz também o consumo de energia.
  • Entre outros…

Mas, o que vale com esse tipo de projeto, não é ter um controle pronto para vender em mãos, mas sim todo o aprendizado e diversão envolvida! Continue comigo no próximos artigos. Abraço!

Seja o vídeo para mais informações:

Referências

10 Comentários

    • João Paulo Alves

      Excelente, sempre deixando tudo muito bem explicado. Obrigado por adicionar mais um conhecimento fenomenal para todos nós.
      Marlon, conheço um site que tem um catálogo bem grande de controles já decodificados. Nem precisei comprar o controle remoto do meu PS2 para fazer automação.

  • Miguel Soares

    Profº Marlon, fiz um teste com esse projeto usando Arduino Uno, e funcionou para minha televisão LG também. A minha ideia agora é testar para minha outra televisão, da marca Sony, utilizando sua respectiva função sendSony(0xA90 , 12). Essa TV em questão está com o botão de Liga/Desliga com mau contato, mas todos os outros botões funcionam perfeitamente. Não tenho ainda a experiência de passar para a placa fenolite, mas tuas dicas e teu código me ajudaram muito. Em breve te conto se consegui com a TV da Sony. Obrigado, professor!

  • Nelson Pacheco

    Muito bom professor, em breve vou tentar juntar seus ensinamentos com automação residencial com Alexa. Cado esteja procurando assuntos para abordar, sugiro interação entre Arduino ou ESP e Alexa.

  • Tadeu Botelho

    Acabei de conhecer seu site através dessa publicação.
    Material muito bom. Você detalhou a parte do osciloscópio que foi muito importante para o entendimento dos emissores e receptores de RF.
    Obrigado

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *