No Image

Елка из светодиодной ленты

СОДЕРЖАНИЕ
55 просмотров
12 декабря 2019

До нового года осталось меньше двух недель, а новогоднего настроения все нет? Нужно срочно сделать что-то электронно-новогоднее, со светодиодами и ассемблером. Забегая вперед, вот что вышло:

Новогодняя елка из светодиодов, классика жанра! Вдохновленный постом Gum , продумал схему, соединения, размеры и прочее. Питание взял от USB-порта. Падение напряжения на светодиоде нагуглилось около 2.5В, получилось по 2 светодиода последовательно. Также хотел поиграть с ШИМом, в ATTiny24A аппаратный шим присутствует на 4 ногах, поэтому все светодиоды поделил на 4 группы — 1 красный и 3 группы зеленых по 8 светодиодов. Управлять таким напрямую, конечно, нельзя. Поэтому решил использовать мосфеты с низким порогом срабатывания. В ближайшем магазине нашлись нужные мне по характеристикам — IRLML2502TR (порог 1.2В, максимальное напряжение 20В и ток 4.2А – за глаза). На размеры транзистора я тогда внимания не обратил, а зря, 3х1.5мм, такую мелюзгу паять еще не приходилось:

В Sprint Layout развел печатную плату, на этом варианте неправильно подключены кнопки — подтяжка не стой стороны, и вообще оказалось, что кнопка замыкает другую пару контактов (и вообще не знаю зачем мне их две нужно было):

Изготавливал плату ЛУТом. В качестве бумаги использовал вырванный лист из первого попавшегося рекламного журнала, могу сказать, что результат получился отличный, только немного расплылись площадки под мосфеты.

Протравил плату в растворе лимонной кислоты и перекиси водорода. Некоторый промежуточный результат:

Ацетона или растворителя в нужном количестве не было, поэтому можно увидеть темные места – не до конца оттертый тонер.

Дело осталось за самым главным — светодиодами. Все оказалось не так уж и сложно. На листе бумаги разметил схема будущей елки в разрезе, и по ней гнул светодиоды:

Далее обрезал лишние ножки, для удобства пайки (из упаковки оригинальной arduino из Италии, между прочим) была сделана такая приспособа:

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

На заднем плане светодиод с прикрученным резистором на 220 Ом – это мой заменитель тестера, с первой версией которого я сжег тиньку – светодиод попался бракованный, с неправильной длиной ног, в результате чего я перепутал полярность.
Окончательно собрал всю конструкцию:

Чтобы заставить ее работать, нужна еще и программа. Вооруженный Atmel Studio и ассемблером, запрограммировал несколько режимов мигания:
1. Все горят.
2. Все мигают.
3. Красный горит, группы загораются по часовой стрелке.
4. Все мигают 2 раза и меняются по часовой стрелке.
5. Красный горит, группы загораются против часовой стрелки.
Также изготовил подставку — из остатков ДСП от установки дверей и куска тонкого пенопласта.

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

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

В процессе пострадали:
— 1 микроконтроллер (сгорел от не той полярности),
— 1 микропереключатель (возможно, бракованный попался, не было плотного контакта),
— 1 гнездо microUSB (взял не тот тип, с контактами посередине гнезда, и при нескольких попытках подпаяться, контакт все-таки отвалился).

Текстолит был куплен слишком тонкий (1мм) — повело винтом после нагрева, в том числе из-за этого пришлось делать подставку.

Видео работы девайса:

Опишу примерные затраты, т.к. что-то было куплено давно:
— ATTiny24A –

70р.;
— IRLML2502TR – 4×24р = 96р;
— текстолит 5х11 —

24р.;
— светодиоды – 25х10р. = 250р.;
— кнопки – 2х10р. = 20р.;
— панелька под МК –

15р.;
— резисторы и прочее —

20р.;
— полученный опыт – бесценно.
Итого было затрачено около 550 рублей.

Проект на гитхабе (печатная плата, проект Atmel Studio).

  • avr,
  • diy,
  • новый год,
  • елка,
  • светодиоды,
  • led
  • +7
  • 21 декабря 2015, 21:22
  • positron48

Комментарии ( 22 )

Премиленько получилось… и елочка такая, всамделишная 🙂 а у меня вот пространственное мышление отсутствует напрочь, попытка представить что-то сложнее кубика вызывает лютый диссонанс…

где текстолит такой недорогой брал?)

  • DySprozin
  • 21 декабря 2015, 23:22
  • positron48
  • 22 декабря 2015, 00:13

а у меня вот пространственное мышление отсутствует напрочь

это называется образное мышление, за это отвечает правое полушарие
5% людей мыслят правым полушарием лучше левого
для меня вот написать прогу очень сложно, потому что левое не работает
так же я не запоминаю числа, имена, даты и нихера не понимаю матан

Читайте также:  Замок врезной на входную металлическую дверь

зато плюшки правого полушария перекрывают все это

  • kalobyte-ya
  • 22 декабря 2015, 20:58

за это отвечает правое полушарие

  • DySprozin
  • 22 декабря 2015, 21:30
  • kalobyte-ya
  • 23 декабря 2015, 03:01

не слишком хорошая идея. Одну руку проще натренировать и… в общем, просто оставлю это здесь

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

Просмотренные в Интернете видео с поделками на "умных" светодиодах WS2812B сразу породили множество идей их применения. В конце ноября мне наконец-то пришла долгожданная, заказанная на eBay лента из 200 диодов. Доставка бесплатна, стоимость одного диода — около шести рублей. И так как до Нового года оставался всего месяц, я решил совместить приятное с полезным — и с подключением диодов разобраться, и к празднику подготовиться.

WS2812B — трехцветный светодиод с интегрированным драйвером и схемой, реализующей протокол управления. Имеет 4 вывода, как и "обычный" RGB-диод, однако их назначение отличается: два вывода отведены под питание схемы, один вывод под вход данных, и один — под выход (диоды можно соединять последовательно). Нет необходимости придумывать сложные алгоритмы для регулировки яркости и цвета каждого диода — разработчику достаточно передать в цепочку диодов последовательность байт и выдержать необходимые временные интервалы — после чего цепочка будет гореть заданным цветом либо до подачи другой последовательности, либо до отключения питания. При этом расходуется всего один вывод МК или ПЛИС!

В даташите на диоды (прикреплен в конце статьи) подробно расписаны все характеристики, здесь же приведу наиболее важные параметры:

  • размер одного диода 5х5 мм, корпус — для поверхностного монтажа;
  • напряжение питания — 3,5. 5,3В;
  • максимальное количество диодов в одной цепочке — 1024, при частоте обновления 30 кадров в секунду. Стоит заметить, что подключить такое число диодов возможно при идеальном следовании таймингам протокола, что бывает проблематично;
  • светодиоды реализуют RGB-модель: каждый цвет кодируется одним байтом — теоретически возможно получить более 16 млн цветов. Однако на глаз разница между даже не столь близкими цветами незаметна.

Схема подключения диодов выглядит следующим образом:

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

  1. Передать 8 бит G7..G0 для установки зеленого цвета первого диода;
  2. Передать биты R7..R0 для установки красного цвета;
  3. Передать биты B7..B0 для установки синего цвета;
  4. Повторить пункты 1-3 для второго, третьего и др. диодов. То есть, после инициализации первого диода, данные начинают проходить через него на следующий диод;
  5. Установить на входе логический "0" как минимум на 50 мкс, после чего все инициализированные диоды примут заданный цвет.

Передача единиц и нулей осуществляется не непосредственно, но выдержкой определенных временных интервалов; суммарное время передачи одного бита — 1,25 мкс, настройки одного светодиода — 30 мкс. На практике требуется соблюсти лишь длительность высокого уровня, длительность низкого может выходить из пределов в большую сторону.

Далее я подробно прокомментирую программу, которая инициализирует диоды, отвечает за управление и смену эффектов. Программа написана на языке ассемблера, проект в среде ATmelStudio 6.2 прикреплен в конце статьи. Будет рассмотрена только логика загрузки и переключения эффектов; очевидные вещи, вроде инициализации стека и настройки прерываний и портов, опущены. Также подразумевается, что цепочка диодов подключена к порту PD7 контроллера, рабочая частота — 8 МГц.

Идея программы заключается в следующем. Имеется некий набор эффектов, которые поочередно требуется выводит на светодиоды. Эффект характеризуется:

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

Перед объяснением логики работы следует пояснить, для чего нужны следующие регистры и константы:

Читайте также:  Занавески для кухни с низкими потолками

Учитывая приведенные выше характеристики эффекта, он выглядит примерно следующим образом:

В первой строке находятся 4 байта характеристик:

  • два байта настройки прерывания таймера, определяющие частоты смены кадров. В данном случае частота — 15 кадров/сек;
  • байт длительности эффекта (в кадрах). Данный эффект продлится 16 секунд;
  • байт "умности" эффекта. Так как данный эффект (перелив) проще запрограммировать, байт равен единице.

Далее в массиве следуют:

  • 51 байт цветовых характеристик каждого диода (в случае покадрового описания их было бы на порядок больше);
  • маркер конца массива.

Под хранение буфера и некоторых констант в ОЗУ выделено следующее количество места:

Хочется подробнее пояснить "программируемость" эффектов. Дело в том, что в массиве должны быть перечислены интенсивности каждого цвета (от 0 до 16). В свою очередь, данные значения умножаются на значения следующий регистров (заодно приведены константы-помощники в реализации перелива):

Произведение констант из массива и соответствующих регистров формируют таблицу цветов (ColorsTable) для каждого из диодов. В случае, если эффект программируется, значения регистров R,G,B можно динамически менять. Описание всех кадров такого эффекта нецелесообразно (требует слишком много памяти контроллера).

В случае, если эффект не программируемый, все кадры перечислены в массиве, а интенсивности вместо значений регистров умножаются на 15.

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

То есть, данная функция преобразует один байт в четыре, которые будут загружаться в диоды.

Откуда взялась волшебная константа 0х88? Нужная длительность низких и высоких уровней формируется путем выдерживания определенного значения на выходе порта. Команды lsl — nop — out выполняются за три такта, то есть за 375 нс, что укладывается в допустимую погрешность. Таким образом, передача нуля сводится к загрузке последовательности 1000, а единицы — 1100. То есть, в одном байте передаются два бита, а в двенадцати байтах — настройки одного диода (24 бита = 3 байта G,R,B), что сразу делает понятной данную строку:

.equ BUFFER_SIZE = LED_COUNT*12+1 ;размер буфера (будет пояснено позднее)

Именно поэтому в начале байт равен 0x88, функция ColorToBytes попросту выставляет единицы на позициях 6 и 2, если это необходимо, и загружает байт в выходной буфер.

В упомянутом выше прерывании таймера реализовано следующее:

  • загрузка следующего кадра эффекта;
  • если же эффект дошел "до конца", то следующим кадром будет являться начало эффекта;
  • если эффект отыграл установленное время, следующим кадром будет начало следующего эффекта;
  • если эффект "умный", будут изменены значения интенсивностей в регистрах.

Общий алгоритм работы представлен следующей блок-схемой:

Также в конце статьи прикреплен шаблон проекта, незначительная правка которого позволит очень быстро работать с WS2812B.

Осталось продемонстрировать готовое устройство на "умных" светодиодах — новогоднюю елку. Схема елки достаточно проста и приведена ниже:

Основной компонент схемы — микроконтроллер ATmega8A в TQFP-корпусе. Также я оставил две кнопки для будущей доработки елки. Остальные компоненты почти полностью представлены резисторами и конденсаторами типоразмера 0805. Питается елка от 5 Вольт через разъем micro-USB, что позволяет разместить елку где угодно при подключении к внешнему ЗУ типа PowerBank. Файл с ПП елки находится в архиве (плата двусторонняя).

Фото вырезанной на ЧПУ-станке платы (одна сторона):

Впервые в жизни попробовал вырезать плату из тонкого (0.3мм) текстолита, так как планировал закрепить елку на листе бумаги формата А3. Для больших плат механическая прочность такого текстолита низка; советую брать текстолит от 1 мм толщиной. На фото даже видно просвечивающие дорожки другой стороны!

Пайка и прошивка схемы трудностей вызвать не должны, все необходимые файлы прикреплены в конце статьи. Фото елки в работе (эффект северного сияния, фрагменты гирлянд):

Далее осталось закрепить (или не закреплять) елку на какой-либо поверхности либо опоре, задекорировать мишурой. В общем, здесь простор для творчества еще больше.

Небольшое видео работы (пример эффекта перелива):

В конце статьи прикреплен архив, где находятся:

  • исходный проект новогодней елки в AtmelStudio 6.2;
  • шаблон проекта в этой же среде;
  • файл печатной платы елки;
  • файл схемы елки;
  • прошивка елки;
  • FUSE-биты контроллера;
  • схема подключения диодов;
  • даташит на WS2812B.

Теперь у Вас есть почти 9 месяцев, чтобы подготовиться к следующему Новому году! А также поделиться предложениями, идеями и замечаниями в комментариях и на форуме.

  • Цена: $5.03 за комплект
  • Перейти в магазин
Читайте также:  Домофон в частный дом цена

До Нового Года осталось совсем чуть-чуть, поэтому обзор в тему. Данный комплект приобретался специально для новогодней ёлки.

Раньше на ёлке висела защищённая лента RGB 5050, купленная 3 года назад в оффлайне за приличные деньги, но она оказалась некачественной и сейчас светит вот так…

Использовать защищённую ленту на комнатной ёлке не имеет смысла — украшения из металла давно на делают и замыкания исключены.

Для обычной декоративной подсветки новая лента не подходит, т.к. цветные светодиоды 3528 пространственно разнесены и получить белый цвет не выйдет.

Всё запаковано в общий антистатический пакет

Содержимое

На пакете наклейка магазина Hello Fish
Бобина ленты

Инфракрасный контроллер и пульт к нему самые простейшие из возможных, батарейки CR2025 в комплекте не было

Общая длина ленты реально 498см, ширина 8мм
После размотки с катушки, половина ленты смята гармошкой. Мне это не критично, но кто будет её клеить — будет сильно огорчён.

Лента оказалась довольно странная — спаяна из кусочков по 30LED (0,5м).

Но и это ещё не всё — сегменты тоже разные, по 6LED (10см) и 9LED (15см), которые чередуются 6-9-6-9… Истиная причина, по которой надо было так делать, мне неизвестна, предполагаю, чтобы кратность резки была 10-15-25…
На всякий случай набросал эту странную схему

Запитал ленту сетевым адаптером 12В 2А
Продавец заявил 2,88Вт/м, но реально отрезанный 1 метр ленты потребляет 4,6Вт, видимо перестраховался для исключения претензий.

Отрезки спаяны между собой плохо и пока проводил тесты, контакт пропадал в разных местах. Пришлось заново пропаивать все соединения отрезков и проблема ушла. Все 300 светодиодов оказались работающими.

С обоих концов ленты припаяны разъёмы для подключения к контроллеру, однако в комплекте тройника нет.
С одной стороны все 5 метров запитывать нельзя, т.к. на свободном конце яркость свечения будет значительно меньше, чем в начале подключения.

Немного теории
Есть несколько способов подключения длинных светодиодных лент, имеющие свои особенности:

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

1. Классический — подключение с обоих концов.
Достоинство — не надо паять, т.к. разъёмы уже припаяны, простое подключение в кольцо.
Недостаток — при линейном использовании приходится тянуть 4 длинных провода до конца ленты, баланс цвета немного нарушен в центре ленты.

2. Серединный
Достоинство — минимальная длина проводов подключения
Недостаток — провода надо припаивать к середине ленты, баланс цвета немного нарушен по краям ленты.

3. Диагональный
Достоинство — до конца ленты идёт всего один провод.
Недостаток — требуется повышенное напряжение с БП для компенсации падения напряжения на ленте, баланс цвета немного нарушен.

4. Комбинированный (1 + 2)
Достоинство — малое падение напряжения и соответственно отсутствие заметного нарушения баланса цвета.
Недостаток — сложное подключение.

Чтобы наглядно показать, подключил, измерил и сфотал подключение ленты с одной стороны.
Общая потребляемая мощность всей ленты получилась 12,04В х 0,982А = 11,8Вт
В начале ленты измерил ток на каждом светодиоде (по падению напряжения на токоограничивающем резисторе).
R (12,04В) — 19,4мА
G (12,04В) — 16,6мА
B (12,04В) — 17,8мА
В конце ленты всё очень печально
R — 7,8мА
G — 1,8мА
B — 2,2мА
Ток синего и зелёного светодиодов в конце ленты снижен от исходного в 8-9 раз!
Фотографии на разных выдержках показывают это безобразие.

На небольшую 170см ёлку 5 метров ленты оказалось вполне достаточно, подключил по самому оптимальному (в данном случае) серединному способу.

Общая потребляемая мощность всей ленты получилась 11,90В х 1,42А = 16,9Вт
Ток светодиодов около подключения (в середине)
R (11,90В) — 19,1мА
G (11,90В) — 16,0мА
B (11,90В) — 17,2мА
В конце ленты
R — 9,0мА
G — 8,4мА
B — 9,3мА
Ток снижается на концах ленты до 2 раз, но падение яркости в глаза сильно не бросается — результат всех устроил.


Частота работы ШИМ модуляции контроллера 225Гц
После отключения питания, состояние работы запоминает

Что в итоге получилось (снималось в полной темноте)
На ёлке висит ещё одна простая лампочная гирлянда — не стал её отключать ибо не мешает.

Рекомендовать к покупке не могу, если нет желания её доделывать паяльником.

В заключение — Поздравляю всех с наступающим Новым Годом 🙂

Комментировать
55 просмотров
Комментариев нет, будьте первым кто его оставит

Это интересно
Adblock detector