ИК передатчик

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем Benny_Ray, 19 июл 2014.

  1. Benny_Ray

    Benny_Ray Нерд

    С помощью ИК приемника считал коды кнопок с различных пультов ДУ, вот часть кодов
    551510175 Вправо
    551518845 Вниз
    551542815 Влево
    551486205 Вверх
    551494365 ОК

    далее собрал на основе ИК светодиода передатчик, но вот никак не могу заставить его отправлять любой код, собственно вопрос, как определить какой протокол использует пульт ДУ, и как заставить arduino отправлять коды с помощью ИК светодиода. Если можно то какие нибудь понятные примеры ибо новичок во всем этом.

    Код (Text):
    #include <IRremote.h>

    IRsend irsend;

    void setup()
    {
      Serial.begin(9600);
      irsend.enableIROut(38);
    }

    void loop()
    {
        irsend.sendNEC(0x20DF22DD, 32);
        Serial.println("OK!");
        delay(500);
    }
    UPD: Светодиод подключен к 3 пину, если смотреть через камеру то видно что он моргает, так же если заменить его на обычный светодиод он моргает, но телевизор не воспринимает отправляемый код.
     
    Последнее редактирование: 19 июл 2014
  2. ALev

    ALev Оракул

    Коды могут читаться неверно. Быстрее всего разобраться при помощи осциллографа. Но, если его нет, можно просто написать скетч, который будет в массив сохранять сигнал с обычного инфракрасного фотоприёмника. И записать потом то же самое, но только передаваемое тобой.
     
  3. Benny_Ray

    Benny_Ray Нерд

    снимал с пульта коды и в 10 и в 16 системах
    конкретно кнопка OK на пульте дает
    в 10 - 551494365
    в 16 - 20DF22DD

    единственное чего не понял в скетче так это вот этот момент

    irsend.sendNEC(0x20DF22DD, 32);

    32 я так понимаю это битность? или чтото другое, и как этот параметр можно считать/вычислить/угадать если дело в нем?
     
  4. Benny_Ray

    Benny_Ray Нерд

    единственное что заметил при просмотре на светодиоды через камеру, это то что светодиод установленный в пульте светится ярче раз в 100 точно чем тот который подключен к ардуине.
     
  5. WhiteWax

    WhiteWax Нуб

    Такая-же тема. Телевизор JVC, надо управлять с Ардуино, подавая сигнал с IR-светодиода. Не получилось, в ходе поиска почему не работает:
    - выпаял светодиод из пульта
    - опробовал альернативную библиотеку IRlib_master (код программ менял, на корректный, там экзамплы хоршие), помимо IRremote
    -ставил транзистор перед светодиодом;
    во всех экспериментах светил в ИК-приемник телевизора чуть-ли не в упор, но через его светофильтр (вскрытие телевизора - перебор).
    Ничего не помогает, светодиод светится тусклее, чем с пульта (сопротивлением при подключении к транзистору игрался, до определенных пределов), телевизор команды не воспринимает. Других ИК устройств дома нет.
    Что может быть не так?
    Тексты программ могу выложить, но они рабочие, на цветном светодиоде всегда проверял светится ли, перед тем как ИК вставлять. Код управления закидывал и в 16рички и пробовал RAW.
     
  6. WhiteWax

    WhiteWax Нуб

    Добавлю, второй Ардуины у меня нет, очень хотелось бы сигнал с одной на другую закинуть, коды могу написать, опробовать охота. Еще Ардуина будет только через месяц.
     
  7. ALev

    ALev Оракул

    Я в ближайшие дни поставлю эксперимент и выясню, в чём проблема.

    Да, это количество бит. Но, честно говоря, я в недоумении: даже для одного производителя (например NEC) существует много модификаций кода. А sendNEC не имеет аргумента задающего модификацию. Видимо она работает только с одним кодом и не факт, что этот код такой же, как у вашего телевизора.

    Скорее всего это происходит из-за того, что частота излучения светодиода из пульта ближе к видимому диаппазону частот. Матрицы видеокамер принимают сигнал не только из видимого диаппазона, но и немного за ним в обе стороны (УФ и ИК). Но чем дальше от видимого диаппазона, тем меньше чувствительность матрицы.
     
  8. ALev

    ALev Оракул

    Кстати, попробуйте в тёмной комнате посмотреть в камеру, используя пульт ДУ как фонарик :) Получите прибор ночного видения :)
     
  9. Benny_Ray

    Benny_Ray Нерд

    ))) попробую, а по факту как бы теряется смысл от автоматизации, уже все готово для того чтобы основные функции телевизора и сплита задействовать через голосовые модули, но из за этой "мелочи" все стоит на приколе (((
     
  10. Benny_Ray

    Benny_Ray Нерд

    Ребята, так никто и не разобрался в причинах? ((( жаль (((
     
  11. atompost

    atompost Гик

    думаю здесь все подробно описано:)
     
  12. Benny_Ray

    Benny_Ray Нерд

    Читал но ничего не помогло, в 100 раз перепилил скетч и телек стал ловить сигнал но теперь такая проблема, ловит он сигнал только если диод стоит в 2-х метрах от телевизора и только в определенном положении, как от этого можно избавится?
     
  13. WhiteWax

    WhiteWax Нуб

    Я однинаковые светодиоды впаял в пульт телевизора и к ардуине подключил (на 1,5В). Уровень сигнала с пульта JVC от телевизора составляет 2,3В, а на пине контроллера при подключении к нему светодиода 1,8 (что подтверждается визуальным наблюдением через камеру телефона), уровни замерял осцилографом, если замерять уровень на контроллере без нагрузки свои 5В он выдает.
    Попробовал подключить через транзистор, выходной сигнал визуально выше (измерений не успел сделать, осцилограф не у меня), приемником реализованным на другой плате ловится правильный код, но телевизор всё равно идет в отказ. В коде (отрабатываю посыл команды в 3 видах), почему может не работать?
     
  14. Benny_Ray

    Benny_Ray Нерд

    Покажи код передатчика.
     
  15. WhiteWax

    WhiteWax Нуб

    До этого я пробовал код под IRRemote.h, результат также не получил. Светодиод тоже светил тускло.

    Код (Text):
    #include <IRLib.h>

    IRsend My_Sender;
    int led13 = 13;

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

    void loop() {

      delay(100);
      digitalWrite(led13, HIGH);
      delay(100);
      digitalWrite(led13, LOW);
        My_Sender.send(JVC,0xC098,1);  delayMicroseconds (50);
        My_Sender.send(JVC,0xC098,0);  delayMicroseconds (50);
      delay(100);
      digitalWrite(led13, HIGH);
      delay(100);
      digitalWrite(led13, LOW);
        My_Sender.send(JVC,0xC098,1);  delayMicroseconds (50);
      delay(100);
      digitalWrite(led13, HIGH);
      delay(100);
      digitalWrite(led13, LOW);
        My_Sender.send(JVC,0xC098,0);  delayMicroseconds (50);
    }
     
     
  16. Benny_Ray

    Benny_Ray Нерд

    1. Если я не ошибаюсь то в библиотеке IRLib используется вывод на pin9
    2. pin13 не поддерживает ШИМ, и врядли на нем будет работать даже если привязаться к нему.
    3. My_Sender.send(JVC,0xC098,1); вот тут вроде бы вместо JVC поставьте NEC,а вместо 1 внутри скобок 32 поставьте
     
    Последнее редактирование: 10 сен 2014
  17. WhiteWax

    WhiteWax Нуб

    1. Для Uno - pin3.
    2. Данная часть кода вспомогательная, к отправке посылки прямого отношения не имеет.
    3. Нет, 1 - вероно
     
  18. WhiteWax

    WhiteWax Нуб

    С транзистором (первый попавшийся С337) заработало. Только стабильности нет, по ощущениям работает только в отраженном виде, т.е. если в телевизор направить - сигнал не пройдет, а вот через потолок, т.е. светодиод смотрит под 70град к горизонтали - отрабатывает, расстояние хоть 3 хоть 5 метров, лишь бы не меньше 2. Посылку для стабильности приходится слать 4 раза, но угол светодиода надо подобрать, иначе не пройдет.
    В чем может заключаться причина нестабильности, может телевизору надо какую-то нестандартную частоту передачи?
    Повторюсь, светодиод из этой партии специально установил в пульт, работает хорошо, положение светодиода значения не имеет.
    Код (Text):


    #include <IRLib.h>

    IRsend My_Sender;
    int led13 = 13;

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

    void loop() {

      delay(3000);
      digitalWrite( 13, !digitalRead(13) );
     
        My_Sender.send(JVC,0xC098,1);  delayMicroseconds (50); //мой телек, работает, но ловится нестабильно, на отраженном
        My_Sender.send(JVC,0xC098,1);  delayMicroseconds (50); //без повторения отрабатывает редко
        My_Sender.send(JVC,0xC098,1);  delayMicroseconds (50); //
        My_Sender.send(JVC,0xC098,1);  delayMicroseconds (50); //
    }
     
     
    Последнее редактирование: 10 сен 2014
  19. Benny_Ray

    Benny_Ray Нерд

    да уже разобрался с Вашим кодом, протупил сразу когда писал, у меня такая же беда с ИК диодом, телек воспринимает сигнал стабильно до расстояния 4 метров но только в определенном положении диода, я так подозреваю из за того что он очень направленный, только что как раз получил посылку с другими ИК диодами 1, 2 и 4 в модуле. попробую вечером с каким модулем будет стабильно потом может посоветую что и как.
     
  20. WhiteWax

    WhiteWax Нуб

    Не в диодах дело, в пульте то работает хоть напрямую, хоть в потолок, и всегда с 1го раза.