Pular para o conteúdo
Uncategorized

Controle remoto infravermelho no Arduino

Bianca 7 min de leitura

razer controle sem fio por Infravermelho (IR) para o ecossistema Arduino é algo que pode literalmente glamurizar um projeto

Da para comandar um robô móvel à distância, acionar lâmpadas e fitas de LED no quarto, criar automações personalizadas ou controlar a velocidade de motores, o infravermelho entrega uma solução barata e fácil de fazer com Arduino. Você pode usar tanto módulos prontos quanto reaproveitar componentes de sucatas eletrônicas, bora ver como isso funciona

Como Funciona a “Luz Invisível”

Espectro eletromagnético mostrando a luz infravermelha

A luz infravermelha opera em uma faixa do espectro eletromagnético invisível ao olho humano, embora você consiga ver a luz sendo emitida apontando a câmera do celular para a ponta do controle remoto! E ela funciona assim:

  • Emissor (Controle Remoto): Um LED infravermelho que pulsa em modulando o sinal em 38 kHz. Cada tecla envia uma sequência de pulsos luminosos rápidos e lentos, formando um código binário próprio.
  • Receptor IR: Um sensor que ignora a luz ambiente, detecta a modulação em 38 kHz e decodifica os pulsos, entregando um valor hexadecimal limpo direto para os pinos do microcontrolador.

Sinal de comunicação infravermelho modulado em 38 kHz

Módulo Pronto vs. Componente Solto

Sabe quele pequeno componente metálico de 3 perninhas na placa de um aparelho de DVD antigo? Aquele carinha é um receptor infravermelho! Você pode resgatá-lo e reaproveitá-lo diretamente nos seus projetos com Arduino, Raspberry Pi ou ESP32. Ooou pode optar por usar o módulo pronto de kit.

Foto do receptor infravermelho com blindagem metalica e modulo

  • Módulo Receptor : O sensor já vem soldado em uma pequena PCB com resistor de pull-up, capacitor de desacoplamento e um LED indicador embutido. Na placa você terá os indicandores da a ordem dos pinos: VCC, GND e OUT / Sinal.
  • Componente solto ou de Sucata: Ele funciona exatamente igual ao módulo, mas como vem solto, você só precisa ficar atento à pinagem antes de ligar na protoboard.
  • Existe uma Pinagem Padrão olhando o componente de frente (com a “lente” arredondada virada para você e os terminais para baixo), a ordem mais comum é
    • Pino 1 (Esquerda): OUT / Sinal (liga no pino digital do Arduino/ESP/Raspberry).
    • Pino 2 (Centro): GND (GND do circuito).
    • Pino 3 (Direita): VCC (Alimentação 5V ou 3.3V).

    Dica  essa pinagem (OUT, GND, VCC) seja a dominante no mercado maker, algumas poucas famílias antigas de receptores invertem o VCC com o OUT. Na dúvida, se o componente aquecer ao ligar, desligue imediatamente e verifique a ligação. Para sensores avulsos, também é recomendável colocar um capacitor cerâmico de 100nF entre VCC e GND para filtrar ruídos da fonte!

E o Controle Remoto?

Você pode escolher quem será seu emissor

  • Reaproveitar Controles Velhos:  Como cada botão envia um código único, você pode usar os botões numéricos ou de volume para controlar funções totalmente diferentes no seu Arduino.
  • Kits Infravermelho Maker:  Vários kits já vêm com o módulo receptor e um mini controle remoto de 21 teclas, são uteis para vários projetos
Kit Infravermelho Maker com controle remoto e modulo receptor
kit controle e receptor

Conexões

O receptor possui apenas três terminais para interligar ao seu microcontrolador:

  • VCC: Conectado à saída de alimentação 5V do Arduino (muitos modelos também operam perfeitamente em 3.3V no ESP32 e Raspberry Pi).
  • GND: Conectado ao pino de referência GND da placa.
  • OUT / SINAL: Conectado a um pino digital com leitura, como o Pino 11.
  • LED Indicador Opcional: Para acompanhar os disparos visualmente, você pode usar o próprio LED interno da placa no pino 13 do arduino ou adicionar um LED externo com resistor de 220 ohms.

Esquema de montagem do receptor infravermelho no Arduino

Códigos do Seu Controle Remoto

Cada fabricante adota seu próprio protocolo e mapa de códigos hexadecimais para as teclas. Antes de programar qualquer acionamento, a primeira missão é fazer o rastreamento dos sinais emitidos pelo controle que você escolheu.

Instale a biblioteca IRremote no Gerenciador de Bibliotecas da Arduino IDE e carregue o código scanner a seguir no seu Arduino:

#include <IRremote.hpp>

const int PINO_RECEPTOR_IR = 11;

void setup() {
  Serial.begin(9600);
  IrReceiver.begin(PINO_RECEPTOR_IR, ENABLE_LED_FEEDBACK);
  
  Serial.println("==================================================");
  Serial.println("  SCANNER IR JULIALABS - AGUARDANDO TECLAS...     ");
  Serial.println("==================================================");
}

void loop() {
  if (IrReceiver.decode()) {
    if (!(IrReceiver.decodedIRData.flags & IRDATA_FLAGS_IS_REPEAT)) {
      Serial.print("Protocolo: ");
      Serial.print(IrReceiver.getProtocolString());
      Serial.print(" | Comando: 0x");
      Serial.println(IrReceiver.decodedIRData.command, HEX);
    }
    
    IrReceiver.resume();
  }
}

Como os Códigos Aparecem e Qual Valor Usar?

Abra o Monitor Serial da Arduino IDE configurado na velocidade de 9600 baud. Ao apontar o controle para o sensor e apertar os botões, você verá linhas idênticas a estas surgindo na tela:

Protocolo: NEC | Comando: 0x16
Protocolo: NEC | Comando: 0x19
Protocolo: NEC | Comando: 0x45

Agora, entenda o que cada parte significa para não errar na hora de programar:

  • Protocolo (ex: NEC, SONY, RC5): É a “língua” que o controle fala. Você não precisa mudar isso
  • Comando Hexadecimal (ex: 0x16, 0x19, 0x45): O prefixo 0x indica que o número está em formato Hexadecimal. É exatamente esse valor (como 0x16) que você vai copiar e colar no seu programa final para identificar qual botão foi pressionado.
  • Dica de ouro: Abra um bloco de notas (ou insira um comentário diretamente no seu código) ao lado e faça um pequeno dicionário do seu controle. Exemplo: 0x16 = Botão 1, 0x19 = Botão 2, 0x45 = Botão Power.
  • O que é o filtro de repetição? A condicional IRDATA_FLAGS_IS_REPEAT que colocamos no código impede que o Arduino interprete o fato de você segurar o botão por 1 segundo como se estivesse apertando a mesma tecla 50 vezes seguidas. Ele pega apenas o primeiro clique limpo!

Exemplo

A forma mais elegante e organizada de gerenciar múltiplas ações é usando a estrutura switch / case. No exemplo abaixo, substituí os códigos anotados para chavear um LED, acionar um relé e aplicar um comando de desligamento:

#include <IRremote.hpp>

const int PINO_RECEPTOR_IR = 11;
const int PINO_LED = 13;
const int PINO_RELE = 7;

// Substitua estes valores pelos codigos hexadecimais que voce anotou no scanner:
#define BOTAO_1     0x16
#define BOTAO_2     0x19
#define BOTAO_POWER 0x45

void setup() {
  Serial.begin(9600);
  IrReceiver.begin(PINO_RECEPTOR_IR, ENABLE_LED_FEEDBACK);
  
  pinMode(PINO_LED, OUTPUT);
  pinMode(PINO_RELE, OUTPUT);
  digitalWrite(PINO_RELE, LOW);
  
  Serial.println("Central IR Pronta! Aguardando comandos...");
}

void loop() {
  if (IrReceiver.decode()) {
    if (!(IrReceiver.decodedIRData.flags & IRDATA_FLAGS_IS_REPEAT)) {
      uint32_t comando = IrReceiver.decodedIRData.command;
      
      switch (comando) {
        case BOTAO_1:
          digitalWrite(PINO_LED, !digitalRead(PINO_LED));
          Serial.println("Comando 1: Alternou estado do LED!");
          break;

        case BOTAO_2:
          digitalWrite(PINO_RELE, !digitalRead(PINO_RELE));
          Serial.println("Comando 2: Alternou estado do Rele!");
          break;

        case BOTAO_POWER:
          digitalWrite(PINO_LED, LOW);
          digitalWrite(PINO_RELE, LOW);
          Serial.println("POWER: Todos os dispositivos desligados!");
          break;

        default:
          Serial.print("Comando nao cadastrado: 0x");
          Serial.println(comando, HEX);
          break;
      }
    }
    
    IrReceiver.resume();
  }
}

Ideias Maker Para Ir Além da Bancada

Existem vários locais onde esse sistema funcionaria muito bem, mas eu não deixo de pensar nele sendo usado em

Cosplays e Props Interativas, da para ocultar o receptor em armaduras ou acessórios impressos em 3D e usar um mini controle de bolso para disparar efeitos visuais e sonoros muito discretamente.

Coloque a Mão na Massa e não esqueça de me marcar!

 

Compartilhar: