Controle remoto IR com Arduino

Ao longo dos nossos tutoriais nós apresentamos uma infinidade de soluções para que você pudesse desenvolver sistemas de acionamento com botões, com comandos através da IDE do Arduino, com elementos criados a partir de códigos HTML, entre outros. Neste tutorial, nós vamos aprender a realizar acionamentos com mais um elemento, ou melhor, um conjunto de elementos, o kit controle remoto IR + receptor IR.

Controle remoto controlando tv

[toc]

kit robotica educacional com Arduino ESP ou Microbit

O kit Controle remoto IR + Receptor IR

O kit controle remoto IR + Receptor IR consiste em um conjunto composto por um controle remoto dotado de uma bateria, um módulo receptor de infravermelho, um led infravermelho e alguns jumpers para que o usuário utilize caso seja necessário.

Figura 1 – Kit controle remoto IR + Receptor IR

Como funciona o controle remoto infravermelho

Um controle remoto IR é composto por um teclado com diversos botões, um microcontrolador e um LED emissor infravermelho, que em geral ficar em sua parte superior.

Seu princípio de funcionamento é bem simples. No momento em que um dos seus botões é pressionado, uma sequência de pulsos luminosos é emitida através do LED infravermelho. Esta sequência corresponde a um número em hexadecimal, que por sua vez, diz respeito ao código em questão.

Os equipamentos a serem controlados possuem um módulo receptor de infravermelho que recebe os pulsos luminosos e traduz os mesmos em uma sequência de pulsos elétricos.

Módulo receptor infravermelho
Exemplo de módulo receptor infravermelho

Sabendo disso, quando vamos implementar alguma aplicação com um controle remoto, nós devemos primeiramente mapear o controle, pois, nós não sabemos o código proveniente de cada botão logo de início. Após conhecermos o resultado de cada um dos comandos de um determinado controle, já podemos partir para o desenvolvimento de alguma solução de automação utilizando o mesmo.

– Modulação Infravermelha

A luz infravermelha é um tipo de radiação emitida pelo sol, lâmpadas e qualquer outra coisa que emane calor. Para que estes outras fontes de radiação infravermelha não interfiram no sinal transmitido entre controle e receptor, é utilizada a técnica de modulação de sinal.

Nessa técnica, inserimos a informação transmitida dentro de outra frequência, que no nosso caso será de 38kHz. Para isso precisamos de um modulador e um demodulador.

Comparação entre informação e informação modulada pelo módulo receptor infravermelho
Comparação entre informação e informação modulada.

O modulador existente dentro do controle remoto transforma o código em hexadecimal que representa o botão pressionado em um sinal dentro da frequência de 38kHz. Posteriormente, o sinal em questão é enviado pelo LED IR.

O demodulador fará parte do módulo receptor, o qual, recebe a informação modulada e faz a demodulação para recuperar a informação original.

esquema modulação infravermelho indo do controle remoto ao Arduino
Esquema modulação infravermelho indo do controle remoto ao Arduino

A seguir é possível comparar o sinal transmitido e o modulado no osciloscópio.

Sinal modulado IR no osciloscópio
Sinal modulado Infravermelho no osciloscópio

Em cima vemos o sinal modulado em 38Khz e em baixo vemos o sinal desmodulado.


Mãos à obra – Acionando saídas digitais com o kit Controle remoto IR + Receptor IR

Componentes necessários

Para desenvolver este projeto, precisaremos dos seguintes componentes:

Montando o projeto

Esquema de montagem do projeto com Arduino Uno e Módulo receptor infravermelho
Esquema de montagem do projeto com Arduino Uno e Módulo receptor infravermelho

Programando

Neste momento nós iremos apresentar o primeiro código que deve ser utilizado. O programa em questão serve para ajudar o usuário a mapear os botões do controle, ou seja, serve para que o operador do sistema saiba qual será o dado que chegará para a nossa placa Arduino quando um determinado botão for acionado.

#include <IRremote.h>
 
IRrecv receptor(10);
 
decode_results resultado;
 
void setup()
{
  Serial.begin(9600);
  receptor.enableIRIn(); 
}
void loop() 
{
  if (receptor.decode(&resultado)) 
  {
    Serial.println(resultado.value, HEX);
    receptor.resume(); 
  }
  delay(100);
}

Após compilarmos o código apresentado, basta pressionarmos os botões do controle, um a um, para então anotarmos os códigos relacionados a cada um dos mesmos.

Mapeamento do controle remoto
Mapeamento do controle remoto

Em seguida, nós vamos utilizar um outro código, que por sua vez, será o responsável pelo desenvolvimento da aplicação propriamente dita.

#include <IRremote.h>  
    
IRrecv receptor(10);  
decode_results resultado; 
int codigo; 
  
void setup()  
{  
  pinMode(5, OUTPUT);    
  receptor.enableIRIn(); 
  Serial.begin(9600);
}  
   
void loop()  
{  
  if (receptor.decode(&resultado))  
  {  
    Serial.print("Codigo do botao: ");  
    Serial.println(resultado.value, HEX);  
    codigo = resultado.value; 
    switch (codigo)  
    {  
      case (0xFF6987):   
      digitalWrite (5,HIGH);    
      break;   

      case (0xFF9867): 
      digitalWrite (5,LOW); 
      break;  
    }  
  receptor.resume();  
  }
  delay(100);  
}

Colocando para funcionar

[ Vou incluir uma foto do hardware montado aqui Allan, o que acha?]


Entendendo a fundo

Software – Mapeamento dos botões

Neste ponto, serão demonstrados todos os passos para o desenvolvimento do código que deve ser inserido no Arduino UNO para que seja possível mapearmos os botões do nosso controle IR.

– Incluindo as bibliotecas que serão utilizadas

O primeiro passo que devemos realizar para atingir o objetivo proposto consiste na inclusão da biblioteca adequada para permitir a interação do receptor IR com o Arduino UNO. Neste tutorial, nós vamos utilizar uma biblioteca chamada IRremote.h, que por sua vez, pode ser obtida aqui.

#include <IRremote.h>

– Criando o objeto da classe IRrecv

Na parte de criação de objetos, nós devemos criar um objeto chamado receptor, que por sua vez, está atrelado ao pino que será utilizado para o recebimento de dados por meio do receptor IR.

– Definindo as configurações iniciais

Na função setup() nós vamos iniciar a comunicação serial através da sentença Serial.begin() e em seguida vamos iniciar o funcionamento do nosso receptor IR por meio da sentença receptor.enableIRIn().

– Criando o objeto da classe IRrecv

Na parte de criação de objetos, nós devemos criar um objeto chamado receptor, que por sua vez, está atrelado ao pino que será utilizado para o recebimento de dados por meio do receptor IR.

– Declarando uma variável para armazenar o valor dos botões

Após a criação dos objetos nós devemos declarar um variável do tipo inteiro, cuja função será armazenar o valor recebido pelo receptor IR, para que este possa ser posteriormente utilizado no acionamento de uma saída digital.

int codigo;

– Definindo as configurações iniciais

Na função setup() nós vamos iniciar a comunicação serial através da sentença Serial.begin() e em seguida vamos iniciar o funcionamento do nosso receptor IR por meio da sentença receptor.enableIRIn(). Por último, nós definimos o modo de operação do pino 5 do Arduino UNO para que este atue como uma saída digital.

– Acionando saídas digitais

Dentro da função loop() nós devemos primeiramente criar uma estrutura condicional if() cujo argumento será a sentença receptor.decode(&resultado). A função do procedimento citado consiste em fazer com que a nossa placa Arduino aguarde até o momento em que um botão do controle remoto seja pressionado, de modo que, somente após este ato, ocorrerá o prosseguimento da execução do programa.

Caso algum botão do controle seja pressionado, o Arduino deverá apresentar a frase “Codigo do botão:” seguida do valor em hexadecimal atrelado ao botão em questão em virtude das sentenças do tipo Serial.print() Serial.println(). Posteriormente, nós armazenamos o valor citado na variável código, que por sua vez, será testada em uma estrutura do tipo switch/case, de modo que, caso o mesmo corresponda ao valor FF6987, a porta de saída digital 5 deverá ter nível alto em seu terminal, ao passo que, caso o valor citado corresponda à opção FF9867, o terminal citado deverá estar com nível baixo.

Assim como no caso anterior, para um melhor funcionamento da aplicação, utilize a função delay() no final da mesma para que a leitura realizada pelo receptor IR seja realizada da maneira adequada.

void loop()  
{  
  if (receptor.decode(&resultado))  
  {  
    Serial.print("Codigo do botao: ");  
    Serial.println(resultado.value, HEX);  
    codigo = resultado.value; 
    switch (codigo)  
    {  
      case (0xFF6987):   
      digitalWrite (5,HIGH);    
      break;   

      case (0xFF9867): 
      digitalWrite (5,LOW); 
      break;  
    }  
  receptor.resume();  
  }
  delay(100);  
}

Considerações finais

Neste tutorial, demonstramos como você deve proceder para realizar acionamentos com o kit controle remoto IR + Receptor IR. Esperamos que você continue nos acompanhando e sinta-se à vontade para nos dar sugestões. Lembre-se de deixar suas dúvidas nos comentários abaixo.

Privacy Preference Center