Анимируем статичную гирлянду с помощью ATtiny13
Новый год уже скоро, поэтому самое время подумать о праздничном освещении. Сегодня я хочу показать, как с помощью дешевого микроконтроллера и хитрой прошивки можно сделать веселее даже самую скучную статичную светодиодную гирлянду.
Исходные данные
У меня скопилось великое множество самых разных гирлянд, среди них есть как простые советские на лампочках, так и модные нынче на адресных светодиодах. Когда играться с режимами последних мне надоело, я пришел к выводу, что это все баловство, и самый оптимальный вариант гирлянды — это та, которую включил один раз и забыл. Самыми удобными мне показались USB гирлянды на 30-40 лампочек длиной 4-6 метров. Они недорого стоят, их удобно хранить за счет небольшой длины и можно воткнуть куда угодно, т.к. потребление у них мизерное. Единственный минус — такие гирлянды в основном абсолютно статичны, т.е. при работе просто светятся и не имеют никаких спецэффектов. Еще в прошлом году я заказывал сразу кучу разных USB гирлянд, среди них мне больше всего понравились такого типа:
Заказывал здесь. Это примитивная гирлянда на 30 светодиодов длиной 4.5 метра, которая питается от любого USB порта и во время работы просто светится по всей длине:
В ней чередуются светодиоды 4х цветов: красного, желтого, зеленого и синего. Есть и варианты с просто белыми/теплыми вариантами светодиодов:
На странице лота есть и вариант с батарейным питанием, причем он отличается наличием мигающего режима (мигает просто вся гирлянда). Такая у меня тоже есть, и у нее имеется большой минус: она очень быстро теряет яркость по мере просадки батареек. При всей своей тупой примитивности в техническом плане эти гирлянды все же имеют свой некий шарм за счет интересных рассеивателей:
Они сделаны из прозрачной эпоксидки и наполнены пузырьками, на которых красиво рассеивается свет, создавая эффект шара со снежинками:
В техническом плане гирлянда ничего сложного и интересного не представляет, на конце обычный USB разъем со встроенной в него парочкой гасящих резисторов:
А все светодиоды подключены параллельно, на всю длину гирлянда имеет всего 2 провода:
Потребляет это поделие всего 90мА, поэтому его можно питать от любого подвернувшегося USB порта:
Я, например, втыкаю свои в порты телевизора, ТВ приставки, в старые ненужные зарядники от телефонов — везде работает отлично.
Теория
Несмотря на то, что провода в данной гирлянде всего 2, мы с помощью хитрости можем заставить ее мигать двумя группами светодиодов независимо друг от друга. Хитрость эта называется Charlieplexing, и ей уже сто лет в обед. Заключается она в том, что можно подключить светодиоды разной полярностью к общей шине и управлять ими отдельно с помощью изменения полярности на шине:
Особенно легко это делать при помощи микроконтроллера: подаем на вход X1 логическую единицу, на X2 — ноль, в итоге горит LED1. Инвертируем (X1 — ноль, X2 — единица) — горит LED2, таким образом мы имеем возможность по всего двум проводам независимо управлять двумя отдельными светодиодами. Если переключать выходы с большой частотой, по визуально будут гореть оба светодиода, причем с помощью изменения длины периода можно менять и яркость, т.е. это фактически обычный двухполярный ШИМ. На самом деле Чарлиплексинг не ограничивается двумя светодиодами, это для него вообще самый примитивный случай. Обычно в реальности эта техника используется для управления всякими матрицами светодиодов с использованием сильно меньшего количества пинов микроконтроллера. Но у такого подхода есть существенный минус: мерцание и падение яркости с ростом количества коммутируемых светодиодов, от этого никуда не деться.
Практика
Для управления светодиодами будем традиционно использовать микроконтроллер ATiny13, причем питать светодиоды мы будем напрямую с пинов контроллера, а для повышения максимального отдаваемого тока мы запараллелим по паре пинов. О допустимости такого подхода ходят споры, но на деле лично я проблем никогда не замечал, по моему опыту этот МК вообще нереально убить практически ничем. Каждый пин t13 может отдавать до 20мА, для двух пинов получаем до 40мА, чего должно быть достаточно для питания половины гирлянды почти без потери яркости (т.к. вся она потребляет 90мА, см. выше). Общая схема:
Здесь C1 — конденсатор на 0.1-1 мКф, R1 — резистор на 10-20 Ом. Питать напрямую от МК можно гирлянду длиной 15-30 светодиодов, не больше. Для гирлянд большей длины придется городить усилитель на полевиках, что-то типа такого:
Бинарник прошивки и исходники можно скачать тут.
Внимательных читателей заинтересует, как же осуществляется переключение режимов, если на схеме нет ни одной кнопки? А хитрость в том, что я пошел по пути, который используется в фонариках, и режимы здесь переключаются быстрым отключением-включением питания схемы. Причем последний использованный режим запоминается спустя примерно минуту работы, так что каждый раз заново перебирать все режимы в поисках наиболее понравившегося не нужно. К слову, можно легко реализовать переключение и по кнопке — для этого достаточно включить ее между RESET и VCC микроконтроллера. Режимы работы мы рассмотрим позже, а пока нам нужно немного пошаманить над самой гирляндой, т.к. у нее все светодиоды подключены параллельно. У каждого второго светодиода снимаем рассеиватель, в моем случае это синие и зеленые диоды:
Светодиод сидит на термоклею, для более легкого съема «плафон» можно погреть феном. Снимаем старую термоусадку:
Между контактами имеется кусок пластика, его не выкидываем — он нужен для предотвращения замыкания. Каждый второй светодиод таким образом перепаиваем на обратную полярность и собираем в обратном порядке. Новая термоусадка:
Диаметр 4.8мм, брал тут, на всю длину гирлянды хватит отрезка длиной 50см. Усаживаем:
При усадке каждого светодиода важно проверить, что нигде ничего не замкнуло или не пропал контакт. В конце надеваем рассеиватели и проверяем все еще раз, подав на вход гирлянды 5В через 100 Ом резистор:
Если все сделано верно, гореть должны при этом только сине-зеленые или красно-желтые светодиоды, а при смене полярности питания — наоборот:
Для электронной начинки было лень разводить и травить свою плату, поэтому первый прототип я решил сделать с помощью платы-переходника SSOP8:
А размещаться все это будет в сборном USB type A разъеме:
Для большей компактности пришлось немного подрезать как пластиковую часть коннектора, так и переходник микроконтроллера:
Запаиваем микроконтроллер и параллелим пины:
Далее я буквально навесным монтажом разместил на разъеме конденсатор и припаял плату с МК:
Два средних пина из разъема я вытащил, чтобы конденсатор уместился и не замыкал. Аналогичным образом на весу припаян 1206 резистор на 10 Ом:
Ни к какой красоте я здесь не стремился, это чисто демонстрационный прототип для проверки работоспособности идеи. Для реального использования я планирую чуть позже развести и заказать нормальные платы. Дабы ничего не отвалилось во время испытаний я залил плату эпоксидкой, и после сборки на конце гирлянды имеем обычный USB разъем, про который с виду и не скажешь, что он несет в себе какую-то хитрую логику:
Результат
Всего в прошивке 11 режимов, среди них:
- Автоматический — в нем все мигающие режимы переключаются по кругу через определенный интервал времени
- Статический — горят все диоды одновременно, как было изначально
- 9 видов мигалок, у каждой из которой есть 3 скорости (медленно, средне, быстро)
Переключение между режимами, как вы догадываетесь, осуществляется перетыканием USB разъема, что при активном использовании может сократить срок службы порта на питающем устройстве, но на деле скорее всего в 99% случаев при первом же включении будет установлен автоматический режим, в котором гирлянда будет работать практически всегда. Но при большом желании в корпусе разъема можно уместить и микропереключатель.
Итак, предлагаю посмотреть, как работают всякие мигалки.
Самая первая — просто мигание всеми светодиодами одновременно:
Далее идет поочередная мигалка:
«Полицейская» мигалка:
Поочередная мигалка «с нахлестом»:
Поочередная мигалка «с нахлестом» №2:
Плавная мигалка всеми светодиодами:
Плавная поочередная мигалка:
Плавная поочередная мигалка «с нахлестом»:
Плавная поочередная мигалка «с нахлестом» №2:
Итог
Описанным образом можно оживить практически любую статичную гирлянду, если в ней не очень много светодиодов. Хотя на рынке в наши дни полно готовых гирлянд и контроллеров к ним, на сделанную своими руками смотреть гораздо приятнее)
- Тонкий клиент vs Orange Pi
- 21.34$ за 128ГБ карту памяти Lenovo ThinkPlus, XC, U3
- KWS-AC301: 8 in1 Вольтметр, Амперметр, Счетчик энергии и прочее...
- Усилитель ELEGIANT BTZ-001. Дифференциальный усилитель для тестирования УМЗЧ с мостовым выходом.
- Китайский путь: отличная ручка Jinhao 601.
- Мультиметр CEM DT-9939
- GMK NUCBOX - крошечный компьютер с процессором Intel и ОС Windows 10. Есть ли предел миниатюризации?
- Блютуз USB DONGLE MPOW MP BH456A. Установка под Linux и "Это всё о нём". Из цикла "Три орешка для Золушки".
- Небольшая доработка китайских часов с flip индикацией
- Термостабильный паяльник JСD 908S LCD на 80 Вт