A pouco tempo comprei dois receptores de ir por R$ 0,20 cada e fiquei pensando como utilizá-los com a arduino, depois de pesquisar um bocado entendi como funciona a transmissão dos comandos entre o controle remoto e a TV.
É realmente muito interessante pois a gente percebe como cada fabricante desenvolveu um protocolo próprio para seus sistemas, neste site http://www.ustr.net/infrared/infrared1.shtml existe uma explicação bem detalhada.Usar um receptor de ir com o arduino é bastante simples, a conexão é feita com uma porta digital, no caso deste que usei a pinagem é a seguinte:
Supply voltage: 2.7 to 5.5V
Transmission distance :18-20m .
No experimento deste post conectei o pino de dados na porta digital 2 e os de força direto nas portas do arduino (alimentando a bradboard). Usei um controle remoto universal programado com os códigos da TV da sony e usei o código abaixo. As possibilidades são muitas, fazer um controle remoto para robôs ou controlar os equipamentos de casa. Imagine entrar em uma sala e ligar automáticamente o som ou a tv no canal ou estação que você mais gosta?
O código analisa os pulsos recebidos pela porta digital e apresenta na saida serial da IDE do arduino usando o comando pulseIn e transforma em números que são os códigos dos controles remotos da sony, com adaptações é possível usar qualquer marca. Este link tem um exemplo sobre como determinar os códigos .
-----------------------------------------------------------------------
/* Program that reads key presses of a sony remote control
Created by Kurtis Waterston, March 6 2010
Realesed into the public domain
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1267950229
*/
int irDet = 2;
int key = 0;
int data[12];
int state;
void setup() {
Serial.begin(9600); //For debugging
pinMode(irDet, INPUT); //IR detector connected to digital pin 2
}
void loop() { //Main loop
if (pulseIn(irDet, LOW) > 2200) { //Check for start pulse
getIRkey();
Serial.print("Key press is = ");
Serial.println(key);
}
}
int getIRkey() { //Read pulses
data[0] = pulseIn(irDet, LOW);
data[1] = pulseIn(irDet, LOW);
data[2] = pulseIn(irDet, LOW);
data[3] = pulseIn(irDet, LOW);
data[4] = pulseIn(irDet, LOW);
data[5] = pulseIn(irDet, LOW);
data[6] = pulseIn(irDet, LOW);
data[7] = pulseIn(irDet, LOW);
data[8] = pulseIn(irDet, LOW);
data[9] = pulseIn(irDet, LOW);
data[10] = pulseIn(irDet, LOW);
data[11] = pulseIn(irDet, LOW);
for(int x = 0; x <= 11; x++) { //Decide wether pulses are 1's or 0's
if(data[x] > 1000) {
data[x] = 1;
}
else {
data[x] = 0;
}
}
int result = 0; //Convert array into interger
int seed = 1;
for(int i=0;i<11;i++) {
if(data[i] == 1) {
result += seed;
}
seed = seed * 2;
}
key = result;
return result;
}
---------------------------------------------------------------------------------
Uma imagem do setup:
Nenhum comentário:
Postar um comentário
Faça seu comentário.