Adquira estes componentes na Loja do Lab de Garagem
Neste tutorial vamos mostrar como utilizar o IR Control Kit da Sparkfun. O Kit vem com dois emissores Infravermelho, dois receptores Infravermelho e o Controle Remoto. Ao apertar um botão do controle remoto, um LED acenderá. É um LED para cada botão do controle remoto.
Você pode utilizar também a biblioteca IRRemote.
Faça a seguinte ligação no Arduino:
Depois de feito as ligações acima, passe a programação abaixo:
int irPin = 2; //Sensor pin 1 wired to Arduino's pin 2
int statLED = 3;
int statLED1 = 4;
int statLED2 = 5;
int statLED3 = 6;
int statLED4 = 7;
int statLED5 = 8;
int statLED6 = 9; //Toggle the status LED every time Power is pressed
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
}
A função int getIRKey() conta o tempo do pulso em LOW que o controle remoto transmite. Para cada botão é um número de pulsos diferente. Portanto, ao apertar o botão POWER, por exemplo, o Arduino detectará LOW, fará a contagem em microssegundos e guardará na matriz data[i]. Depois o Arduino fará uma comparação de todos os elementos da matriz com as constantes bin_1 e bin_0 e transfomará os dados em binário (0 ou 1). Por fim converterá os dados em bits para inteiro. Ao terminar, o Arduino volta para o loop() e verifica cada caso, acendendo o LED correspondente ao dado inteiro que foi convertido.
E é isso! Esperamos que tenha gostado! Se tiver dúvidas sobre o tutorial, poste aqui neste blog! Em caso de sugestões, clique aqui! Para ver outros tutoriais e projetos desenvolvidos pela equipe LdG e por outros garagistas, clique aqui e aqui! Até a próxima!
Referências:
http://labdegaragem.com/profiles/blogs/tutorial-emissor-e-receptor-...
Comentar
Seria bom postar a lista de material utilizado
Comentário de Valdênio Paulino de Melo 1 segundo atrásExcluir comentário
la nas últimas linhas esta faltando um ''
if(data[i] == 1) result |= (1 i)
Euclides,
Segue o link para o datasheet do receptor usado no kit da sparfun vendido aqui na loja do LDG: http://www.sparkfun.com/datasheets/Sensors/Infrared/tsop382.pdf
Abraço
Qual é o código do componente receptor de IR deste kit?
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por
Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!
Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)