Работа с ик-диодом

student
Offline
Зарегистрирован: 01.06.2011

Здравствуйте, смысл примерно такой:

с помощью кода взятого отсюда- http://www.arduino.cc/playground/Code/InfraredReceivers

считал сигнал передаваемым пультом, теперь пытаюсь послать такую же комбинацию обратно и ничего не получается, пробовал просто высчитав задержку между сигналами послать так же, но что-то тоже не срослось.

Хотел попросить совета как удобнее с этим было бы все таки послать нужный сигнал, и очень было бы хорошо, если бы с примером программки пделились.

 

 

Все это замыслилось для того чтобы управлять существующим роботом не с его родного пульта, а через Arduino 

kikia99
Offline
Зарегистрирован: 22.03.2011

 прежде всего нужно проверить работает ли вообще передача  постораться принять от ардуино пакет или хотябы померить все  часто бывает что сам пакет правельный а вот диод не совсем корректно работает 

возможно в описание робота есть таблица кодов 

Shurup
Offline
Зарегистрирован: 30.05.2011

Еще бы знать что за протокол у твоего пульта

Попробуй еще вот такой вариант, может повезет и протокол не эксклюзивный окажется 

 

P,S.

ПОсмотри через камеру телефона на ИК передатчик, он вообще передает что нибудь?

student
Offline
Зарегистрирован: 01.06.2011

да передача идет, с этим все нормально, пробовал даже просто переданные сигналы принять, он принимает, но задержки не те, и собственно пачка сигналов не та

student
Offline
Зарегистрирован: 01.06.2011

 

student
Offline
Зарегистрирован: 01.06.2011

Shurup пишет:

Еще бы знать что за протокол у твоего пульта

Попробуй еще вот такой вариант, может повезет и протокол не эксклюзивный окажется 

 

P,S.

ПОсмотри через камеру телефона на ИК передатчик, он вообще передает что нибудь?

 

 

такое уже смотрел)благо по инету ползаю хорошо, не подошел этот вариант

kikia99
Offline
Зарегистрирован: 22.03.2011

а нельзя прицепить ик приемник к ком потру и прогой логером посмотреть пакет ? 

ардуины все разные и задержки програмные тож выходят разные мож в этом дело ?

student
Offline
Зарегистрирован: 01.06.2011

диод перепаивал на пульт, с ним все нормально, так что проблема именна в программной части 

student
Offline
Зарегистрирован: 01.06.2011

диод перепаивал на пульт, с ним все нормально, так что проблема именна в программной части 

kikia99
Offline
Зарегистрирован: 22.03.2011

диод через ключ ? резистор ? 

kikia99
Offline
Зарегистрирован: 22.03.2011
student
Offline
Зарегистрирован: 01.06.2011

через резистор к ардуино, ну а на пульте просто вместо стандартного впаял 

student
Offline
Зарегистрирован: 01.06.2011

http://www.bemasher.net/archives/114 ну вот это завтра посмотрю, для себя попробую переделать. а так тоже все это видел уже 

kikia99
Offline
Зарегистрирован: 22.03.2011

http://marsohod.org/index.php/projects/129-ir4pc тут тож можно посмотреть  

вот подобный код 

/*

*copied from http://www.bigmike.it/ircontrol/download.html

WaveForm data:

Infrared period = 26us (~38.4kHz)

Strart pulse: 2000us 2ms
pause: 27830us 27.83ms
1st pulse: 390us 0.39ms
pause: 1580us 1.58ms
2nd pulse: 410us 0.41ms
pause: 3580us 3.58ms
3rd pulse: 400us 0.4ms
longpause: 63200us 63.2ms

REPEAT ONE TIME

*/

int ledPin = 13;

void setup()
{
pinMode(ledPin, OUTPUT);
}

void loop()
{
digitalWrite(ledPin, HIGH);
delay(2);
digitalWrite(ledPin, LOW);
delay(27.83);
digitalWrite(ledPin, HIGH);
delay(0.39);
digitalWrite(ledPin, LOW);
delay(1.58);
digitalWrite(ledPin, HIGH);
delay(0.41);
digitalWrite(ledPin, LOW);
delay(3.58);
digitalWrite(ledPin, HIGH);
delay(0.4);
digitalWrite(ledPin, LOW);
delay(63.2);
}

вот еше 

/*

*copied from http://www.bigmike.it/ircontrol/download.html

WaveForm data:

Infrared period = 26us (~38.4kHz)

Strart pulse: 2000us 2ms
pause: 27830us 27.83ms
1st pulse: 390us 0.39ms
pause: 1580us 1.58ms
2nd pulse: 410us 0.41ms
pause: 3580us 3.58ms
3rd pulse: 400us 0.4ms
longpause: 63200us 63.2ms

REPEAT ONE TIME

*/

int ledPin = 13;

void setup()
{
pinMode(ledPin, OUTPUT);
}

void loop()
{
for (int i = 0; i < 38; i++){ // start pulse
digitalWrite(ledPin, HIGH);
delayMicroseconds(26);
digitalWrite(ledPin, LOW);
delayMicroseconds(26);
}
delay(28); // pause

for (int i = 0; i < 8; i++){ // 1st pulse
digitalWrite(ledPin, HIGH);
delayMicroseconds(26);
digitalWrite(ledPin, LOW);
delayMicroseconds(26);
}
delayMicroseconds(1580); //pause

for (int i = 0; i < 8; i++){ // 2nd pulse
digitalWrite(ledPin, HIGH);
delayMicroseconds(26);
digitalWrite(ledPin, LOW);
delayMicroseconds(26);
}
delay(36); //pause

for (int i = 0; i < 8; i++){ // 3rd pulse
digitalWrite(ledPin, HIGH);
delayMicroseconds(26);
digitalWrite(ledPin, LOW);
delayMicroseconds(26);
}
delay(63); //pause


//again....

for (int i = 0; i < 38; i++){ // start pulse
digitalWrite(ledPin, HIGH);
delayMicroseconds(26);
digitalWrite(ledPin, LOW);
delayMicroseconds(26);
}
delay(28); // pause
for (int i = 0; i < 8; i++){ // 1st pulse
digitalWrite(ledPin, HIGH);
delayMicroseconds(26);
digitalWrite(ledPin, LOW);
delayMicroseconds(26);
}
delayMicroseconds(1580); //pause

for (int i = 0; i < 8; i++){ // 2nd pulse
digitalWrite(ledPin, HIGH);
delayMicroseconds(26);
digitalWrite(ledPin, LOW);
delayMicroseconds(26);
}
delay(36); //pause

for (int i = 0; i < 8; i++){ // 3rd pulse
digitalWrite(ledPin, HIGH);
delayMicroseconds(26);
digitalWrite(ledPin, LOW);
delayMicroseconds(26);
}
delay(3000); //pause

} 

 

student
Offline
Зарегистрирован: 01.06.2011

ну вот я тоже через delay написал,только у меня delaymicros(), дак значения получаются не такие как от пульта, притом с первой самой цифры  

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

"с помощью кода взятого отсюда- http://www.arduino.cc/playground/Code/InfraredReceivers

считал сигнал передаваемым пультом "

 

А зачем так сложно.

Я уверенно принял пульт вот такой прогой

 

 

unsigned long val=0;

void setup()

{
  
  pinMode(7,INPUT);
   pinMode(13,OUTPUT);
   Serial.begin(9600);
}
void loop()

{
  val=pulseIn(7,LOW);
  val=(val/1000);
  if(val==2)
  {
    digitalWrite(13,!digitalRead(13));
  }
  
  Serial.print(val);
}

Читаете кнопки пульта ,видите импульсы (у меня в пачке их девять не считая 4мс между пачками)
а потом , функциями tone-delay(длинна импульса считаная с пульта) и noTone-delay(расстояние между импульсами)
передаете их на свдиод.

Общаться с телевизором я не пробовал , но два МК общаются меж собой прекрасно.

 

Arduan
Offline
Зарегистрирован: 16.12.2011

nestandart пишет:

"с помощью кода взятого отсюда- http://www.arduino.cc/playground/Code/InfraredReceivers

считал сигнал передаваемым пультом "

 

А зачем так сложно.

Я уверенно принял пульт вот такой прогой

 

 

unsigned long val=0;

void setup()

{
  
  pinMode(7,INPUT);
   pinMode(13,OUTPUT);
   Serial.begin(9600);
}
void loop()

{
  val=pulseIn(7,LOW);
  val=(val/1000);
  if(val==2)
  {
    digitalWrite(13,!digitalRead(13));
  }
  
  Serial.print(val);
}

Читаете кнопки пульта ,видите импульсы (у меня в пачке их девять не считая 4мс между пачками) а потом , функциями tone-delay(длинна импульса считаная с пульта) и noTone-delay(расстояние между импульсами) передаете их на свдиод. Общаться с телевизором я не пробовал , но два МК общаются меж собой прекрасно.

 

Для данного кода такой ИК приемник подойдет? http://www.compcar.ru/forum/showthread.php?t=4959

Как мне сделать ИК передатчик на пяти диодах TSAL6200 ?
 

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

Да , подойдет.

Я использую TSOP1736.

Почему именно пять светодиодов ? 

Импульсы не длиннее 3-4мс.

В той проге я передавал импульс 2мс.

 

Arduan
Offline
Зарегистрирован: 16.12.2011

Специфика устройства. Нужно излучение на 360 градусов. Теоретически можно меньше, но крайне не желательно.

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

Маяк ? 

Adessit
Adessit аватар
Offline
Зарегистрирован: 12.04.2011

Как обычные 5 светодиодов последовательно с резистором через ключ (мосфет, транзистор, сборка дарлингтона)