Controle remoto IR no arduino


Neste tutorial vamos mostrar como utilizar o IR no arduino. . A programação será feita ao apertar um botão do controle remoto, um LED acenderá. Um LED para cada botão do controle remoto.

Materiais:

2 - LEDs Verdes 
2 - LEDs amarelos
1 - LED Azul
1 - LED Vermelho 
7- Resistores de 220 ohms
7- Fios (JUMP)
 Caso nao esteja disponível  baixe e inclua a biblioteca IRRemote.

Faça a seguinte ligação no Arduino:

Depois de feito as ligações acima, o upload da programação abaixo:

int irPin = 2; //Pin Sensor 1 ligado ao pino do Arduino 2
int statLED = 3;
int statLED1 = 4;
int statLED2 = 5;
int statLED3 = 6;
int statLED4 = 7;
int statLED5 = 8;
int statLED6 = 9; //Alterna o LED toda vez que o botão e pressionado.
int start_bit = 2200; //Start bit threshold (Microseconds)
int bin_1 = 1000; //Binary 1 threshold (Microseconds)
int bin_0 = 400; //Binary 0 threshold (Microseconds)
void setup() {
pinMode(statLED, OUTPUT);
pinMode(statLED1, OUTPUT);
pinMode(statLED2, OUTPUT);
pinMode(statLED3, OUTPUT);
pinMode(statLED4, OUTPUT);
pinMode(statLED5, OUTPUT);
pinMode(statLED6, OUTPUT);
digitalWrite(statLED, LOW);
digitalWrite(statLED1, LOW);
digitalWrite(statLED2, LOW);
digitalWrite(statLED3, LOW);
digitalWrite(statLED4, LOW);
digitalWrite(statLED5, LOW);
digitalWrite(statLED6, LOW);
pinMode(irPin, INPUT);
Serial.begin(9600);
Serial.println("Waiting: ");
}
void loop() {
int key = getIRKey(); //Fetch the key

if(key != 0) //Ignore keys that are zero
{
Serial.print("Key Recieved: ");
switch(key)
{
case 144: Serial.print("CH Up");
if(digitalRead(statLED) == LOW) //This toggles the statLED every time power button is hit
digitalWrite(statLED, HIGH);
else
digitalWrite(statLED, LOW);
break;

case 145: Serial.print("CH Down");
if(digitalRead(statLED1) == LOW) //This toggles the statLED every time power button is hit
digitalWrite(statLED1, HIGH);
else
digitalWrite(statLED1, LOW);
break;

case 146: Serial.print("VOL Right");
if(digitalRead(statLED2) == LOW) //This toggles the statLED every time power button is hit
digitalWrite(statLED2, HIGH);
else
digitalWrite(statLED2, LOW);
break;
case 147: Serial.print("VOL Left");
if(digitalRead(statLED3) == LOW) //This toggles the statLED every time power button is hit
digitalWrite(statLED3, HIGH);
else
digitalWrite(statLED3, LOW);
break;
case 148: Serial.print("Mute");
if(digitalRead(statLED4) == LOW) //This toggles the statLED every time power button is hit
digitalWrite(statLED4, HIGH);
else
digitalWrite(statLED4, LOW);
break;
case 165: Serial.print("AV/TV");
if(digitalRead(statLED5) == LOW) //This toggles the statLED every time power button is hit
digitalWrite(statLED5, HIGH);
else
digitalWrite(statLED5, LOW);
break;
case 149:
Serial.print("Power");
if(digitalRead(statLED6) == LOW) //This toggles the statLED every time power button is hit
digitalWrite(statLED6, HIGH);
else
digitalWrite(statLED6, LOW);
break;
}

Serial.println();
}
}
int getIRKey() {
int data[12];
int i;
while(pulseIn(irPin, LOW) < start_bit); //Wait for a start bit

for(i = 0 ; i < 11 ; i++)
data[i] = pulseIn(irPin, LOW); //Start measuring bits, I only want low pulses

for(i = 0 ; i < 11 ; i++) //Parse them
{
if(data[i] > bin_1) //is it a 1?
data[i] = 1;
else if(data[i] > bin_0) //is it a 0?
data[i] = 0;
else
return -1; //Flag the data as invalid; I don't know what it is! Return -1 on invalid data
}
int result = 0;
for(i = 0 ; i < 11 ; i++) //Convert data bits to integer
if(data[i] == 1) result |= (1 i);
return result; //Return key number
}
Qualquer duvida envie um comentário....

Nenhum comentário:

Postar um comentário