Устройство этой статьи собрано на 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 (3985 Загрузок)
спасибо! соберу другой Ваш проект на 2313
Так сходу не получится поменять. Нужно разбираться.
Поосто пните в нужном направлении. В среде программирования выбрать кристал назначить пины, оставив основной алгоритм работы или там все глобальнее надо менять ? Спс!
Сейчас я таким не смогу заняться.
A не подскажете, можно ли это сделать на микроконтроллере 2313 ?
Стационарная клавиша — это та, что подает на люстру 220В
Вы пишете: ‘Люстру можно включать/выключать как при помощи ИК-пульта, так и стационарной клавишей включения люстры.» Kак и где подключить стационарные переключатели??
Естественно 100 вольтовые диоды будут взрываться при подачи на них около 300 Вольт. ))))))))))))))))
Сделал схему такую и выключатель обычныйhttp://kazus.ru/forums/showthread.php?t=13218 диодный мост поставил с 1н4007 которые на схеме взорвались конденсатор на плюс минус поставил работет отлично
@RV
Проходной выключатель можно сделать следующим образом: выключатель который подаёт фазу должен быть без фиксации (управляющий сигнал). А питание лампочек осуществляется от фазы которая присутствует на люстре постоянно (которая питает и ардуину через БП). Схему управляющего сигнала от выключателя (кнопка) можно использовать вот такую
Логика работы проста: Пришёл сигнал от кнопки или дистанции – проверяем если включено то выключаем, а если выключено то включаем. Вот тебе получится «проходной выключатель»
В моем случае на люстру идет только одна фаза (и ноль), поэтому говорить о какой-то независимой работе не приходится. Если выключателем обесточивается вся люстра, понятное дело, уже с пульта не по управляешь.
Но для того, чтобы было комфортно пользоваться светом в такой ситуации, я запоминаю в еепром состояние работы люстры и если ее выключить выключателем и потом включить она возвращается в исходное состояние.
Автор как реализовали логику включения выключения выключателем и платой независимо? У меня 2 фазы в лампе одной питаю ардуино другая от выключателя. Нету тини13 сделал на ардуино ардуиной работает, только никак не могу програмно сделать что б ардуиной включил выключателем выключил и наоборот как проходной выключатель. Выключатель простой стоит. Сейчас получается выключатель приоритетный над ардуино так как от ардуино включается только когда приходит код от пульта (импульсно) и когда ардуино или включает или выключает лампу то выключатель сразу же переводит состояние лампы в обратное ардуине соответственно, так как он или включен или выключен.
Ставил, что было… Этого вполне хватило )
На фото изображён конденсатор с номиналом 105. Я ошибаюсь что это 1 mkF ? По схеме должно быть 10.
Привет!
Самое простое — в начале программы установить лог 1 на всех портах нагрузок.
Здравствуйте.
Первое, что хочется сказать — спасибо, за труды. Все доходчиво и понятно.
Ну а второе — мне понравилась альтернативная версия прошивки, где добавлен таймер и включение одного канала, при «включении» микроконтроллера.
Так вот вопрос — можете ли Вы подсказать, как сделать так, чтобы при включении люстры, по умолчанию включались все каналы, т.е. люстра светила на полную.
Подскажите пожалуйста где и что подправить.
Спасибо.
Привет!
Можно глянуть исходник (есть в статье)
A если по простому, то после приема первой посылки, последующие короткие импульсы считаются повторением предыдущей посылки (при условии что эти импульсы вкладываются в тайминги протокола)
Многоуважаемый GetChip, здравствуйте! 🙂
Замечательное устройство у Вас получилось! Не могли бы Вы только подсказать, как в Вашем новом алгоритме реализовать автоповтор команды для регулировки яркости?
В этой секции (подпрограмме) в зависимости от значения Loop выполняются заданные действия.
Последовательность такая:
После того как принят очередной ИК-пакет, вызывается подпрограмма _Test_Hash — в которой определяется есть ли совпадения принятого кода с уже сохраненными.
Если есть в Loop записывается номер совпавшего кода.
Дальше вызывается _Do_Act, где по номеру в Loop и выполняется заданное действие.
Евгений, а что такие Loop в секции _Do_Act? И для чего в целом эта секция?
Спасибо за ответ. Так и думал и симулировал соответственно: в начале программы сразу после инициализации стека для переменной Loads_State задавал значения (» приходит поток битов») от 0 до 7 для PortB.0/2/4 и вызывал процедуру _Do_ABC. В режиме симуляции отрабатывает как надо.
Сейчас обратил внимание на секцию _Do_Act и понял, что разбираться надо дальше…
Самому разобраться — это хорошо (потому что у меня сейчас вообще не до чего руки не доходят)
В общем так оно и работает — приходит поток битов, который запоминается. После определенной паузы (которая служит сигналом конца посылки) принятая последовательность сравнивается с заданными последовательностями в EEPROM. Если что-то совпало — выполняется заданное действие.
Я готов сам переделать. И мне казалось, что установка порта происходит по битовому сравнению переменной, в которую записывается информация в зависимости от поданного сигнала с пульта. В моем понимании было — достаточно изменить алгоритм обработки состояния порта как функцию этой переменной. Но не сработало. Неужели здесь использован какой-то другой, глубокий подход?
Пульт от SONY BRAVIA 2015 на 40 кГц (ИК приёмник TSOP 4840) — работают только перебор нагрузок и вкл\выкл всё и то не всегда, почему то некоторые кнопки не распознаёт …
Понятно. Закончу свои дела — будем переделывать.
За основу бралось это: Mod#121 — обучение по длительному удержанию кнопки (ir_control_source_alt_learn)
Хотелось бы как по описанию:
— вкл/выкл все
— перебор нагрузок
— вкл/выкл нагрузки A
— вкл/выкл нагрузки B
— вкл/выкл нагрузки C
с одним исключением: на нагрузку А чтобы подавался импульс, а не потенциал.
Прошивка с алгоритмом, который приложил ранее, работает на выводе А след. образом: при нажатии на любую кнопку из 5 обученных ВСЕГДА присутствует импульс на нагрузке А. Другие нагрузки не анализировал, т.к. они отключены, но если надо — буду замерять на ногах.
Импульс на А должен быть при нажатии на кнопки: 1 (при включении), 2 (исходно в переборе она всегда включена), 3 (при включении).
ЗЫ. Исходник ir_control_source_alt_learn на люстре работает как описано в статье.
Спасибо за отклик и помощь!
На нагрузке A мне необходим импульс, все остальное – без изменений.
— это без изменений?
Всех с большим праздником!!
Евгений, я исправил свою ошибку и сэмулировал ситуацию с управлением нагрузок. В Loads_state была загружена тройка и на выходе порта получил импульс и два высоких уровня.
Но на реальной плате с этой прошивкой наблюдаю импульс на выводе PortB.4 при нажатии на любую изученную кнопку.
Буду благодарен за помощь!
https://yadi.sk/i/t-aqnE4m3Hs6dJ
Евгений, добрый день!
Решил пересесть с 076 на 121…
На нагрузке A мне необходим импульс, все остальное – без изменений.
Думал, что сделал правильно. Но не работает, как планировал. Стало так (анализировал только выход нагрузки A): при нажатии на любую изученную кнопку – импульс на нагрузке А.
Изменения делал только в закладке отработки нагрузок:
https://yadi.sk/i/BZIeTq7i3HHTk6
Давайте тогда сделаем модификацию по Вашим пожеланиям.
Вот в этой модификации
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
Заметил ещё одну особенность,если выключаю все каналы по отдельности,кн. ВКЛ/ВЫКЛ ВСЁ они уже не включаются,либо включаются двойным нажатием.
Перечитав форум и перечень модов решение своей проблемы так и не нашёл…
Что-то в модах я уже менял — не помню уже…
Посмотри — если не найдешь будем править
http://www.forum.getchip.net/search.php?keywords=Mod%23121&terms=all&author=&sc=1&sf=titleonly&sk=t&sd=d&sr=posts&st=0&ch=300&t=0&submit=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA
Здравствуйте ув.GetChiper!Собрал ваше устройство,всё работает,но не совсем так как хотелось бы.Перепробовал множество пультов,с теми которые подошли одна и та же проблема.Если включать/выключать нагрузки по отдельности соответствующими кнопками на пульте A,B,C,то всё работает прекрасно.Но стоит выключить кнопкой вкл/выкл всё,потом если включать отдельную нагрузку (A,B или C)устройство работает неадекватно.Например при включении А включаются В и С,а А при этом не включается.Если ещё раз нажать на А тогда включается и в дальнейшем всё работает корректно до очередного нажатия на вкл/выкл всё.Можно ли это исправить?Заранее огромное спасибо за проект!)
Неплохая идея.
Как соберусь обновлять устройство — попробую реализовать.
Добрый день, данному устройству не хватает управления нагрузками «штатным выключателем» , как это реализовано в промышленных устройствах. (т.е. алгоритм такой, при включении выключателя (подачи напряжения на устройство) зажигается канал A, если после этого кратковременно выключить и включить, то зажигается дополнительно канал B, при следующем кратковременном отключении , добавляется канал С и светят все три канала ABC -это алгоритм НА УВЕЛИЧЕНИЕ. Также, если вдруг, эта идея будет реализована, то сразу можно сделать и второй вариант прошивки, алгоритм НА УМЕНЬШЕНИЕ т.е изначально при включении активны все три канала ABC, при последующем кратковременном отключении вычитается один канал остаются AB, далее только A (это характерно например для освещения в гостинной (зале), когда приглушенный свет требуется реже и каждый раз включать освещение трехкратным щелканьем выключателя не совсем уместно.
Прошивке все равно какой длины пакет — специальный алгоритм получит значение с любого пакета.
Может быть частота модулирования ИК-сигнала пульта сильно отличается от применяемого TSOP?
Батарейки в норме, подносил пульт при обучении очень близко. Где-то прочитал, что у соньки длины пакетов различаются на 3 вида: 12, 15 и 20 разрядов. Может быть из-за этого, что в прошивке принимается короткий пакет, а пульт отсылает длиннее — вот и не работает как надо?
Может в пульте Sony севшие батарейки?
Если вплотную поднести к приемнику лучше станет срабатывать?
Или у Sony протокол какой с особым извратом (хотя вряд-ли)
Собрал схему, заработала. Дома попробовал для пульта на Sony Bravia 2015 — каналы А,В,С не работают, перебор нагрузок тоже. Включение и выключение всех нагрузок иногда работает. Пожалуйста, если есть у кого решение этой проблемы — подскажите…(Пробовал еще на пульт от Samsung-работает полностью и пульт от Lumax приставки тоже полностью). Кстати транзистор на светодиоде пробовал: КТ3102 или КТ315 — работает(npn).
По поводу перестановки 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 отключения, выключен таймер — одно отключение с длинной задержкой)
В железе не пробовал — нужно обкатать (по проблемам отписываться на форуме)
Сейчас перечитал свое сообщение и заметил, что некоторые фрагментытекста выпали. Мысль местами прервалась 🙁
По теме:
Думаю, 4-6-8 часов это оптимальный интервал, как для взрослых, так и для детей.
Как мне кажется, делать меньше или уменьшать шаг наращивания задержки (+1час) не имеет смысла.
Случай из жизни:
Ребенок посреди ночи проснулся и плачет или просто боится темноты, и Я мчусь в детскую … Под ногами мяч, игрушки… Поскользнулся, упал, очнулся — гипс (с)
А с не навязчивой подсветкой и ребенку комфортно, и родителям.
Сейчас у детей в комнате висит люстра с 4 плафонами (поставил энергосберегайки) + покругу светодиоды с отдельным БП для них. Есть мысль на Канал С подключить эти же светодиоды. А если хватит памяти, можно реализовать ШИМ (в моем случае, это не принципиально) на этом канале и управлять СИД-лентой Н-канальным полевиком. Появится возможность управлять яркостью фоновой подсветки и к ней же привязать таймер. Т.е. таймер действует только на Канал С (5ая нога МК).
Остальные 2 канала (А и Б) включают нагрузку по вашему варианту. В моем случае на каждом канале по 2 лампы: Канал-А —> включение 2х ламп; Канал-B —> включение ещё 2х ламп.
Ну, вот как-то так 🙂
У меня даже заводская печатка есть под СМД. Буду признателен и обязуюсь провести испытания прошивки 🙂
Правда нужно порты переписать:
Канал А — 7ая нога (PORTB.2)
Канал В — 6ая нога (PORTB.1)
Канал С — 5ая нога (PORTB.0) ШИМ
Датчик — 3ая нога (PORTB.4)
Светодиод на своем месте.
Это возможно или разводить на кухне плату? 🙂
Фотку могу скинуть и диптрейс приложить, если кому нужно будет 🙂
Уже начал делать.
А чем обусловлен выбор именно таких значений (4-6-8) для таймера?
Как для меня логичней начать с 1-го часа — ребенка положил спать — оставил свет — часу хватит ему заснуть.
А 8 часов для чего?
В идеале, конечно, чтобы было на всех трех каналах. Если позволяет память тиньки.
А выбранное время выключения как-то индицировалось только в момент активации таймера сна.
Мне видится это как-то так:
Допустим, кнопки соответствуют 4-6-8 часам.
При активации таймера, мигает только один канал (любой). Количество вспышек подтверждает выбранное время: 1 вспышка — 4 часа; 2 вспышки — 6 часов; 3 вспышки — 8 часов.
А при деактивации таймера мигают все каналы, чтобы не было путаницы.
Если раздражает мигание всей люстры (особенно поздно вечером), можно поставить активный бузер (пьезоизлучатель) со встроенным генератором.
И так, включаем люстру, активируем таймер, допустим, на 4 часа, нажав на цифру , один из каналов (допустим «канал-А») люстры мигнул 1 раз и время пошло…
Чтобы деактивировать таймер — нажал еще раз на «семерку», таймер отключен и все каналы мигнули 1 раз.
Значение таймера не сохраняются в ЕЕПРОМ и активны только для текущего сеанса.
Если при активированном таймере на 4 часа, вы решили изменить на 6 или 8 часов, то нажимаем на кнопку или соответственно и значение таймера меняется. Соответственно, все это сопровождается вспышками или бузером . Т.е. нет необходимость выключать таймер, чтобы задать новое время отсрочки.
Может еще что-то лучшее предложите 🙂
Буду признателен, если проект будет реализован.
Руки чешутся 🙂
Честно говоря я о таймере и раньше подумывал, поэтому обязательно по свободе сделаю такую модификацию.
Но я всетаки думаю по таймеру нужно выключать все каналы (вдруг забыл оставить на вечер только одну лампу — свет будет гореть всю ночь)
GetChiper, слежу за вашими поделками. Все просто и гениально! Буду собирать в детскую 🙂
Не большое пожелание. Можно добавить функцию выключения по таймеру хотя бы на один из каналов?
Настройку таймера можно и не записывать в ЕЕПРОМ, а выбирать из кнопок. Например, кнопки 7-8-9 ==> 4-6-8 часов соответственно. Нажатие кнопки активирует/деактивирует таймер.
И чтобы когда таймер выключал свет это состояние не записывалось в ЕЕПРОМ.
@GetChiper
Огромное спасибо за ответ. И преогромное спасибо за проделанную работу.
Проводники, для данного применения, имеют достаточное сечение.
Стабилизатор мощней бессмысленно ставить — при любой нагрузке ток в цепях управления одинаков.
И для стабилизации 5В достаточно L78L на 40мА или предусмотреть более мощную КРЕН?