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:
A única informação que achei sobre o sensor acima ( acredito que seja este) está
neste link o modelo é 1838b e os detalhes:
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: