121-Управление люстрой по ИК-каналу

Автор: | 26.08.2015

Устройство этой статьи собрано на ATtiny13 и предназначено для управления тремя нагрузками 220 вольт при помощи бытового ИК-пульта. Сделано устройство на базе уже знакомой Вам универсальной платы ИК-драйвера. Устройство является ревизией ранее сделанного устройства управления нагрузками. На первый взгляд, функционал устройства остался прежним, но изменения есть — ниже я о них напишу.

 

Предыстория создания устройства.

У меня в гостиной подвешена люстра на 4 лампы.

Изначально, когда я делал ремонт в комнате, для нее был установлен регулятор яркости (диммер).

Удобно менять яркость в соответствии с обстановкой (ярко для чтения и общего времяпровождения, полумрак для просмотра фильмов, и т.д.). В люстре были установлены 4 лампы накаливания по 100Вт (меньшая мощность не давала комфортной освещенности). В свое время, с целью минимизации потребляемой мощности, во всей квартире были заменены лампы накаливания на экономные люминесцентные. Люстра получила свои 4 экономки по 20Вт вместо ламп накаливания. Как следствие, пришлось отказаться от диммера (с экономными лампами он не работает). Экономия – это хорошо, но стало не очень удобно, если нужно было не яркое освещение (приходилось использовать настольную лампу). Нужно было решать эту проблему. И вот только сейчас дошли руки это сделать!

Поначалу была идея поставить вместо экономных люминесцентных ламп мощные (по 10 или 5 Вт) светодиоды и управлять их яркостью с помощью ШИМ. От этой идеи я быстро отказался по причине большой стоимости самих светодиодов, плюс необходимости установки мощного источника питания, плюс необходимости активного теплоотвода от светодиодов … В общем — одни минусы. После этого решил сделать по-простому – управлять яркостью путем отключения части люминесцентных ламп.

Итак, в люстре решено включать одну, две или четыре лампы – этого достаточно, чтобы регулировать яркость в широких пределах. Так как люстра у меня подсоединена по 2 проводам (а проводку заменить не реально без кардинальных переделок потолка), то способ коммутирования ламп может быть только местным – при помощи устройства, установленным непосредственно в люстре. Этим устройством и стало устройство этой статьи.

 

Конструкция устройства управления

Как писал выше, база устройства – это универсальная плата ИК-драйвера

Благо мне была презентована Анкаром небольшая партия таких платок, завалявшихся в излишках, за что ему большая благодарность! Одну из этих плат я и использовал.

Отдельно изготовлена плата коммутации. В качестве коммутирующих элементов используется пара MOC3043  + BT136, что делает схему бесшумной и экономичной. Возможно применение других типов оптосимисторов и силовых симисторов, но для этого используйте обвязку согласно даташитов на них.

Цепочка — резистор 39Ом + конденсатор 0,01мкФ, используемая как снаббер для каждого симистора, не обязательна и я ее в своей конструкции не использовал (хотя на плате есть место для установки). Если возникнут проблемы с включением/отключением нагрузок – эту цепочку необходимо установить.

Устройство должно запитываться от отдельного источника питания – 5 вольт. Я использовал старую подзарядку от мобильного. Зачастую подзарядные устройства имеют на выходе напряжение немного выше 5 вольт. Для этого случая на плате предусмотрено место для установки пятивольтового стабилизатора 78L05.

Плата коммутации имеет 3 канала (A, B, C). Каждый канал включает свою лампу (в моем случае канал С включает сразу 2 лампы)

!!! Внимание !!!

Устройство работает с опасным для жизни напряжением 220В!
Не допускайте какие-либо манипуляции с платой под напряжением. Все настройки, программирование, изучение кнопок пульта нужно производить без подачи напряжения 220 вольт (использовать только источник питания 5 вольт).

Если нагрузки мощные и силовые симисторы нуждаются в радиаторе, то радиатор может быть общим для всех трех (металлические теплоотводы симисторов можно соединять вместе).

Для того чтобы исключить случайные прикосновения к токоведущим частям схемы, устройство необходимо поместить в корпус. Я использовал пластиковый кабельный канал подходящего размера (подходящим размером, в данном случае, оказался 40х16 🙂 ). Плата ИК-драйвера гальванически развязана от опасного напряжения, поэтому ее можно оставить открытой и по надобности отсоединять/присоединять к устройству (например, для добавления нового функционала) . Для этого в корпусе предусматриваем специальное отверстие. Удобство такого решения я уже успел оценить. Пришлось для корректировки прошивки несколько раз перепрошивать МК. Отсоединить платку, прошить МК и вернуть ее на место дело пяти минут!


 

Логика работы

Люстру можно включать/выключать как при помощи ИК-пульта, так и стационарной клавишей включения люстры.
При включении люстры в сеть устройство восстановит состояние люстры до отключения от сети (состояние хранится в энергонезависимой памяти).

Для управления люстрой при помощи ИК-пульта используется 2 кнопки:
1 – Включить/выключить – включает и выключает люстру
2 – Выбор яркости – перебор количества включенных ламп 1, 2, 4

Дополнительно можно задействовать 3 кнопки пульта – отдельное включение/отключение каждой из ламп (канала).

 

Изучение кнопок ИК-пульта

Для управления люстрой подходит любой бытовой пульт (возможно, будут проблемы со специфическими пультами с обратной связью, например, как у пульта от кондиционера). Удобно использовать пульт от телевизора, так как он всегда под рукой и, чаще всего, яркость люстры и нужно уменьшать для комфортного просмотра видео.

Изучение кнопок можно произвести еще до установки устройства в люстру, а можно прямо в люстре (например, если другой пульт нужно изучить)

Для изучения кнопок необходимо:
1 – обесточить устройство
2 – установить джампер «Learn»
3 – включить устройство (при этом индикаторный светодиод должен несколько раз моргнуть и погаснуть)
4 – удалить джампер «Learn»
5 – последовательно нажать на пульту 5 кнопок в очередности функций:
— вкл/выкл все
— перебор нагрузок
— вкл/выкл нагрузки A
— вкл/выкл нагрузки B
— вкл/выкл нагрузки C
6 – после этого устройство автоматически начинает работать в штатном режиме

Каждое нажатие кнопки на пульте будет подтверждаться индикаторным светодиодом.
Если какая либо кнопка не нужна в устройстве (например, последние три функции мне изначально были не нужны, и я их включил в устройство только для возможности применения в других проектах), то в процессе ее изучения нужно нажимать ранее изученную клавишу.

 

Теперь немного о том, чего такого нового в этом устройстве, чего нет в первой версии конструкции. По пунктам:

1 Как Вы знаете, ATtiny13 имеет всего один таймер Timer0 и все процессы приходилось завязывать на него, что создавало проблемы при формировании сигналов с точными периодами или создании модов. Так вот, если подойти к этой проблеме творчески, то в ATtiny13 можно дополнительно заиметь еще 2 источника периодических прерываний! Это Watch Dog Timer – сторожевой таймер (умеет вызывать прерывания с минимальным периодом 16 мС) и ADC – аналого-цифровой преобразователь (умеет вызывать прерывания с минимальным периодом 2,7 мкС). Этого достаточно чтобы в данном устройстве не использовать Timer0 вообще! Теперь свободный таймер можно задействовать в модификациях на произвольные нужды (будь то управление сервоприводом, формирование ШИМ сигнала, формирование длительных периодов времени, например для автоматического отключения и т.д.)

2 Использован новый алгоритм изучения и детектирования сигналов с пульта (такой, как я использовал в ZiChip). Теперь стало почти невозможным совпадение кнопок в различных пультах. Улучшилось качество детектирования.

3 Как и в устройствах ZiChip, алгоритм детектирования ИК-посылки от пульта изначально совмещен с алгоритмом поддержки ИК-сателлитов ZiChip. Это значит, что устройством можно управлять из ZiChip-сети (при наличии в сети хотя бы одного устройства с ИК-излучателем). Номер устройства — 20 (0x14)

121_ir_loads_control.zip - Материалы для сборки устройства IR Loads Control

 

(Visited 13 185 times, 30 visits today)

121-Управление люстрой по ИК-каналу: 87 комментариев

  1. siema

    siema :
    Евгений, проект заработал – огромное спасибо. На плате силового модуля очень тонкие медные проводники. Для освещения закладывают кабель сечением 1,5мм и это гораздо больше. Стоит ли увеличить ширину проводников?

    И для стабилизации 5В достаточно L78L на 40мА или предусмотреть более мощную КРЕН?

  2. GetChiper Автор записи

    Проводники, для данного применения, имеют достаточное сечение.
    Стабилизатор мощней бессмысленно ставить — при любой нагрузке ток в цепях управления одинаков.

  3. siema

    @GetChiper
    Огромное спасибо за ответ. И преогромное спасибо за проделанную работу.

  4. ma35tr0

    GetChiper, слежу за вашими поделками. Все просто и гениально! Буду собирать в детскую 🙂
    Не большое пожелание. Можно добавить функцию выключения по таймеру хотя бы на один из каналов?
    Настройку таймера можно и не записывать в ЕЕПРОМ, а выбирать из кнопок. Например, кнопки 7-8-9 ==> 4-6-8 часов соответственно. Нажатие кнопки активирует/деактивирует таймер.
    И чтобы когда таймер выключал свет это состояние не записывалось в ЕЕПРОМ.

  5. admin Автор записи

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

  6. ma35tr0

    В идеале, конечно, чтобы было на всех трех каналах. Если позволяет память тиньки.
    А выбранное время выключения как-то индицировалось только в момент активации таймера сна.

    Мне видится это как-то так:
    Допустим, кнопки соответствуют 4-6-8 часам.
    При активации таймера, мигает только один канал (любой). Количество вспышек подтверждает выбранное время: 1 вспышка — 4 часа; 2 вспышки — 6 часов; 3 вспышки — 8 часов.
    А при деактивации таймера мигают все каналы, чтобы не было путаницы.
    Если раздражает мигание всей люстры (особенно поздно вечером), можно поставить активный бузер (пьезоизлучатель) со встроенным генератором.

    И так, включаем люстру, активируем таймер, допустим, на 4 часа, нажав на цифру , один из каналов (допустим «канал-А») люстры мигнул 1 раз и время пошло…
    Чтобы деактивировать таймер — нажал еще раз на «семерку», таймер отключен и все каналы мигнули 1 раз.
    Значение таймера не сохраняются в ЕЕПРОМ и активны только для текущего сеанса.
    Если при активированном таймере на 4 часа, вы решили изменить на 6 или 8 часов, то нажимаем на кнопку или соответственно и значение таймера меняется. Соответственно, все это сопровождается вспышками или бузером . Т.е. нет необходимость выключать таймер, чтобы задать новое время отсрочки.

    Может еще что-то лучшее предложите 🙂
    Буду признателен, если проект будет реализован.
    Руки чешутся 🙂

  7. admin Автор записи

    Уже начал делать.
    А чем обусловлен выбор именно таких значений (4-6-8) для таймера?
    Как для меня логичней начать с 1-го часа — ребенка положил спать — оставил свет — часу хватит ему заснуть.
    А 8 часов для чего?

  8. ma35tr0

    Сейчас перечитал свое сообщение и заметил, что некоторые фрагментытекста выпали. Мысль местами прервалась 🙁

    По теме:
    Думаю, 4-6-8 часов это оптимальный интервал, как для взрослых, так и для детей.
    Как мне кажется, делать меньше или уменьшать шаг наращивания задержки (+1час) не имеет смысла.

    Случай из жизни:
    Ребенок посреди ночи проснулся и плачет или просто боится темноты, и Я мчусь в детскую … Под ногами мяч, игрушки… Поскользнулся, упал, очнулся — гипс (с)
    А с не навязчивой подсветкой и ребенку комфортно, и родителям.

    Сейчас у детей в комнате висит люстра с 4 плафонами (поставил энергосберегайки) + покругу светодиоды с отдельным БП для них. Есть мысль на Канал С подключить эти же светодиоды. А если хватит памяти, можно реализовать ШИМ (в моем случае, это не принципиально) на этом канале и управлять СИД-лентой Н-канальным полевиком. Появится возможность управлять яркостью фоновой подсветки и к ней же привязать таймер. Т.е. таймер действует только на Канал С (5ая нога МК).

    Остальные 2 канала (А и Б) включают нагрузку по вашему варианту. В моем случае на каждом канале по 2 лампы: Канал-А —> включение 2х ламп; Канал-B —> включение ещё 2х ламп.
    Ну, вот как-то так 🙂

    У меня даже заводская печатка есть под СМД. Буду признателен и обязуюсь провести испытания прошивки 🙂
    Правда нужно порты переписать:
    Канал А — 7ая нога (PORTB.2)
    Канал В — 6ая нога (PORTB.1)
    Канал С — 5ая нога (PORTB.0) ШИМ
    Датчик — 3ая нога (PORTB.4)
    Светодиод на своем месте.
    Это возможно или разводить на кухне плату? 🙂

    Фотку могу скинуть и диптрейс приложить, если кому нужно будет 🙂

  9. admin Автор записи

    По поводу перестановки TSOP — не выйдет, он установлен на ножку аппаратного прерывания (на других ножках его нет)
    По поводу времени установок решил пока установить более компромиссный вариант 1-4-8. Как заработает этот вариант сделаю варианты прошивок под любые комбинации.

    Готов вариант модификации http://www.forum.getchip.net/viewtopic.php?f=24&t=739
    — добавлена еще одна кнопка пульта (шестая — «установка таймера»)
    — эта кнопка активизирует таймер автоматического отключения нагрузок (через 1, 4 или 8 часов)
    — каждое последующее нажатие выбирает следующее время таймера (1 нажатие — 1 час, второе — 4 часа, третье — 8 часов, четвертое таймер отключен)
    — какой таймер установлен можно понять по морганию нагрузок после выбора таймера (1час — одно отключение, 4 часа — 2 отключения, 8 часов — 3 отключения, выключен таймер — одно отключение с длинной задержкой)

    В железе не пробовал — нужно обкатать (по проблемам отписываться на форуме)

  10. Scr77

    Собрал схему, заработала. Дома попробовал для пульта на Sony Bravia 2015 — каналы А,В,С не работают, перебор нагрузок тоже. Включение и выключение всех нагрузок иногда работает. Пожалуйста, если есть у кого решение этой проблемы — подскажите…(Пробовал еще на пульт от Samsung-работает полностью и пульт от Lumax приставки тоже полностью). Кстати транзистор на светодиоде пробовал: КТ3102 или КТ315 — работает(npn).

  11. admin Автор записи

    Может в пульте Sony севшие батарейки?
    Если вплотную поднести к приемнику лучше станет срабатывать?
    Или у Sony протокол какой с особым извратом (хотя вряд-ли)

  12. Scr77

    Батарейки в норме, подносил пульт при обучении очень близко. Где-то прочитал, что у соньки длины пакетов различаются на 3 вида: 12, 15 и 20 разрядов. Может быть из-за этого, что в прошивке принимается короткий пакет, а пульт отсылает длиннее — вот и не работает как надо?

  13. admin Автор записи

    Прошивке все равно какой длины пакет — специальный алгоритм получит значение с любого пакета.
    Может быть частота модулирования ИК-сигнала пульта сильно отличается от применяемого TSOP?

  14. Razzgon

    Добрый день, данному устройству не хватает управления нагрузками «штатным выключателем» , как это реализовано в промышленных устройствах. (т.е. алгоритм такой, при включении выключателя (подачи напряжения на устройство) зажигается канал A, если после этого кратковременно выключить и включить, то зажигается дополнительно канал B, при следующем кратковременном отключении , добавляется канал С и светят все три канала ABC -это алгоритм НА УВЕЛИЧЕНИЕ. Также, если вдруг, эта идея будет реализована, то сразу можно сделать и второй вариант прошивки, алгоритм НА УМЕНЬШЕНИЕ т.е изначально при включении активны все три канала ABC, при последующем кратковременном отключении вычитается один канал остаются AB, далее только A (это характерно например для освещения в гостинной (зале), когда приглушенный свет требуется реже и каждый раз включать освещение трехкратным щелканьем выключателя не совсем уместно.

  15. admin Автор записи

    Неплохая идея.
    Как соберусь обновлять устройство — попробую реализовать.

  16. Тарас-Бороненко

    Здравствуйте ув.GetChiper!Собрал ваше устройство,всё работает,но не совсем так как хотелось бы.Перепробовал множество пультов,с теми которые подошли одна и та же проблема.Если включать/выключать нагрузки по отдельности соответствующими кнопками на пульте A,B,C,то всё работает прекрасно.Но стоит выключить кнопкой вкл/выкл всё,потом если включать отдельную нагрузку (A,B или C)устройство работает неадекватно.Например при включении А включаются В и С,а А при этом не включается.Если ещё раз нажать на А тогда включается и в дальнейшем всё работает корректно до очередного нажатия на вкл/выкл всё.Можно ли это исправить?Заранее огромное спасибо за проект!)

  17. Тарас-Бороненко

    Заметил ещё одну особенность,если выключаю все каналы по отдельности,кн. ВКЛ/ВЫКЛ ВСЁ они уже не включаются,либо включаются двойным нажатием.

  18. admin Автор записи

    Давайте тогда сделаем модификацию по Вашим пожеланиям.
    Вот в этой модификации
    http://www.forum.getchip.net/viewtopic.php?f=24&t=739&hilit=Mod%23121
    было много учтено различных вариантов работы. Прочитайте и все что посчитаете нужным записываете в новый топик модификации — сюда
    http://www.forum.getchip.net/viewtopic.php?f=24&t=785

  19. siema

    Евгений, добрый день!
    Решил пересесть с 076 на 121…
    На нагрузке A мне необходим импульс, все остальное – без изменений.
    Думал, что сделал правильно. Но не работает, как планировал. Стало так (анализировал только выход нагрузки A): при нажатии на любую изученную кнопку – импульс на нагрузке А.
    Изменения делал только в закладке отработки нагрузок:
    https://yadi.sk/i/BZIeTq7i3HHTk6

  20. siema

    Всех с большим праздником!!
    Евгений, я исправил свою ошибку и сэмулировал ситуацию с управлением нагрузок. В Loads_state была загружена тройка и на выходе порта получил импульс и два высоких уровня.
    Но на реальной плате с этой прошивкой наблюдаю импульс на выводе PortB.4 при нажатии на любую изученную кнопку.
    Буду благодарен за помощь!
    https://yadi.sk/i/t-aqnE4m3Hs6dJ

  21. GetChiper Автор записи

    На нагрузке A мне необходим импульс, все остальное – без изменений.
    — это без изменений?

  22. siema

    За основу бралось это: Mod#121 — обучение по длительному удержанию кнопки (ir_control_source_alt_learn)
    Хотелось бы как по описанию:
    — вкл/выкл все
    — перебор нагрузок
    — вкл/выкл нагрузки A
    — вкл/выкл нагрузки B
    — вкл/выкл нагрузки C
    с одним исключением: на нагрузку А чтобы подавался импульс, а не потенциал.
    Прошивка с алгоритмом, который приложил ранее, работает на выводе А след. образом: при нажатии на любую кнопку из 5 обученных ВСЕГДА присутствует импульс на нагрузке А. Другие нагрузки не анализировал, т.к. они отключены, но если надо — буду замерять на ногах.

    Импульс на А должен быть при нажатии на кнопки: 1 (при включении), 2 (исходно в переборе она всегда включена), 3 (при включении).

    ЗЫ. Исходник ir_control_source_alt_learn на люстре работает как описано в статье.

    Спасибо за отклик и помощь!

  23. GetChiper Автор записи

    Понятно. Закончу свои дела — будем переделывать.

  24. Scr77

    Пульт от SONY BRAVIA 2015 на 40 кГц (ИК приёмник TSOP 4840) — работают только перебор нагрузок и вкл\выкл всё и то не всегда, почему то некоторые кнопки не распознаёт …

  25. siema

    Я готов сам переделать. И мне казалось, что установка порта происходит по битовому сравнению переменной, в которую записывается информация в зависимости от поданного сигнала с пульта. В моем понимании было — достаточно изменить алгоритм обработки состояния порта как функцию этой переменной. Но не сработало. Неужели здесь использован какой-то другой, глубокий подход?

  26. GetChiper Автор записи

    Самому разобраться — это хорошо (потому что у меня сейчас вообще не до чего руки не доходят)

    В общем так оно и работает — приходит поток битов, который запоминается. После определенной паузы (которая служит сигналом конца посылки) принятая последовательность сравнивается с заданными последовательностями в EEPROM. Если что-то совпало — выполняется заданное действие.

  27. siema

    Спасибо за ответ. Так и думал и симулировал соответственно: в начале программы сразу после инициализации стека для переменной Loads_State задавал значения (» приходит поток битов») от 0 до 7 для PortB.0/2/4 и вызывал процедуру _Do_ABC. В режиме симуляции отрабатывает как надо.
    Сейчас обратил внимание на секцию _Do_Act и понял, что разбираться надо дальше…

  28. siema

    Евгений, а что такие Loop в секции _Do_Act? И для чего в целом эта секция?

  29. GetChiper Автор записи

    В этой секции (подпрограмме) в зависимости от значения Loop выполняются заданные действия.

    Последовательность такая:
    После того как принят очередной ИК-пакет, вызывается подпрограмма _Test_Hash — в которой определяется есть ли совпадения принятого кода с уже сохраненными.
    Если есть в Loop записывается номер совпавшего кода.
    Дальше вызывается _Do_Act, где по номеру в Loop и выполняется заданное действие.

  30. Иван

    Многоуважаемый GetChip, здравствуйте! 🙂
    Замечательное устройство у Вас получилось! Не могли бы Вы только подсказать, как в Вашем новом алгоритме реализовать автоповтор команды для регулировки яркости?

  31. GetChiper Автор записи

    Привет!
    Можно глянуть исходник (есть в статье)

    A если по простому, то после приема первой посылки, последующие короткие импульсы считаются повторением предыдущей посылки (при условии что эти импульсы вкладываются в тайминги протокола)

  32. Максим

    Здравствуйте.

    Первое, что хочется сказать — спасибо, за труды. Все доходчиво и понятно.
    Ну а второе — мне понравилась альтернативная версия прошивки, где добавлен таймер и включение одного канала, при «включении» микроконтроллера.
    Так вот вопрос — можете ли Вы подсказать, как сделать так, чтобы при включении люстры, по умолчанию включались все каналы, т.е. люстра светила на полную.
    Подскажите пожалуйста где и что подправить.
    Спасибо.

  33. GetChiper Автор записи

    Привет!
    Самое простое — в начале программы установить лог 1 на всех портах нагрузок.

  34. Сергей

    На фото изображён конденсатор с номиналом 105. Я ошибаюсь что это 1 mkF ? По схеме должно быть 10.

  35. GetChiper Автор записи

    Ставил, что было… Этого вполне хватило )

Добавить комментарий