ИК светодиод для управления бытовой техникой

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем sakotas, 9 май 2016.

  1. sakotas

    sakotas Нуб

    Уважаемые форумчане, поздравляю всех с праздником!

    Совсем недавно начал изучать Ардуино, поэтому не судите строго.

    В данный момент изучаю возможность управления бытовой техникой с помощью ардуино и ИК-светодиода.

    Скачал библиотеку IR remote с github - https://github.com/z3t0/Arduino-IRremote и, как ответственный пользователь принялся изучать примеры.

    Была собрана схема с помощью ИК-приемника TSOP22 и залит скетч с примером IRrecvDumpV2.ino.

    Благодаря этому скетчу был считан сигнал вкл/выкл от пульта управления колонками SVEN:
    Код (Text):
    Encoding  : NEC
    Code      : 18E738C7 (32 bits)
    Timing[67]:
         +9050, -4450     + 600, - 500     + 650, - 500     + 600, - 550
         + 600, -1600     + 650, -1600     + 650, - 500     + 600, - 550
         + 600, - 500     + 600, -1650     + 600, -1650     + 650, -1600
         + 650, - 500     + 600, - 500     + 600, -1650     + 650, -1600
         + 650, -1650     + 600, - 500     + 650, - 450     + 650, -1600
         + 650, -1650     + 600, -1650     + 600, - 500     + 600, - 500
         + 650, - 500     + 650, -1600     + 650, -1600     + 600, - 550
         + 650, - 450     + 650, - 500     + 600, -1650     + 600, -1650
         + 650, -1600     + 600
    unsigned int  rawData[67] = {9050,4450, 600,500, 650,500, 600,550, 600,1600, 650,1600, 650,500, 600,550, 600,500, 600,1650, 600,1650, 650,1600, 650,500, 600,500, 600,1650, 650,1600, 650,1650, 600,500, 650,450, 650,1600, 650,1650, 600,1650, 600,500, 600,500, 650,500, 650,1600, 650,1600, 600,550, 650,450, 650,500, 600,1650, 600,1650, 650,1600, 600};  // NEC 18E738C7
    unsigned int  data = 0x18E738C7;
    Порадовавшись легкостью полученных результатов, я решил попробовать использовать Ардуино для попыток включения/выключения колонок.

    Была собрана схема с использованием ИК-светодиода:
    [​IMG]

    После был открыт и залит на скетч на Ардуино с примером из библиотеки IRsendDemo.ino.

    Путем несложных манипуляций код был отредактирован в соответствии с данными, полученными при считывании сигнала:

    Код (C++):
    /*
    * IRremote: IRsendDemo - demonstrates sending IR codes with IRsend
    * An IR LED must be connected to Arduino PWM pin 3.
    * Version 0.1 July, 2009
    * Copyright 2009 Ken Shirriff
    * http://arcfn.com
    */



    #include <IRremote.h>

    IRsend irsend;
    unsigned int  data = 0x18E738C7;

    void setup()
    {

    }

    void loop() {
        for (int i = 0; i < 3; i++) {
            irsend.sendNEC(data, 67);
            delay(40);
        }
        delay(5000); //5 second delay between each signal burst
    }
    Прождав около минуты, стоя рядом с приемником сигнала и ардуино в руках, и не получив никакого результата, я решил воспользоваться стандартным примером для "сырых" данных IRsendRawDemo.ino, опять же изменив немного код:

    Код (C++):
    /*
    * IRremote: IRsendRawDemo - demonstrates sending IR codes with sendRaw
    * An IR LED must be connected to Arduino PWM pin 3.
    * Version 0.1 July, 2009
    * Copyright 2009 Ken Shirriff
    * http://arcfn.com
    *
    * IRsendRawDemo - added by AnalysIR (via www.AnalysIR.com), 24 August 2015
    *
    * This example shows how to send a RAW signal using the IRremote library.
    * The example signal is actually a 32 bit NEC signal.
    * Remote Control button: LGTV Power On/Off.
    * Hex Value: 0x20DF10EF, 32 bits
    *
    * It is more efficient to use the sendNEC function to send NEC signals.
    * Use of sendRaw here, serves only as an example of using the function.
    *
    */



    #include <IRremote.h>

    IRsend irsend;

    void setup()
    {

    }

    void loop() {
      unsigned int irSignal[67] = {9050,4450, 600,500, 650,500, 600,550, 600,1600, 650,1600, 650,500, 600,550, 600,500, 600,1650, 600,1650, 650,1600, 650,500, 600,500, 600,1650, 650,1600, 650,1650, 600,500, 650,450, 650,1600, 650,1650, 600,1650, 600,500, 600,500, 650,500, 650,1600, 650,1600, 600,550, 650,450, 650,500, 600,1650, 600,1650, 650,1600, 600}; //AnalysIR Batch Export (IRremote) - RAW

      irsend.sendRaw(irSignal, 67, 38); //Note the approach used to automatically calculate the size of the array.

      delay(1000); //In this example, the signal will be repeated every 5 seconds, approximately.
    }
    К сожалению, данная манипуляция также не принесла никаких результатов.

    Был бы очень благодарен за помощь/советы!

    P.S. Гуглом/поиском по форуму пользовался, вразумительного ответа на свой вопрос не нашел
     
    Последнее редактирование: 9 май 2016
  2. vvr

    vvr Инженерище

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

     
  3. sakotas

    sakotas Нуб

    Спасибо большое за видео!

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

    Решил, что проблема может быть в неработоспобности пина 3.
    Проверил элементарным кодом и светодиодом analogWrite(3, 255) - светодиод с него зажег, т.е. пин рабочий.

    Думал, что может бракованные оба ИК-диода, заменив ИК-диод на обычный диод с тем же самым кодом - свечения (отправки команд) не наблюдается.
     
  4. ИгорьК

    ИгорьК Гуру

    Посмотрите на этот диод через фотоаппарат смартфона.
     
  5. Onkel

    Onkel Гуру

    в пультах диоды (частенько) запитывают от вольтодобавки, там до 9 В и ток за сотню мА зашкаливает.
     
  6. alp69

    alp69 Форумчанин

    Сравните внимательно что в Вашем последнем коде и в примере, из которого Вы его выдрали. Неплохо и комментарии в исходнике почитать.