Como Funciona o IR?
O comando IR emite pulsos de luz infravermelha modulados a 38kHz. Cada botão tem um código único. O recetor desmodula o sinal e envia um sinal digital para o Arduino.
📌 Pinagem do Recetor (vista de frente)
| Pino | → | Arduino |
|---|---|---|
| Sinal (esq) | → | Pino 11 |
| GND (centro) | → | GND |
| VCC (dir) | → | 5V |
Instalar a Biblioteca IRremote
1
Abrir Gestor de Bibliotecas
No Arduino IDE: Sketch → Incluir Biblioteca → Gerir Bibliotecas
2
Pesquisar IRremote
Escreve "IRremote" na caixa de pesquisa. Seleciona a biblioteca de shirriff ou Arduino-IRremote.
3
Instalar
Clica em Instalar e aguarda. Versão 3.x ou superior recomendada.
Exercício 1 — Descobrir os Códigos dos Botões
Primeiro precisas de saber o código HEX de cada botão do teu comando.
ex1_ir_ler_codigos.ino
#include <IRremote.h>
const int PINO_IR = 11;
IRrecv recetor(PINO_IR);
decode_results resultado;
void setup() {
Serial.begin(9600);
recetor.enableIRIn();
Serial.println("Aponta o comando e prime um botão...");
}
void loop() {
if (recetor.decode(&resultado)) {
Serial.print("Código HEX: 0x");
Serial.println(resultado.value, HEX);
recetor.resume(); // Prepara para próxima receção
}
}
📋Anota os códigos HEX de cada botão que pretendes usar. Vai precisar deles no exercício 2.
Exercício 2 — Controlar LED com Comando
ex2_ir_controlo.ino
#include <IRremote.h>
const int PINO_IR = 11;
const int LED_R = 9;
const int LED_G = 10;
const int LED_B = 11; // Ajusta conforme os teus pinos
// Substitui pelos códigos do teu comando!
#define BTN_1 0xFF30CF
#define BTN_2 0xFF18E7
#define BTN_3 0xFF7A85
IRrecv recetor(PINO_IR);
decode_results resultado;
void setup() {
pinMode(LED_R, OUTPUT);
pinMode(LED_G, OUTPUT);
recetor.enableIRIn();
Serial.begin(9600);
}
void loop() {
if (recetor.decode(&resultado)) {
long codigo = resultado.value;
Serial.println(codigo, HEX);
switch (codigo) {
case BTN_1:
digitalWrite(LED_R, !digitalRead(LED_R)); // Toggle vermelho
break;
case BTN_2:
digitalWrite(LED_G, !digitalRead(LED_G)); // Toggle verde
break;
case BTN_3:
// Desliga todos
digitalWrite(LED_R, LOW);
digitalWrite(LED_G, LOW);
break;
}
recetor.resume();
}
}