Existem diferentes formas de comunicar com um sistema. Uma das mais utilizadas, especialmente com a televisão, é o controle remoto por infravermelho (ou IR). Veremos como controlar um Arduino com um receptor e um controle remoto IR.
Neste tutorial, utilizamos um controle remoto IR frequentemente vendido em kits Arduino.
Pré-requisito : Dê sentidos ao seu robô
Material
- Computador
- Placa Arduino
- Cabo USB ou adaptador serial/USB para ligar a placa Arduino ao PC
- Controle remoto IR
- Receptor IR
- 3 Cabos Dupont
Princípio de funcionamento
Um controle remoto por infravermelho, como o nome sugere, utiliza luz para enviar comandos entre o transmissor e o receptor. O transmissor, que consiste num diodo, emite raios infravermelhos que viajam pelo ar. Esses sinais luminosos são recebidos por um fotodíodo, que é capaz de transformá-los em sinais elétricos.
A comunicação por infravermelho é limitada a alguns metros de distância e deve ser direta, ou seja, não pode haver nenhum objeto no caminho do sinal luminoso. Luzes de neon ou a luz solar também podem perturbar a transmissão.
Esquema
O receptor IR é um sensor capaz de receber ondas infravermelhas. Para ler o sensor, é necessário alimentá-lo pela saída 5V do Arduino e ler o sinal obtido com uma entrada digital (aqui, o pino 9).
Código
Para decodificar a informação proveniente do controle remoto, usaremos a biblioteca IRremote.h. Ela permite detectar qual botão foi pressionado. Cada botão corresponde a um código hexadecimal, que deve ser identificado para cada controle remoto IR. O código a seguir mostra o valor hexadecimal quando um botão é pressionado. Com ele, pode configurar o seu código de acordo com o seu controle remoto.
//Library #include "IRremote.h" //Variable int receiverPin = 9; IRrecv irrecv(receiverPin); decode_results results; void setup(){ Serial.begin(9600); Serial.println(F("IR Receiver Decoder")); irrecv.enableIRIn(); // Start the receiver } void loop() { if (irrecv.decode(&results)){ // IR signal received? convertIR(); irrecv.resume(); // receive the next value } } void convertIR() // convert IR code { Serial.print(results.value); Serial.print(F(" -> ")); switch(results.value) { case 0xFFA25D: Serial.println(F("POWER")); break; case 0xFFE21D: Serial.println(F("FUNC/STOP")); break; case 0xFF629D: Serial.println(F("VOL+")); break; case 0xFF22DD: Serial.println(F("FAST BACK")); break; case 0xFF02FD: Serial.println(F("PAUSE")); break; case 0xFFC23D: Serial.println(F("FAST FORWARD")); break; case 0xFFE01F: Serial.println(F("DOWN")); break; case 0xFFA857: Serial.println(F("VOL-")); break; case 0xFF906F: Serial.println(F("UP")); break; case 0xFF9867: Serial.println(F("EQ")); break; case 0xFFB04F: Serial.println(F("ST/REPT")); break; case 0xFF6897: Serial.println(F("0")); break; case 0xFF30CF: Serial.println(F("1")); break; case 0xFF18E7: Serial.println(F("2")); break; case 0xFF7A85: Serial.println(F("3")); break; case 0xFF10EF: Serial.println(F("4")); break; case 0xFF38C7: Serial.println(F("5")); break; case 0xFF5AA5: Serial.println(F("6")); break; case 0xFF42BD: Serial.println(F("7")); break; case 0xFF4AB5: Serial.println(F("8")); break; case 0xFF52AD: Serial.println(F("9")); break; case 0xFFFFFFFF: Serial.println(F(" REPEAT"));break; default: Serial.println(F(" unknown ")); } delay(500); }
Aplicação
Uma das aplicações mais populares é controlar a cor de um LED RGB com um controle remoto. Vamos atribuir uma cor diferente a cada botão do controle remoto. É possível utilizar os outros botões para realizar outras ações, como aumentar/diminuir o brilho ou fazer piscar o LED.
//Library #include "IRremote.h" //Constant const int receiverPin = 9; #define ledRPin 11 #define ledGPin 5 #define ledBPin 6 //Variable int power=50; bool ledState=0; IRrecv irrecv(receiverPin); decode_results results; void setup(){ Serial.begin(9600); Serial.println(F("IR Receiver Decoder")); irrecv.enableIRIn(); // Start the receiver pinMode(ledRPin,OUTPUT); pinMode(ledGPin,OUTPUT); pinMode(ledBPin,OUTPUT); lightRGB(255,0,0); } void loop() /*----( LOOP: RUNS CONSTANTLY )----*/ { if (irrecv.decode(&results)){ // IR signal received? convertIR(); irrecv.resume(); // receive the next value } } void convertIR() // convert IR code { Serial.print(results.value); Serial.print(F(" -> ")); switch(results.value) { case 0xFFA25D: Serial.print(F("POWER ")); ledState=!ledState; Serial.print(ledState); if(!ledState) lightRGB(0,0,0); break; case 0xFFE21D: Serial.print(F("FUNC/STOP")); break; case 0xFF629D: Serial.print(F("VOL+ power:")); power=power+10; power=min(power,100); Serial.print(power); break; case 0xFFA857: Serial.print(F("VOL- power:")); power=power-10; power=max(power,0); Serial.print(power); break; case 0xFF22DD: Serial.print(F("FAST BACK")); break; case 0xFF02FD: Serial.print(F("PAUSE")); break; case 0xFFC23D: Serial.print(F("FAST FORWARD")); break; case 0xFFE01F: Serial.print(F("DOWN")); break; case 0xFF906F: Serial.print(F("UP")); break; case 0xFF9867: Serial.print(F("EQ")); break; case 0xFFB04F: Serial.print(F("ST/REPT")); break; case 0xFF6897: Serial.print(F("0")); if(ledState) lightRGB(255,255,255); break; case 0xFF30CF: Serial.print(F("1")); if(ledState) lightRGB(255,0,0); break; case 0xFF18E7: Serial.print(F("2")); if(ledState) lightRGB(0,255,0); break; case 0xFF7A85: Serial.print(F("3")); if(ledState) lightRGB(0,0,255); break; case 0xFF10EF: Serial.print(F("4")); if(ledState) lightRGB(255,55,55); break; case 0xFF38C7: Serial.print(F("5")); if(ledState) lightRGB(55,255,55); break; case 0xFF5AA5: Serial.print(F("6")); if(ledState) lightRGB(55,55,255); break; case 0xFF42BD: Serial.print(F("7")); if(ledState) lightRGB(255,255,55); break; case 0xFF4AB5: Serial.print(F("8")); if(ledState) lightRGB(255,55,255); break; case 0xFF52AD: Serial.print(F("9")); if(ledState) lightRGB(55,255,255); break; case 0xFFFFFFFF: Serial.print(F(" REPEAT"));break; default: Serial.print(F(" unknown ")); lightRGB(0,0,0); } Serial.println(); delay(500); } void lightRGB(int r, int g, int b){ if(0){ r=255-r; g=255-g; b=255-b; } analogWrite(ledRPin, r*power/100); analogWrite(ledGPin, g*power/100); analogWrite(ledBPin, b*power/100); }
Fontes
Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie