segunda-feira, 11 de agosto de 2008

Recebendo comandos com o Arduino por sensor infravermelho

Olá pessoal,
Estou de volta com outro tutorial bem legal para o arduino, agora ja mais voltado a utilização em robótica... vou mostrar como comunicar seu arduino com um controle remoto configurado para TV's sony, usando Infravermelho.

A primeira pergunta que vem a mente é: "por que controles de TV sony?"... Resposta: Não, isso não é propaganda, hehe, na verdade existem muitos protocolos IR e o da TV sony é o mais "legível" deles entre controles vendidos... portanto se você tem um controle remoto universal ou sony esse tutorial funciona se não voce pode conseguir um controle por uns 15~20 reais, acho.

Vamos ao tutorial:

Conhecimento necessário:

Programação básica em C
Conhecimento mínimo de uso do arduino
Básico de elétrica/eletrônica

Material necessário:

1x Arduino (preferencialmente Diecimilia, mas NG ou severino está bom)
1x Cabo USB tipo A/B para ligar o arduino no PC
1x Protoboard (Qualquer tamanho)
1x LED receptor IR
1x Resistor 10k
Alguns pedaços de fio para usar na protoboard

Vamos a teoria:

O protocolo de comunicação do controle da sony funciona da seguinte forma: O controle remoto envia 13 bits de comunicação:
(numero - tempo(milisec) - siginifcado)
1 - >2200 - inicio da transmição
2 a 13 - >400 ou > 1000 - bit (>400 para LOW, >1000 para HIGH)

OBS: primeiro é enviado o bit de menor importância, isto é, o mais da direita. E depois segue para os de maior importância, isto é, para a esquerda.

Acabou-se a teoria! vamos a montagem do hardware!

Dessa vez vou ficar devendo as fotos mas ai está uma imagem explicando o circuito:

É bem simples, ligue um fio do terra até a perna mais longa do sensor IR, na perna mais curta você liga o fio que vai ao pino 2( no meu caso, mas pode ser qualquer pino digital, exeto 0 e 1 ) e um resistor 10Kohm o outro lado do resistor liga-se ao 5V.

Desse modo ao se enviado luz Infravermelha ao sensor a resistência irá reduzir e o pino lerá 0(LOW).
OBS: Aqui está sendo utilizado um sensor 2 pinos, com um sensor 3 pinos procure referência de qual ligar ao 5V, terra, e ao pino.

Mais um parte completa, seguiremos agora para a ultima parte antes de testar...
O programa:

#define bitHigh 1000 //Tempo Mínimo de resposta para pino alto
#define bitLOW 400 //Tempo Mínimo de resposta para pino baixo
#define irPin 2 //Infravermhlo no pino 2


void setup()
{
//pinMode(irPin, INPUT); //Configura pino do infravermelho para entrada de dados
Serial.begin(9600); //Mostrar tecla na tela
}

void loop()
{
int key = IrKey(); //Chama a funcao que le o IR
Serial.print("Botao recebido: ");
Serial.println(key);
}


int IrKey()
{
int data[12]; //Vetor de 12 pociçoes para reber o dado de treze bits
while(pulseIn(irPin, LOW) < i =" 0;i"> bitHigh) //Se maior que 1000 milisegundos é 1
data[i] = 1;
else
if(data[i] > bitLOW) //Se maior que 400 milisegundos é 0
data[i] = 0;
else
return -1;
int result = 0, binValue = 1;
for(int i = 0;i <> bitHigh) //Se maior que 1000 milisegundos é 1
data[i] = 1;
else
if(data[i] > bitLOW) //Se maior que 400 milisegundos é 0
data[i] = 0;
else
return -1;
int result = 0, binValue = 1;
for (int i = 0;i <>
Ai está o programa, bem comentado para nao ser muito complexo de entender, é só enviá-lo para a placa e usar o controle (a distância nao pode ser muito grande)...

É isso ai pessoal, até a próxima... e desculpe-me por alguns acentos! hehe

Carlos Massera Filho

3 comentários:

Marcos disse...

ta faltando um pedaço!!!!

Marcos disse...

o código está quebrado, faltando!!!

Unknown disse...

O código está incompleto e tenho quase certeza que o pedaço presente tem alguns errinhos.