Здравствуйте, товарищи Самоделкины!
Приближается Новый год, и по уже сложившейся традиции я снова своими руками ваяю домой праздничные украшения.
В прошлом году я делился с вами проектом ёлочной звезды на адресных светодиодах. Ещё тогда я говорил о том, что неплохой идеей было бы добавить туда светомузыку. И вот, спустя год, руки наконец-то дошли.
Как вы можете помнить, вся система состоит из двух компонентов – непосредственно самой звезды, и блока управления, внутри которого микроконтроллер управляет миганием светодиодов. Вот этот самый блок и было нужно доработать. Но я решил не допиливать старый, а сделать с нуля новый. Во-первых, зная мою криворукость, не хотелось случайно что-то испортить. Во-вторых, ещё в процессе написания кода стало ясно, что 8 КБ флеш-памяти 85-й Тиньки не хватает для реализации всех идей (а как выяснилось в процессе написания кода, для полноценной светомузыки этого объёма памяти в принципе не хватит, даже если отказаться от всех остальных режимов мигания).
Поэтому было принято решение сделать новый блок на гораздо более мощном (в сравнении с ATtiny85) МК ATmega328P.
Итак, для начала список компонентов. Непосредственно для самой звезды:
- Светодиоды WS2812B
- Конденсаторы на 0.1 мкФ по количеству светодиодов
- Стеклотекстолит
- Конденсатор 1000 мкФ
- Резистор на 200-500 Ом
Для блока управления – тут уже есть некая «разбежка». Я решил делать проект не на плате Arduino, а на голом МК, то есть самому травить плату, паять обвязку и вот это вот всё. Почему так? Ну, во-первых, у меня завалялся микроконтроллер, и я решил наконец-то пустить его в дело. Во-вторых – это просто интереснее и… Ламповее, что ли? Не брать готовые модули, а сделать всё самому, с нуля, и даже когда вся схема находится внутри корпуса и её никто не видит, ты всё равно знаешь, что она целиком и полностью сделана своими руками – по-моему, это офигенное чувство.
Ну ладно, отвлеклись. В общем, дальше приведу два списка деталей, для обоих вариантов исполнения (кое-где компоненты будут повторяться). На Arduino:
- Плата Arduino Nano
- Разъём Mini-Jack 3.5 мм
- 2 потенциометра на 50 кОм
- тактовая кнопка
- диод – с как можно меньшим падением напряжения, в идеале вообще взять диод Шоттки
- конденсатор 470 мкФ 6.7 В и выше
- провода по высоте ёлки
- Разъём для питания от 5 вольт
На голом МК:
- Микроконтроллер ATmega328P в SMD-корпусе (обратите внимание, чтобы он был именно с индексом P на конце – распространённые нынче PB имеют другую распиновку, и плата на них не рассчитана)
- Разъём Mini-Jack 3.5 мм
- 2 конденсатора 0.1 мкФ типоразмера 0402
- конденсатор 0.01 мкФ типоразмера 0603
- резистор 10 кОм типоразмера 0402
- кварцевый резонатор 16 МГц со встроенными конденсаторами (я брал модель CSTCE16M0V53-R0)
- диод – то же самое, чем меньше падение напряжения, тем лучше. Я взял ll4148, но в идеале заменить его на более подходящий вариант
- конденсатор 470 мкФ 6.7 В и выше
- 2 потенциометра на 50 кОм
- тактовая кнопка
- штырьковый разъём 2.54 мм 2х3
- провода по высоте ёлки
- Разъём для питания от 5 вольт
Типоразмеры элементов я указал непосредственно для своей платы, в целом вам ничего не мешает её переделать – файл lay6 я оставлю в конце статьи, как и код прошивки.
Ну и инструменты – паяльник и/или паяльный фен, программатор USBasp, шуруповёрт и свёрла, чтобы сделать отверстия под компоненты в корпусе.
Итак, приступим к сборке.
Вначале пару слов о плате БУ – как вы можете видеть, на ней есть некоторая обвязка для МК, а именно: внешний источник тактирования, конденсатор на 0.1 мкФ по питанию для сглаживания микропульсаций, подтягивающий резистор на 10 кОм от пина RST, чтобы контроллер случайно не перезагрузился от какой-нибудь прилетевшей наводки, конденсатор на пине AREF, конденсатор на 470мкФ и диод.
На двух крайних элементах остановимся чуть подробнее. Для чего они вообще нужны? Дело в том, что светодиодная лента – это довольно мощная нагрузка, и как следствие для неё нужен довольно мощный источник питания. А что будет, если мы подключим к плате программатор, забыв перед этим воткнуть туда внешний мощный источник питания? Правильно, питание пойдёт от USB-порта, через программатор, и очень маловероятно, что это приведёт к чему-то хорошему. При полностью включённой ленте программатор можно просто спалить, а если лента достаточно длинная, то и порт компьютера вам спасибо не скажет. Поэтому во избежание подобных ситуаций перед мощной нагрузкой в схеме ставится диод, чтобы питание на неё шло только от внешнего БП. Однако тут мы сталкиваемся с другой проблемкой – напряжение на диоде просаживается, и МК получает не положенные 5 вольт, а чуть меньше. Как правило, это не критично, ведь ATmega может работать и от гораздо более низкого напряжения, но лента вызывает помехи по питанию, от чего МК может начать чуть подглючивать (я с этой проблемой столкнулся, когда отключил программатор от USB-порта – питание на МК пошло не напрямую, а через диод, и звезда тут же начала вести себя неадекватно, но как только я замкнул контакты диода проводами, всё тут же прекратилось). Поэтому рядом с диодом был добавлен конденсатор, для сглаживания этих самых помех, ну и диод лучше брать с как можно меньшей просадкой по напряжению.
Ладно, ликбез провели, возвращаемся к нашей звёздочке.
Для самой звезды у меня тоже есть два варианта трассировки, и написанная мной программа рассчитана именно под второй вариант, где больше диодов. Почему он выглядит именно так – можно узнать, прочитав предыдущую статью ;)
Вырезаем полученные заготовки.
Для тех, кто делает блок управления на Arduino, накидал схемку, что и куда паять.
После этого соединяем звезду и блок управления проводами, и помещаем всё в корпуса – звезду в звезду, блок управления в блок управления.
Далее прошивка. На Arduino всё просто – открываем код, загружаем. На голом МК всё чуточку интереснее.
Во-первых, необходимо установить в вашу среду разработки ядро для работы с ATmega328P. В Arduino IDE открываем Файл -> Настройки -> Дополнительные ссылки для Менеджер плат и вписываем туда строку «https://mcudude.github.io/MiniCore/package_MCUdude_MiniCore_index.json»
Далее заходим в Инструменты -> Плата -> Менеджер плат и вписываем в поиск «MiniCore». Устанавливаем и перезапускаем IDE.
Теперь мы можем работать с микроконтроллерами линейки ATmega. Выбираем в менеджере плат ATmega328, в дополнительных настройках ставим 328P/328PA, тактирования «External 16 MHz», остальное оставляем по умолчанию.
Всё, теперь можно прошивать. Нажимаем Записать загрузчик и Загрузить через программатор. Всё готово)
После этого остаётся только подключить схему к компьютеру через Mini-Jack и настроить передачу звука – по умолчанию при подключении любого устройства для приёма звука трансляция на динамики прекращается. В Windows это обходится следующим образом.
Открываем Панель управления -> Звук. Нажимаем правой кнопкой мыши по иконке динамиков и ставим галочку «Использовать по умолчанию». 
Далее переходим во вкладку Запись. Выбираем устройство Stereo Mix и нажатием правой кнопки мыши выбираем «Включить» и «Использовать по умолчанию». 
После чего переходим в его свойства и во вкладке Прослушать ставим галочку возле пункта «Прослушать с данного устройства», после чего в выпадающем меню ниже выбираем устройство, на которое будет транслироваться звук (я поставил наушники).
Если вы всё сделали правильно, то теперь звезда должна начать реагировать на звуки с комьютера. Только не забудьте вернуть настройки обратно, если вдруг захотите подключить вместо звезды наушники)
Управление осуществляется следующим образом – одиночное нажатие отвечает за переключение режимов мигания (весь функционал предыдущей версии сохранён), двойное включает и выключает зацикливание (по умолчанию режимы сменяют друг друга раз в 30 секунд), а тройное переключает звезду на музыкальные функции. Музыкальных функций тоже несколько – первая, самая спокойная, когда диоды мерцают в такт музыке. Вторая представляет собой частотный анализатор – каждый луч вспыхивает в зависимости от интенсивности тех или иных частот аудио-спектра. И третий можно описать как «бегущие волны» - от центра и по лучам разбегаются волны, цвет которых также зависит от частоты звука.
[media=https://youtu.be/OT4R8hv8Fgo]
Обратите внимание, что перед запуском музыкальных функций необходимо выключить все поступающие с компьютера или телефона звуки – это нужно для автоматической калибровки, чтобы избежать ненужных шумов. Повторную калибровку можно произвести двойным нажатием кнопки.
Регулировка светомузыки осуществляется двумя потенциометрами – первым настраивается чувствительность эффектов к звуку, а второй используется только для настройки третьего эффекта, чтобы указать скорость распространения "волн". Также было добавлено сохранение текущего режима в EEPROM-память, и теперь после отключения питания не надо выщёлкивать нужное мигание среди всех прочих)
Кроме того есть «секретный режим», который включается длительным удержанием кнопки управления, как из обычных, так и из музыкальных функций)
[media=https://youtu.be/gzR_5HmQGKg]
https://youtu.be/gzR_5HmQGKg?si=FgxFQZmB4DtuMaW7
В целом, проект, как и любой проект, сделанный на микроконтроллере, можно дорабатывать, и при этом даже необязательно менять компонентную базу. К примеру, можно добавить новых режимов мигания или светомузыки, или доработать уже существующие для работы со стерео (сейчас в программе используются только данные с правого аудио-канала, но на плате к МК они подключены оба). Или можно заменить аудио-разъём на микрофон, чтобы не мучиться с проводами. К слову, изначально и задумывалось использовать микрофонный модуль MAX9814, однако в процессе я отказался от этой идеи. Словом, придумать можно уйму всего! Но я скорее всего оставлю этот проект таким, каким он получился сейчас. Если, конечно, вы не подкинете каких-нибудь особенно интересных идей)
Ну и на этом у меня всё) С праздниками всех, счастья и успехов в Новом году!







