Controle remoto infravermelho no Arduino
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”
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.
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.
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
Conexões
O receptor possui apenas três terminais para interligar ao seu microcontrolador:
- VCC: Conectado à saída de alimentação
5Vdo Arduino (muitos modelos também operam perfeitamente em3.3Vno ESP32 e Raspberry Pi). - GND: Conectado ao pino de referência
GNDda 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.
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
0xindica que o número está em formato Hexadecimal. É exatamente esse valor (como0x16) 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_REPEATque 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!





