Программируемый выключатель света с дистанционным управлением

    image
    Продолжение ранее опубликованных статей, первая, вторая.
    В этой статье речь пойдет о программируемом выключателе света с дистанционным управлением. Как и прошлых проектах для отладки и прототипирования, я использую Carduino Nano V.7


    Требуемый функционал


    Возможность управлять выключателем любым бытовым ИК пультом управления.
    Программировать выключатель на любую кнопку бытового ИК пульта управления.
    Включать/выключать свет, как от клавиши выключателя, так и с пульта, не зависимо друг от друга.

    Схема и комплектующие


    image
    Для сборки прототипа использовал следующие компоненты:
    Контроллер Carduino Nano V.7
    Relay Module
    ИК приемник TSOP
    Макетная плата
    Звуковой излучатель

    Фотография компонентов
    image

    Описание работы выключателя


    Сначала добавляем в память выключателя код кнопки пульта управления. Для этого мы берем наиболее подходящий нам пульт управления (пульт от кондиционера не подойдет) и выбираем на нем свободную кнопку, которой Вы никогда не пользуетесь (обычно это цветные кнопки телетекста). Входим в режим программирования выключателя, для этого нужно нажать на клавишу вкл/выкл и подержать 5 секунд, раздастся длинный звуковой сигнал «Бип», после этого остается нажать ранее выбранную кнопку пульта и ваш выключатель готов к работе. Теперь выключатель света будет понимать добавленную в него команду Вашего ИК пульта. Код кнопки сохраняется в энергонезависимой памяти контроллера и будет храниться в памяти даже после отключения питания схемы.

    Работу прототипа выключателя смотрите на видео


    Код для контроллера Arduino


    #include <IRremote.h>   
    #include <avr/delay.h> 
    #include <EEPROM.h> 
    #define button 7 
    #define speaker 11 
    #define lamp 6 
    
    IRrecv irrecv(2);  //вход для ик приемника 
    decode_results results;   
    unsigned long ir_command; 
    uint8_t swt, count, state = 0;  //статус лампочки 
        
    void setup()   
    {   
      pinMode(speaker, OUTPUT);//громкоговоритель 
      pinMode(button, INPUT);//вход для кнопки 
      digitalWrite(button,HIGH);//включить подтяжку 
      pinMode(lamp, OUTPUT);//лампочка 
      irrecv.enableIRIn(); // включить приемник   
    }   
        
    void loop()  
    {   
     swt=digitalRead(button); 
     count=0;  
     while(swt==0) 
       { 
        if(count>30) 
         {  
           beep(100,400); 
           for(unsigned long i=0; i<2000000; i++) 
           { 
             if (irrecv.decode(&results))   
              {   
                SaveEEPROM(results.value);   
                irrecv.resume();            
                break;             
              } 
            }  
           beep(30,900);   
           break;  
          } 
        count++;   
        swt=digitalRead(button);   
        _delay_ms(100);  
       } 
       
     ir_command=LoadEEPROM(); 
        if (irrecv.decode(&results)) 
        {     
          if(ir_command==results.value)  
            { 
              state=~state;  
              digitalWrite(lamp, state); 
              beep(10,300);  
              _delay_ms(700);  
            }             
         irrecv.resume();          
        } else  if(count>1)       
                 {  
                   state=~state; 
                   digitalWrite(lamp, state);  
                   beep(10,500); 
                   _delay_ms(100); 
                 }         
    } 
    
    void SaveEEPROM(unsigned long ir_code) 
    { 
      EEPROM.write(0, ir_code & 0xFF); 
      EEPROM.write(1, (ir_code & 0xFF00) >> 8); 
      EEPROM.write(2, (ir_code & 0xFF0000) >> 16); 
      EEPROM.write(3, (ir_code & 0xFF000000) >> 24); 
    } 
    
    unsigned long LoadEEPROM()  
    { 
      byte val = EEPROM.read(3);  
      unsigned long ir_code=val; 
          val = EEPROM.read(2); 
                    ir_code= (ir_code << 8) | val; 
          val = EEPROM.read(1); 
                    ir_code= (ir_code << 8) | val; 
          val = EEPROM.read(0); 
                    ir_code= (ir_code << 8) | val; 
      return ir_code; 
    } 
    
    void beep(byte dur, word frq) 
    { 
      dur=(1000/frq)*dur; 
      for(byte i=0; i<dur; i++) 
      { 
       digitalWrite(speaker, HIGH);  
       _delay_us(frq);  
       digitalWrite(speaker, LOW); 
       _delay_us(frq); 
      }  
    } 
    


    Для компиляции кода нужно добавить библиотеку IRemote. Библиотека отличается от оригинальной, так как я добавил к ней еще несколько протоколов, в том числе и новый протокол LED телевизоров Samsung

    Принципиальная схема выключателя


    После отладки устройства на arduino, нарисовал окончательную схему будущего выключателя. Так как я уже писал ранее, что Arduino это удобное средство для отладки и написания кода, но для окончательной схемы он не подойдет.
    image

    Hex фаил для прошивки контроллера Atmega168
    Блок питания можно использовать от зарядного устройства для мобильного телефона.
    Схемы блоков питания.

    Если будут вопросы задавайте, с удовольствием отвечу на них.
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 61

      +2
      не думали над вопросом регулирования яркости света?
      p.s. быстро моргать ардуиной не катит)
        0
        Про Dimmer по плану буду писать в следующей статье.
        Сейчас наблюдается переход на энергосберегаюшие лампы, так вот имейте ввиду с ними Dimmer не будет работать.
          +1
          есть множество энергосберегающих ламп (как cfl, так и светодиодных), которые нормально работают с диммерами.
          0
          Можно модулировать ШИМ-ом симистор. Но как сказано выше, с энергосберегающими люминисцентными лампами это не работает (точнее работает, но неустойчиво и плохо). Интересно, как с LED?
            0
            Если схема Led лампы основана на Led Driver, то Dimmer-ование на ней работать не будет
              0
              Я так и думал, спасибо. Не было опыта с LED-лампами пока.
                0
                Но есть много китайских LED ламп, которые они кукурузой называют, так вот они диммируются без проблем. Как правило они указывают на упаковке лампы что она диммируется
                  +1
                  По опыту сопряжения в «умном доме» диммера и over 1000 всяких разных ламп, установлено, что с диммером нормально работают только лампы накаливания и галогенки. LEDов разновидностей 10 проверено (прямиком из Китая ), столько же видов энергосберегаек (в том числе и «диммируемые» как на упаковках написано), светодиодные ленты, люминесцентные лампы — все любит стабильное напряжение не менее 160 В и яркость практически не меняет. Причем LED начинают светить уже при 20 В при номинальном 230 В, но предсказать поведение их драйверов невозможно.
                  P.S. диммер правда не простой, симистор + контроль тока нагрузки, при малой нагрузке начинает подавать напряжение скачками, но мы его обманули.
                    0
                    Пардон, но это вы ерунду говорите.

                    Не надо китайщину подвальную использовать, а нормальные LED лампы — филипс, осрам, самсунг…

                    У меня весь дом переведен на LED, лампы 6 типов есть как минимум, все прекрасно поддерживают dim — как максимальная яркость так и практически нулевая.

                    В сумме (3 этажа) более 50 ламп установлено (от миниатюрных G9 в люстрах до PAR20)

                    Если надо видео — не проблема, но в целом реально удивляют такие заявления.
          –3
          Опять из пушки по воробьям
            +8
            «из пушки» это если бы прикручивать к выключателю плату на miniITX с линуксом. Или на край RaspberryPi. А так — восьмибитный Atmega, там ему и место. :)
              –2
              Дык не используется половина мощностей
                0
                У вас одна лампочка в доме? :)
                  0
                  Если добавить dimmer и звуковые семплы, то мощностей лишних не будет. А Вы какой контроллер предлагаете использовать?
                    +3
                    При его цене, я думаю, об этом можно легко забыть. Вы на своем мобильнике или компьютере не используете куда больше половины их мощности, но не считаете же что покупка четырехядерного ноутбука с 3D-картой для того, чтобы писать на хабр, как это в жизни, обычно, и бывает, это «стрельба из пушки по воробьям».
                      0
                      Дык зато мозг разгружен. Не это ли цель всех железок и гаджетов — освободить мозг для чего-то полезного?
                    +1
                    А чем семплы пульта записывать? На к155ла3 и на магнитных доменах что-ли?
                      0
                      Есть специальные ИС как раз для работы с ИК сигналами, и у них конечно же есть режим программирования для запоминания нового сигнала. Различаются только количеством сигналов которые могут запомнить, от двух и до много.
                    0
                    для окончательной схемы он не подойдет.

                    Интересно почему.
                      +3
                      Потому что вместе блоком питания в установочную коробку выключателя не влезет
                      0
                      На принципиальной схеме в начале статьи — ни одного резистора. ;)
                        0
                        Это не принципиальная схема.
                        0
                        Меня заинтересовал разъем SPK на Carduino. В стандартной Arduino Mini есть такой? У себя что-то не нашел. В описании сказано про 13й цифровой пин, но на нём сидит диод+резистор. С ними не пойдет?

                        Хочется на обычной ардуинке попробовать проиграть звуковой файл без wave-shield.
                          0
                          SPK выход только в седьмой версии Arduino, вы можете сами сделать его
                          image
                            0
                            Неужели всё так просто? Полноценный wav-выход? (ну за исключением прерываний, hex-преобразования и бит)
                              0
                              Воспроизведение звука производится на частоте ШИМ 64000Гц.
                              Программно производится интерполяция звука что улучшает качество звука и не требует фильтра частоты дискретизации.
                                0
                                Транзистор в схеме нужен чтобы не подпалить ногу ардуинки?
                                  0
                                  Что бы ногу не спалить, достаточно повесить последовательно цепи резистор 200 ом. А транзистор для того что бы усилить сигнал.
                          +1
                          Также стоило отметить, что используется сторонняя библиотека IRremote отсюда:
                          github.com/shirriff/Arduino-IRremote/
                          www.arcfn.com/2009/08/multi-protocol-infrared-remote-library.html

                          не входящая в базовую поставку Arduino IDE.
                            0
                            Извиняюсь, про библиотеку забыл. Только библиотека у меня подправлена, я добавил еще несколько протоколов, в том числе и новый протокол Samsung.
                            Добавил либу в статье
                              0
                              Что за новый протокол Samsung? И не делали ли Вы поддержку LG'шных ик пультов?
                                +1
                                Протокол который Samsung начал использовать в LED телевизорах
                                LG должен работать, у них стандартный протокол
                                0
                                Прошу прощения, а где пул реквест с новыми протоколами? ;)
                              0
                              Можно ли зайти в режим программирования, удерживая кнопку на самом пульте?
                                0
                                Я намеренно отказался от такого режима. Представьте себе, вы регулируете громкость на телевизоре или перематываете видео, Вы при этом тоже будете удерживать кнопку и выключатель тогда перепрограммируется.
                                  0
                                  да, именно это меня волновало
                                0
                                а как насчет дребезга контактов на кнопочке? кондерчик что-ли добавить?
                                  +1
                                  Кондер не понадобится, так как в коде уже есть устранение дребезга
                                  0
                                  Хотелось бы увидеть ещё статью про управление освещением через интернет с помощью Ардуино
                                    0
                                    Такая статья запланирована и есть уже наработоки по этой теме.
                                    –1
                                    Интересная идея, но готовых выключателей, работающих от любого пульта ДУ и так есть 2700 рублей не так много.
                                    Я бы уже думал о том, как это всё интегрировать в цифровой дом.
                                      0
                                      Я не могу же все сразу написать в одной статье, буду плавно переходить от простого к сложному.
                                        0
                                        Тогда ждём-с.
                                          0
                                          Я смотрю, по этой ссылке выключатель отдельно не подключен к питанию, т.е. берет его из контатов, которые и комутирует. Как это возможно? Или я не понял чего-то. Сам не сильно силен в электронике, но знаю, что у меня дома к выключателю идет только 2 провода, и не охота стены долбить… Спасибо, если кто-то просветит!
                                            0
                                            Если лампа спиральная то это возможно. Так как лампа имеет не большое сопротивление, то через нее будет течь ток, который и будет питать контроллер.
                                          0
                                          Приведенные Вами выключатели управляются, с приложенными к ним маленькими RF пультами и этот выключатель нельзя привязать к пульту телевизора. Мне гораздо удобней лежа на диване, перед телевизором нажать кнопку пульта от телевизора, чем искать отдельный микропульт от выключателя
                                            0
                                            Ну это быстро нагугленные варианты.
                                            У товарища дома три выключателя, рулящиеся либо прикосновением либо же кнопкой питания с пульта от видика или телевизора, а по громкости управляющие яркостью ламп. Я говорил именно про них. и стоили они меньше 20 баксов на тот момент
                                              0
                                              А если регулировать яркость кнопкой громкость, то громкость не будет изменяться?
                                                0
                                                У него нет, поскольку у него телик и выключатель находятся в противоположных сторонах.
                                                  0
                                                  У меня телевизор отраженный сигнал от противоположной стены, хорошо воспринимает.
                                                  Я конечно понимаю что подобный выключатель скорей всего кто то производит, но все что я встречал это криво работающий «Сапфир». И все же надеюсь, что схема и код кому нибудь пригодятся.
                                                    0
                                                    Ну тут ничего не скажу, у меня дома нет ни телика ни пульта ду.
                                                    Я себе планирую другую систему делать, товарищ сейчас физику одной штуковины продумывает, на основе 1-wire
                                          –1
                                          Спасибо! Если этой штукой управлять комплексом ламп, то круто. Но для одной лампы, мне кажется, действительно «из пушки по воробьям». Я купил себе такое: dx.com/p/ir-remote-controlled-ac-outlet-for-appliances-220v-12902 обучается любому сигналу пульта ДУ, легко разбирается, легко встравивается. 4.42$.
                                            0
                                            Я все мечтаю о такой штуке как работающий по таймеру(или через пульт) плавный переключатель температуры света и в конечном итоге включении или выключении света. Все это делается для того что-бы цвет ламп вечером был, как закат, а утром как восход, я думаю любому компьютерному маньяку кто пересиживает за компом такое помогло бы. Пока приходится использовать только программу flux.
                                              0
                                              1) micasaverde vera 3 / lite

                                              micasaverde.com/

                                              полноценный z-wave контроллер, который может делать практически все что угодно

                                              2) один из тонны z-wave диммеров (переключатель на стенку, навесной на розетку, и тд и тп)

                                              можно посмотреть тут:

                                              www.vesternet.com/z-wave/lighting-sockets

                                              Например (только европейскую розетку не забыть) — навесной www.vesternet.com/z-wave-everspring-dimmer-socket

                                              Cамые красивые (я их пользую) — www.vitrum.com/ (но они достаточно дорогие)

                                                0
                                                ну это изменение яркости света, а не цветовой температуры. Возможно конечно сделать ее совмещением двух лампочек с разными цветовыми температурами, но я не знаю как это сделать =(
                                                  0
                                                  Нужно сделать двухканальный dimmer и контроллером при включении света, выполнять сценарии в зависимости от времени суток
                                              0
                                              Хорошее решение, особенно тем, что ардуино в конечном устройстве нет).

                                              … И мы тут видим классическую DIY статью — сначала любитель делает что-либо для своего дома или для себя,
                                              потом пара дополняющих комментариев об улучшении устйроства, и затем вереница комментариев с мыслью «вот тут готовое и дешевле/чуть дороже».
                                                0
                                                Ну вобщем то ардуино и годится только для прототипов или единичных экземпляров. Более того, для этого она и была разработана.
                                                0
                                                Важное дополнение. В схему необходимо добавить конденсатор на 220мФ между + и + приёмника, а то дальность срабатывания оставляет желать лучшего.
                                                  0
                                                  *между "+" и "-" естественно.
                                                    0
                                                    Этот параметр еще зависим от модели самого приемника.
                                                    Если у Вас пульт работает на частоте 36000Гц, а приемник рассчитан на частоту 38000
                                                    Принимать такой сигнал приемник будет, но очень плохо

                                                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                  Самое читаемое