Neste exemplo vou mostrar como faço para “ler” um controle remoto através do Arduino e com este mesmo Arduino enviar os comandos “lidos” do controle remoto para um determinado dispositivo. Vou utilizar o mini system Philips FW-C390 para demonstrar. A ideia também vale para televisores, decodificadores, DVDs e etc. Devem ser respeitados o tipos de código e taxas de bits de cada um. Ex.: NEC, Sony, PANASONIC, RC5, RC6 e etc.
Material utilizado
Arduino Uno Rev 3
Ethernet shield W5100
Cabo USB plug A e B macho/macho
LED receptor infravermelho compativel com 38 KHz
LED emissor infravermelho para controle remoto
Resistor 330 Ohm 1/4W
Jumper macho/macho
Protoboard
Mini System Philips FW-C390 com controle remoto
Vamos começar baixando a IDE Arduino 1.0.4 (Windows, MAC ou Linux) e a biblioteca IRremote. Enquanto escrevo, a última versão da IDE é a “1.8.2”, porém esta apresentou incompatibilidade com a biblioteca “IRremote”.
Considerando que tenham baixado ambos, comecem extraindo o IDE Arduino. Podem deixá-lo na área de trabalho mesmo. Procurem a pasta por nome de “libraries” e cole o conteúdo extraído do arquivo IRremote
nela.
Abra a IDE Arduino e clique conforme abaixo:
File > Examples > IRremote > IRrecvDump
Com o programa “IRrecvDump” aberto, faça o upload deste para sua placa Arduino. Agora vamos montar o circuito conforme abaixo:
Foto da montagem
Direcione o controle remoto para o sensor infravermelho e pressione os botões POWER, CD e TAPE 1/2 para conferir. Será mostrado no monitor da serial do IDE Arduino algo mais ou menos assim:
C4C Decoded RC5: C4C (12 bits) Raw (22): 3638 850 -900 850 -900 850 -900 1700 -950 800 -950 800 -1800 1700 -900 850 -1800 850 -900 1700 -950 800 53F Decoded RC5: 53F (12 bits) Raw (22): -15018 800 -950 1700 -1800 1700 -1800 1650 -950 850 -1800 800 -950 800 -900 850 -950 800 -900 850 -950 800 CBF Decoded RC5: CBF (12 bits) Raw (24): -24792 800 -950 800 -950 800 -950 1700 -950 800 -1800 1700 -1800 800 -950 800 -950 800 -950 800 -950 800 -950 800
Vejam que foram gerados para os botões POWER, CD e TAPE 1/2 os códigos de 12 bits C4C, 53F e CBF respectivamente. Repita o processo para os demais botõs desejados. Eu achei interessante utilizar 9 botões do controle remoto. São eles: POWER, CD, TAPE 1/2, TUNER, AUX, DIMINUI VOLUME, AUMENTA VOLUME, DIMINUI CANAL E AUMENTA CANAL (apelidei os 2 últimos). Recomendo que façam uma “cola” contendo os nomes dos botões e seus respectivos códigos. Isso ajuda bastante nos próximos passos.
A minha intenção é controlar o mini system através de meu smartphone ou notebook. Agora é que entra o Ethernet Shield. Observem o código abaixo:
/* LED emissor: PWM 3 */ #include <SPI.h> #include <Ethernet.h> #include <IRremote.h> byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; IPAddress ip(192, 168, 1, 3); IPAddress gateway(192, 168, 1, 1); IPAddress subnet(255, 255, 255, 0); EthernetServer server(80); IRsend irsend; void setup() { Ethernet.begin(mac, ip, gateway, subnet); server.begin(); } void loop() { EthernetClient client = server.available(); if (client) { boolean currentLineIsBlank = true; String vars; while (client.connected()) { if (client.available()) { char c = client.read(); vars.concat(c); if (vars.endsWith("/controle1")) { //botão POWER irsend.sendRC5(0xC4C, 12); delay(100); } if (vars.endsWith("/controle2")) { //botão CD irsend.sendRC5(0x53F, 12); delay(100); } if (vars.endsWith("/controle3")) { //botão TAPE 1/2 irsend.sendRC5(0xCBF, 12); delay(100); } if (vars.endsWith("/controle4")) { //botão TUNER irsend.sendRC5(0xC7F, 12); delay(100); } if (vars.endsWith("/controle5")) { //botão AUX irsend.sendRC5(0xD7F, 12); delay(100); } if (vars.endsWith("/controle6")) { //botão VOLUME MENOS irsend.sendRC5(0xC11, 12); delay(100); } if (vars.endsWith("/controle7")) { //botão VOLUME MAIS irsend.sendRC5(0xC10, 12); delay(100); } if (vars.endsWith("/controle8")) { //botão CANAL MENOS irsend.sendRC5(0xC5F, 12); delay(100); } if (vars.endsWith("/controle9")) { //botão CANAL MAIS irsend.sendRC5(0xC5E, 12); delay(100); } if (c == '\n' && currentLineIsBlank) { client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connnection: close"); client.println(); client.println("<!DOCTYPE HTML>"); client.println("<html>"); client.println("<head>"); client.println("<title>Philips FW-C390</title>"); client.println("</head>"); client.println("<body>"); client.println("<a href='/controle1'><button style='width:150px; height:40px;'>POWER</button></a><br/>"); client.println("<a href='/controle2'><button style='width:150px; height:40px;'>CD</button></a><br/>"); client.println("<a href='/controle3'><button style='width:150px; height:40px;'>TAPE 1/2</button></a><br/>"); client.println("<a href='/controle4'><button style='width:150px; height:40px;'>TUNER</button></a><br/>"); client.println("<a href='/controle5'><button style='width:150px; height:40px;'>AUX</button></a><br/>"); client.println("<a href='/controle6'><button style='width:150px; height:40px;'>VOLUME -</button></a><br/>"); client.println("<a href='/controle7'><button style='width:150px; height:40px;'>VOLUME +</button></a><br/>"); client.println("<a href='/controle8'><button style='width:150px; height:40px;'>CANAL -</button></a><br/>"); client.println("<a href='/controle9'><button style='width:150px; height:40px;'>CANAL +</button></a><br/>"); client.println("</body>"); client.println("</html>"); break; } if (c == '\n') { currentLineIsBlank = true; } else if (c != '\r') { currentLineIsBlank = false; } } } delay(1); client.stop(); } }
Observem que antes do código mostrado no monitor da serial temos um 0x
. É uma sintaxe obrigatória.
//se a string concatenada terminar com /controle1 if (vars.endsWith("/controle1")) { //então envia o código C4C do tipo RC5 de 12 bits irsend.sendRC5(0xC4C, 12); //com duração de 100 milisegundos para o LED emissor delay(100); }
Considerando que o upload do código acima foi feito em seu Arduino, vamos montar o circuito que envia os dados através do LED emissor.
Foto da montagem
Se notarem que o nosso novo controle só funciona muito próximo ao dispositivo a ser controlado, tentem remover o resisotor de 330 Ohm. A seguir vejam como o programa ficou em um computador com o navegador Google Chrome.
Por que não conseguimos enxergar a luz emitida pelos controles remotos?
A luz possue um comprimento de onda que determinam as cores. Os olhos humanos apenas conseguem enxergar estas ondas, quando estas vão desde a cor vermelha (430 nanômetros aproximados) até a cor violeta (700 nanômetros aproximados). Abaixo desta faixa temos o infravermelho (controle remoto) e acima, o ultravioleta (sol). Caso queiram muito ver seu controle remoto emitindo luz, o aponte para a câmera do seu smartphone enquanto aperta qualquer botão.