Guia completo do Controlo Remoto IR + Recetor IR para Arduino

Neste Tutorial, você aprenderá como funciona o Controlo Remoto por Infravermelho; aprenderá sobre alguns protocolos de codificação de Controlo Remoto IR; aprenderá também sobre o Recetor de Infravermelho AX-1838HS e como fazer uma montagem usando o Controlo Remoto IR com Arduino.

Introdução

Estes são os tópicos do Tutorial Guia completo do Controlo Remoto IR + Recetor IR para Arduino :

  • Introdução
  • Como funciona o Controlo Remoto IR?
  • Protocolos de codificação de Controlo Remoto IR
  • Recetor de Infravermelhos AX-1838HS
  • Controlo Remoto IR com Arduino

Como funciona o Controlo Remoto IR ?

O Controlo Remoto IR (infrared, ou infravermelho em português) de aparelhos eletrónicos consiste num pequeno dispositivo que contém um chip microcontrolador, um ou mais LEDs emissores de infravermelho e um teclado acoplado. Quando o usuário pressiona uma das teclas do controlo, uma sequência de pulsos de luz infravermelha é transmitida pelos LEDs. Estes pulsos formam um código que é único para cada tecla acionada.

O chip Microcontrolador do Controlo Remoto Transmissor, já vem programado com um protocolo definido pelo fabricante do aparelho. Mais tarde, informaremos sobre os protocolos mais usados no mercado.

Os pulsos de dados (código) são enviados do transmissor através de outros pulsos numa frequência bem maior, modulando o sinal a ser transmitido. Alguns trabalham com frequências diferentes de modulação, mas a mais comum atualmente é a frequência de 38 KHz. Na figura abaixo, pode perceber que quando o pulso de dado é 1, a frequência é transmitida e quando o pulso é 0, nenhuma frequência é transmitida. Este tipo de modulação chama-se PCM (modulação por código de pulsos). Com este tipo de  modulação, impede-se que a luz externa interfira na transmissão dos dados.

Link sobre PCM

O circuito Recetor IR que fica internamente no aparelho a ser controlado, consiste num descodificador responsável por descodificar os pulsos recebidos vindos do transmissor. Interpretando o código de cada tecla pressionada, o aparelho pode executar vários tipos de operações, como por exemplo, desligar, aumentar o volume e mudar de canal no caso de uma Televisão.

Hoje, com a integração de circuitos cada vez maiores, existem recetores de controlo remoto IR que já contêm o foto-sensor e todos os outros circuitos necessários para demodular os pulsos de controlo, como amplificadores de sinal, filtros, demodulador, integrador e comparador. O diagrama abaixo contém os vários circuitos que estão integrados no pequeno recetor. Após a demodulação dos pulsos, estes são descodificados por um outro Microcontrolador, para que o aparelho possa entender que tipo de operação deverá ser realizada.

Dica interessante sobre a percepção da Luz infravermelha: todos sabem que os nossos olhos não são sensíveis à luz infravermelha. Como podemos ver se ela esta a ser transmitida? Sabendo que as câmaras fotográficas digitais conseguem perceber o IR, faça esta experiência. Num ambiente escuro, direcione o seu controlo remoto IR para a frente da câmara do seu smartphone e deste modo, conseguirá perceber uma luz clara enviada pelo LED IR!

 

Protocolos de codificação de Controlo Remoto IR

Alguns fabricantes de aparelhos eletrónicos, como TVs e Amplificadores criaram no passado, protocolos de codificação dos pulsos de sinais infravermelhos. Estes são alguns dos protocolos mais comuns:

Vários outros fabricantes atuais de aparelhos têm usado estes protocolos antigos de codificação. Para saber a codificação do Controlo Remoto é importante identificar qual protocolo é usado.

Neste site, poderá identificar qual protocolo é usado no seu aparelho (Informe o fabricante do aparelho):

Banco de dados de IR

Obs: este site tem também um projeto bem interessante para envio de Códigos IR através do Arduino – Send IR.

Se quiser saber mais sobre Controlo Remoto IR, sugerimos a leitura deste link:

Teoria sobre Controle Remoto IR

Nesta tabela de códigos IR das TVs da marca LG (protocolo NEC) cada tecla do Controlo Remoto corresponde a uma sequência de 32 bits, que são traduzidos em um HEX Code.

 

Recetor de Infravermelhos AX-1838HS

Este é foto-recetor IR usado neste tutorial. Ele é amplamente utilizado em aparelhos para permitir o controlo remoto. Pode ser encontrado em TVs, rádios, aparelhos de multimédia e até em aparelhos de ar condicionado. Ele pode trabalhar com tensões de 2,1V a 5,5V. O consumo de energia é bem baixo, com uma corrente de aproximadamente 1,5 mA. A frequência de modulação dos pulsos de dados é de 38 KHz. E o comprimento de onda da luz infravermelha percebida é de 940 nm. O ângulo de visão é de aproximadamente 90 graus. A vantagem do uso deste foto-recetor IR é que ele já tem todo o circuito integrado necessário para demodular os pulsos.

Datasheet do IR-Receiver-AX-1838HS

AX-1838HS pinout

Para facilitar a montagem do circuito de controlo remoto, este foto-recetor é comercializado montado num módulo. Na placa deste módulo tem dois furos que permitem que este seja preso com parafusos. Tem também um LED indicador de pulsos recebidos. Isto é muito útil para garantir que o sinal está a ser transmitido e recebido corretamente.

Módulo Recetor IR AX-1838Hs

Neste tutorial, o controlo remoto IR (transmissor) é o da KEYES com 17 botões. Ele funciona com uma pilha botão CR2025. Antes de usá-lo, retire a proteção de plástico transparente que fica dentro do suporte da bateria. Para trocar a pilha, pressione a trava para o lado e puxe o suporte da pilha. Veja o diagrama na parte debaixo do controlo remoto. Este controlo remoto usa o protocolo de codificação da NEC.

Abaixo estão alguns diagramas do Protocolo NEC, para que possa entender como os pulsos de luz IR são traduzidos em códigos binários. Estas informações foram obtidas neste manual da LG – LG External control.

Veja que o BIT 0 tem a metade da largura do pulso do BIT 1 .

Este é o conjunto de 32 Bits que são enviados quando um dos botões do controlo remoto é pressionado. No início tem um pulso bem largo (9 ms) para identificação do Lead Code. Os quatro bytes de informação são formados pelos bits menos significativos (LSB) primeiro e posteriormente pelos bits mais significativos (MSB). O segundo byte tem os bits invertidos do primeiro byte (Custom code). E o quarto byte tem os bits invertidos do terceiro Byte (Data Code). Esta inversão dos bits é usada para verificação da validade dos mesmos.

Veja esta imagem abaixo gerada num analisador lógico. Estes são os pulsos transmitidos ao apertar a tecla CH+ num controlo remoto de TV da marca LG. A sequência de pulsos descodificada corresponde ao

HEX Code = 04 FB 00 FF .

 

Controlo Remoto IR com Arduino

Ao saber montar um circuito de Controlo Remoto IR com o Arduino, poderá implementar inúmeras aplicações bem interessantes como:

  • Controlo remoto de lâmpadas (liga/desliga ou até controlo do brilho);
  • Acionamento remoto de aparelhos;
  • Controlo remoto de alarmes;
  • Controlo remoto de câmara fotográfica.

A montagem do circuito é bem simples, interligando um Módulo Recetor IR AX-1838Hs ao Arduino. A alimentação do módulo é fornecida pelo 5V do Arduino. E o pino de saída dos pulsos do Recetor é conectado ao pino D11 do Arduino. O LED verde está conectado no pino D05, o LED azul no pino D06 e o LED vermelho no pino D07 do Arduino. Todos os LEDs têm uma resistência de 220 ohms em série com as ligações. O pino mais pequeno do LED é o cátodo, que deve ser conectado no terra (GND).

Este é o diagrama Fritzing do Controlo Remoto IR para Arduino:

 

Instalando a Biblioteca IRremote:

Pesquisando na WEB várias bibliotecas disponíveis para Controle Remoto IR para Arduino, escolhi a IRremote pois ela aceita vários tipos de Protocolos. Apesar de ela não descodificar corretamente o protocolo NEC, ela pode ser usada sem problemas.

Para instalar a nova Biblioteca IRremote, clique em:

Sketch > Incluir Biblioteca > Gerir Bibliotecas 

Após abrir a janela do Gestor de Biblioteca, refine a busca digitando IRremote. Na biblioteca IRremote, clique em More Info e depois em Instalar. Após alguns segundos, ela será automaticamente instalada. Lembre-se que o seu computador precisa estar conectado à Internet, para poder baixar a biblioteca. Após a instalação da Biblioteca, é necessário que feche e abra novamente o programa Arduino IDE.

 

O primeiro programa serve para testar a montagem do Módulo Recetor IR. Com este programa, ao pressionar a tecla do controlo remoto, o Arduino vai mostrar o código descodificado (HEX Code) correspondente.

Este é o Sketch do programa:

 

Esta é uma captura da tela do Monitor serial da IDE Arduino. Ao pressionar as teclas do Controlo remoto, os HEX codes são mostrados. Os códigos FFFFFFFF correspondem aos Repeat Codes e podem ser desprezados. Estes Repeat Codes aparecem quando fica a pressionar a tecla por um tempo maior.

 

Este outro programa de exemplo é bem interessante, pois com o uso do controlo remoto poderá ligar ou desligar os LEDs coloridos. Se quiser acionar um equipamento, poderá substituir os LEDs por um módulo de relé.

  • Tecla 1 aciona  Led Verde / pino D05
  • Tecla 2 aciona Led Azul / pino D06
  • Tecla 3 aciona Led Vermelho / pino D07

// Arduino Controle Remoto IR - LEDs coloridos

#include <IRremote.h>                  // Biblioteca IRemote
int RECV_PIN = 11;                     // Arduino pino D11 conectado no Recetor IR
IRrecv irrecv(RECV_PIN);               // criando a instância
decode_results results;                // declarando os resultados
bool LED5, LED6, LED7  = false;        // estado dos LEDs
int atraso = 250;                      // atraso após ligar LED

void setup() {
 Serial.begin(9600);                   // Monitor velocidade 9600 bps
 pinMode(7, OUTPUT);                   // LED vermelho no pino D07
 pinMode(6, OUTPUT);                   // LED azul no pino D06
 pinMode(5, OUTPUT);                   // LED verde no pino D05
 irrecv.enableIRIn();                  // Inicializa a receção de códigos
}

void loop() {
 results.value = 0;                    // zera os registos
 if (irrecv.decode(&results)) {        // se algum código for recebido
   Serial.println(results.value, HEX); // imprime o HEX Code
   irrecv.resume();                    // reinicializa o receptor
 }

 if (results.value == 0xFFB04F) {      // pressione tecla 3 para controlar LED vermelho (D07)
   LED7 = !LED7;                       // alterna o estado do LED D07
   digitalWrite(7, LED7);              // acende ou apaga LED vermelho (D07)
   delay(atraso);                      // atraso de 250 ms
 }
 
 if (results.value == 0xFF9867) {      // pressione tecla 2 para controlar LED azul (D06)
   LED6 = !LED6;                       // alterna o estado do LED D06
   digitalWrite(6, LED6);              // acende ou apaga LED vermelho (D07)
   delay(atraso);                      // atraso de 250 ms
 }

 if (results.value == 0xFF6897) {      // pressione tecla 1 para controlar LED verde (D05)
   LED5 = !LED5;                       // alterna o estado do LED D05
   digitalWrite(5, LED5);              // acende ou apaga LED verde (D05)
   delay(atraso);                      // atraso de 250 ms
 }
}