Receptor IR e controle remoto: projetos controlados à distância com Arduino
Como funciona um receptor infravermelho (IR)? Ligação do VS1838B, leitura dos códigos dos botões com a biblioteca IRremote, o protocolo NEC, controle de LEDs e relés pelo controle remoto, envio de IR com um LED IR e uso com ESP32 e Pico.
Os controles remotos de TVs, aparelhos de ar-condicionado e sons funcionam com luz infravermelha (IR). Coloque em um Arduino um receptor IR que custa quase nada e você consegue ler os botões de praticamente qualquer controle da sua casa e usá-los para comandar lâmpadas, LEDs, motores ou música. Não precisa de pareamento, app nem internet; basta apontar o controle para a placa e apertar um botão. É o caminho mais fácil e barato para o seu primeiro projeto controlado à distância.

Como funciona um controle remoto infravermelho?
O LED IR na ponta do controle emite luz em cerca de 940 nm, que o olho não enxerga. A luz não fica acesa o tempo todo; ela viaja sobre um sinal portador que pisca 38.000 vezes por segundo. O circuito dentro do receptor só presta atenção na luz que pisca nessa frequência, então a luz do sol e as lâmpadas não atrapalham o sinal. O receptor transforma as piscadas em pulsos digitais limpos e coloca a saída em LOW enquanto o sinal está presente.
Qual botão foi apertado fica codificado na duração dos pulsos e dos intervalos entre eles. Existem diferentes “idiomas” para isso, chamados protocolos: o mais comum é o NEC (um byte de endereço e um byte de comando), e os protocolos Sony, RC5 (Philips) e Samsung também são comuns. Por sorte, a biblioteca faz a decodificação; você só lê o código do botão.
Especificações (VS1838B)
| Característica | Valor |
|---|---|
| Frequência portadora | 38 kHz |
| Comprimento de onda | Cerca de 940 nm |
| Alimentação | 2,7–5,5 V |
| Alcance | 8–10 m (depende da pilha do controle e do ângulo) |
| Ângulo de recepção | Cerca de ±35° |
| Saída | LOW enquanto há sinal (ativa em LOW) |
| Pinos | OUT, GND, VCC |
Ligação do receptor IR
| Pino do receptor | Arduino Uno | ESP32 | Raspberry Pi Pico |
|---|---|---|---|
| OUT (S) | D2 | GPIO 15 | GP16 |
| GND (–) | GND | GND | GND |
| VCC (+) | 5V | 3V3 | 3V3 |
Lendo os códigos dos botões com a biblioteca IRremote
No Gerenciador de Bibliotecas, busque IRremote e instale a biblioteca de Armin Joachimsmeyer. O código abaixo funciona com a versão 4.x; a cada botão apertado, ele mostra no Monitor Serial o protocolo, o endereço e o código do comando. Se você encontrar comandos como IRrecv e decode(&results) em exemplos antigos na internet, eles são de uma versão antiga.
1#include <IRremote.hpp>
2
3const int IR_PIN = 2;
4
5void setup() {
6 Serial.begin(9600);
7 IrReceiver.begin(IR_PIN, ENABLE_LED_FEEDBACK); // sinyal gelince dahili LED yanar / onboard LED blinks on signal
8}
9
10void loop() {
11 if (IrReceiver.decode()) {
12 Serial.print("Komut / command: 0x");
13 Serial.println(IrReceiver.decodedIRData.command, HEX);
14 IrReceiver.printIRResultShort(&Serial); // protokol ve adres / protocol and address
15 IrReceiver.resume(); // sonraki tuşa hazırlan / ready for the next key
16 }
17}Aperte os botões do seu controle um por um e anote os códigos. Os controlinhos de 21 teclas que vêm nos kits costumam usar o protocolo NEC, e os códigos deles geralmente são os mostrados abaixo; mesmo assim, confirme lendo os códigos do seu próprio controle:
| Botão | Comando (NEC) |
|---|---|
| CH- | 0x45 |
| CH | 0x46 |
| CH+ | 0x47 |
| PREV | 0x44 |
| NEXT | 0x40 |
| PLAY/PAUSE | 0x43 |
| VOL- | 0x07 |
| VOL+ | 0x15 |
| 0 | 0x16 |
| 1 | 0x0C |
| 2 | 0x18 |
| 3 | 0x5E |
Controlando um LED e um relé pelo controle remoto
Depois que você conhece os códigos, pode dar uma função a cada botão. No exemplo abaixo, o botão “1” liga e desliga um relé, e VOL+ e VOL- ajustam o brilho de um LED com PWM. Quando um botão fica apertado, o controle envia sinais de repetição; em funções de liga-desliga você precisa ignorar essas repetições, senão o relé fica ligando e desligando. Para a ligação do relé, veja O que é módulo relé?
1#include <IRremote.hpp>
2
3const int IR_PIN = 2;
4const int LED_PIN = 9; // PWM pini / PWM pin
5const int RELAY_PIN = 7; // aktif LOW röle / active-LOW relay
6
7bool relayOn = false;
8int brightness = 128;
9
10void setup() {
11 pinMode(LED_PIN, OUTPUT);
12 pinMode(RELAY_PIN, OUTPUT);
13 digitalWrite(RELAY_PIN, HIGH);
14 IrReceiver.begin(IR_PIN);
15}
16
17void loop() {
18 if (!IrReceiver.decode()) return;
19 bool repeat = IrReceiver.decodedIRData.flags & IRDATA_FLAGS_IS_REPEAT; // tuş basılı tutuluyor / key held down
20 switch (IrReceiver.decodedIRData.command) {
21 case 0x0C: // "1": röleyi aç-kapa / toggle the relay
22 if (!repeat) {
23 relayOn = !relayOn;
24 digitalWrite(RELAY_PIN, relayOn ? LOW : HIGH);
25 }
26 break;
27 case 0x15: // VOL+: daha parlak / brighter
28 brightness = min(brightness + 15, 255);
29 break;
30 case 0x07: // VOL-: daha sönük / dimmer
31 brightness = max(brightness - 15, 0);
32 break;
33 }
34 analogWrite(LED_PIN, brightness);
35 IrReceiver.resume(); // sonraki tuşa hazırlan / ready for the next key
36}Enviando sinais IR com Arduino
O Arduino não só escuta controles remotos; ele mesmo pode ser um controle. Ligue um LED IR (940 nm) ao pino 3 do Uno por um resistor de 100 Ω; para aumentar o alcance, você pode acionar o LED por um transistor. Primeiro leia, com o código acima, o controle do aparelho que você quer comandar para descobrir o endereço e o comando, e depois envie o mesmo código pelo Arduino:
1#include <IRremote.hpp>
2
3const int IR_SEND_PIN = 3; // IR LED, 100 Ω direnç ile / IR LED with a 100 Ω resistor
4
5void setup() {
6 IrSender.begin(IR_SEND_PIN);
7}
8
9void loop() {
10 IrSender.sendNEC(0x00, 0x46, 0); // adres, komut, tekrar sayısı / address, command, repeats
11 delay(5000);
12}IR com ESP32 e Raspberry Pi Pico
O VS1838B funciona bem em 3,3 V, então se liga direto no ESP32 e no Pico. A biblioteca IRremote suporta o ESP32; você pode ligar o receptor em qualquer pino de entrada, como o GPIO 15. Com um ESP32 você pode repassar os botões do controle para outros aparelhos via Wi-Fi ou montar um “controle inteligente” que envia comandos do celular para a TV com um LED IR. No Pico com MicroPython, usa-se a biblioteca micropython_ir, de Peter Hinch:
1from machine import Pin
2from ir_rx.nec import NEC_8 # micropython_ir kütüphanesi / library (Peter Hinch)
3import time
4
5def on_key(command, address, ctrl):
6 if command >= 0: # negatif değerler tekrar ya da hata / negatives mean repeat or error
7 print("Komut / command: 0x{:02X}".format(command))
8
9ir = NEC_8(Pin(16, Pin.IN), on_key) # GP16 → OUT
10
11while True:
12 time.sleep(1)Ideias de projetos com receptor IR e controle remoto
- Lâmpada controlada à distância: acenda uma lâmpada da rede elétrica por meio de um relé com um botão sobrando no controle da TV.
- Controle de cores: mude a cor de um LED RGB com os botões numéricos.
- Carrinho robô controlado à distância: um carrinho cujos dois motores você dirige com os botões de seta.
- Caixinha de melodias: associe uma música diferente a cada botão numérico; para a parte do som, veja O que é buzzer?
- Controle que aprende: grave os códigos de outros controles e envie todos de um único Arduino.
- Fechadura com senha: abra uma fechadura com um servo quando a sequência certa de botões for digitada.
Erros comuns e como corrigir
- Nenhum código chega: o fio OUT está em um pino diferente do código, as pernas do receptor estão invertidas ou a pilha do controle acabou; teste o controle com a câmera do celular.
- O código de exemplo não compila: os exemplos antigos da internet são para a IRremote 2.x; a versão 4.x usa IrReceiver.begin() e IrReceiver.decode().
- Aparecem códigos aleatórios: o receptor pode estar virado para a luz direta do sol ou para uma lâmpada fluorescente; coloque-o na sombra.
- O botão de liga-desliga age duas vezes: os sinais de repetição não estão sendo ignorados; confira a flag IRDATA_FLAGS_IS_REPEAT.
- O tone() ou o PWM nos pinos 3 e 11 funcionam mal: no Uno, eles usam o mesmo timer (Timer2) que a IRremote.
- Alcance muito curto ao enviar com um LED IR: acione o LED com uma corrente maior por meio de um transistor e aponte para o aparelho.
O receptor IR é o jeito mais simples e barato de entrar no mundo sem fio; até os controles velhos esquecidos pela casa ganham uma segunda vida nos seus projetos novos. No app BlueGrays você encontra projetos para ler códigos de controle, ligar LEDs, tocar melodias pelo controle, comandar uma lâmpada da rede elétrica e montar um controle universal com ESP32, com esquemas do circuito e código.
Perguntas frequentes
A que distância um receptor IR consegue captar o sinal?
Receptores como o VS1838B captam o sinal a até 8–10 metros com um bom controle e visão direta. O alcance diminui quando a pilha do controle enfraquece, o ângulo aumenta e o ambiente fica mais iluminado.
Qualquer controle remoto funciona com o Arduino?
Quase todos os controles infravermelhos que usam 38 kHz funcionam, e a IRremote decodifica a maioria dos protocolos comuns. Com controles que usam 36, 40 ou 56 kHz, o alcance pode ser menor. Controles que funcionam por rádio (como os de 433 MHz) não podem ser lidos com um receptor IR.
O receptor IR funciona sob a luz do sol?
O filtro dentro do receptor bloqueia boa parte da luz constante, mas a luz direta do sol pode saturar o receptor e reduzir muito o alcance. Ao ar livre, mantenha o receptor na sombra ou dentro de um pequeno tubo de proteção.
O controle IR funciona através da parede?
Não. A luz infravermelha não atravessa paredes; é preciso haver visão direta entre o controle e o receptor, ou uma superfície em que a luz possa refletir. Para comandar um aparelho em outro cômodo, use módulos de RF ou Wi-Fi.
Qual versão da IRremote devo usar?
Use a versão atual 4.x, que usa IrReceiver.begin(), IrReceiver.decode() e decodedIRData.command. Os comandos IRrecv irrecv(pin) e decode(&results), vistos em exemplos antigos na internet, são da versão 2.x e não são compatíveis com a versão nova.
Posso usar o celular como controle remoto?
Alguns celulares Android têm emissor IR embutido e podem funcionar como controle com o app certo. Se o seu celular não tem IR, você pode criar uma página web em um ESP32 e enviar os comandos do celular para o aparelho por meio de um LED IR.
Projetos para montar depois desta leitura
Ver todos os projetos
Leitura de códigos de controle remoto IR
Cada botão do controle remoto da sua TV envia um código secreto usando uma luz que você não consegue ver. O receptor infravermelho capta essa luz, e o Arduino exibe na tela do computador o código de c

Ligar e desligar LEDs com receptor IR e controle remoto
É como controlar três lâmpadas separadas sem sair da poltrona: os botões 1, 2 e 3 do controle remoto acendem os LEDs azul, vermelho e verde, e os botões 4, 5 e 6 os apagam na mesma ordem. O botão de l

Tocar melodias com receptor IR, controle remoto e buzzer
Monte uma caixinha de música que toca melodias com os botões de um controle de TV. Um receptor infravermelho capta o sinal do controle; um botão faz o buzzer tocar uma música animada de videogame, out

Acender uma lâmpada de 220V com controle remoto
Ligue e desligue uma lâmpada de casa com o controle da TV, sem sair do sofá. O Arduino lê o sinal de luz invisível do controle; o botão de ligar aciona o relé e acende a lâmpada, e o botão de silencia

Sistema de segurança com laser
Como nas cenas de roubo com lasers dos filmes: um feixe de laser atinge um sensor de luz e, assim que alguém passa e interrompe o feixe, o LED vermelho acende e o buzzer começa a soar. O alarme não pa

Controle remoto com receptor IR, ESP32 e display LCD
Neste projeto, usamos o módulo receptor IR TSOP4838 para captar sinais de um controle remoto de TV, ar-condicionado ou outro controle infravermelho com o ESP32. Com a biblioteca IRremote v4, exibimos os códigos brutos decodificados diferentes de zero no display LCD I2C. Este exemplo serve para identificar os códigos do controle remoto; não inclui ligar ou desligar um LED nem ajustar seu brilho pelo controle. É um ótimo ponto de partida para usar controles antigos em uma casa inteligente.

Controle remoto universal IR com ESP32 (receptor IR + controle remoto + 3 LEDs + buzzer + OLED)
Com o ESP32, você pode ler os sinais de um controle remoto IR comum e usá-lo para controlar seu próprio dispositivo! Neste projeto, usamos um receptor infravermelho (protocolo NEC, 38 kHz) para captar os sinais de um controle IR de 20 botões. Definimos ações diferentes para cada botão: os botões 1, 2 e 3 ligam e desligam três LEDs separados; o botão PWR apaga todos; e os números 4–9 exibem indicações especiais no OLED.

Sistema de alerta com laser
Você monta uma barreira de luz invisível, como nos filmes. Um laser ilumina um sensor de luz do outro lado; assim que alguém passa e interrompe o feixe, o LED acende e o buzzer soa. Quando o feixe vol
Mais artigos
App BlueGrays
Monte este circuito passo a passo pelo celular
Esquema do circuito, código e lista de componentes em uma só tela. Mais de 200 projetos com Arduino, ESP32 e Pico prontos para montar.
Escaneie com seu celular
Aponte a câmera para o código para abrir a loja de aplicativos do seu celular.
ou abrir a loja

