Tutorial: como utilizar o controle remoto IR com Arduino

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://arduino.cc/en/

http://labdegaragem.com/profiles/blogs/tutorial-emissor-e-receptor-...

http://www.arcfn.com/2009_08_01_archive.html

http://www.sparkfun.com/tutorials/291

Exibições: 32925

Comentar

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)

Comentário de Rodrigo Saraiva em 9 dezembro 2013 às 20:20

Olá pessoal, tenho um probleminha com a biblioteca do IRrecv_Dump, me aparecem vários erros quando tento copilar, estão dizendo para cada um dos objetos que não foram declarados no Scoope, alguém pode me ajudar, desde já obrigado !!

Comentário de Hélio Neto em 1 setembro 2013 às 17:48

Por que não estão mais vendendo esse kit na loja do LdG?

Comentário de Celso Gonçalves Melero em 23 março 2013 às 1:00

Olá José

Isso, é necessário a biblioteca que criei para o controle remoto.

O link para baixar a biblioteca é https://www.dropbox.com/s/c97f7jmt6repqt9/SparkfunRemoteControl.rar

No tutorial você vai encontrar como fazer para adicionar essa biblioteca ao seu projeto.

Comentário de José Adenilson Gonçalves Luz Jun em 22 março 2013 às 14:44

Olá Celso, não consegui fazer o tutorial funcionar. É preciso alguma biblioteca especifica p/ este controle alem da IRRemote?  

Comentário de Celso Gonçalves Melero em 18 fevereiro 2013 às 17:13
Renan, pode ser utilizado qualquer controle.

O problema é tratar o sinal IR transmitido pelo controle remoto adequadamente. O algoritimo apresentado acima não é genérico, praticamente só server para o controle da sparkfun. Procure no site arduino.cc, existe uma biblioteca mais genérica.

Abs
Comentário de Renan Augusto Ferreira em 18 fevereiro 2013 às 14:12

tenho o sensor IR , mais nao tenho o controle , posso usar outro controle ? algum tipo de controle universal?

Comentário de Celso Gonçalves Melero em 26 novembro 2012 às 15:09

Pessoal, sem querer me gabar, gostaria de comentar que no meu blog procuro incluir nas postagens com tutoriais, a lista de materiais usados e, sempre que possível, incluo links para os produtos e datasheets.

http://robomaniablog.blogspot.com.br/search/label/tutorial%20arduin...

Se quiserem dar uma passa por lá, serão muito bem vindos. Aceito sugestões e colaborações.

Abs

Comentário de Marcos Vinícius Cândido em 21 novembro 2012 às 12:11

Euclides vou te adicionar como amigo....aceita ai!!! valeu

Comentário de Marcos Vinícius Cândido em 21 novembro 2012 às 12:08

Falou tudo!

Comentário de Euclides Franco de Rezende em 21 novembro 2012 às 11:08

Marcos, neste quesito as mulheres deixam a gente no chinelo. Você já viu receita de culinária que não comece pelos "ingredientes"??? Sabe porque isso não ocorre? Simples: Culinária é uma "ciência" milenar (e bota milênios nisso...) e "tecnologia" é uma "ciência nenenzinha" ainda e os "grandes papas" do assunto não conseguiram chegar em um acordo de como fazer uma lista de necessidades para apresentar a quem dependa da solução, ou nunca leram uma revista da Saber Eletrônica para aprender com os "simples" de projeto. Resultado? Isso que nós vemos na Internet...falta de informação, informação truncada, resistores com qualquer cor lançado em esquemas Fritzing, não há compromisso...o negócio é encher linguiça...pode ser frango, porco, carne...qq. coisa...e eu ???? Rio (do verbo rir)....rsrsrsrsrsrsrsrssrssssss....

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço