Всем привет, на музыкальной волне (неделя баянов) решил поделиться своим проектом, который тоже косвенно связан с музыкой.
Я сделал подсветку + светомузыку, которая позволяет визуализировать звуковой сигнал, воспроизводимый в реальном времени на компуктере при помощи адресной светодиодной ленты. Подсветка выглядит примерно так:
Проект я начал чуть больше года назад, уделяя ему пару часов на выходных. Я хотел написать приложение для Windows, чтобы подсветкой можно было управлять прямо с компьютера. Так же я хотел, по возможности, избавиться от всех транзисторов и резисторов, чтобы проект не пугал тех, кто не связан с электроникой и его с легкостью смог повторить каждый желающий. Кстати говоря, повторить это дело можно даже не имея паяльника.
Я начал программировать приложение и со временем список моих потребностей только расширялся и задумка из чего-то небольшого, что я хотел закончить за пару-тройку выходных переросла в что-то масштабное, на что у меня ушло прилично времени и сил.
Для тех, кто не хочет читать, а хочет смотреть видео, пожалуйста:
https://youtu.be/1yg67rjU6FI
Кстати, в этом видео я разыгрываю Arduino + светодиодную ленту для повторения проекта
А мы продолжим...
Я использовал ленту WS2812b, которую можно без проблем найти на алиэкспресс по цене примерно 150 руб/метр. Выглядит она как-то так:
И тут возникла проблема: мы не можем напрямую с компьютера передавать данные на ленту через USB разъем + хотелось какой-то независимости от самого ПК, чтобы подсветка включалась ещё до входа в систему. Поэтому мне пришлось использовать промежуточное звено. Выбор пал на макетную плату Arduino (выбрал её только из-за того, что она на слуху, её легко найти, она дешевая и повторить проект на ней сможет любой желающий. А так, конечно, есть контроллеры которые подходят для этих целей в разы лучше).
При помощи драйвера мы можем без проблем обмениваться данными между ПК и Ардуино, а последняя, в свою очередь, без проблем может управлять светодиодной лентой.
Сперва я сделал всего 3 режима: мы могли выбрать статичный цвет для ленты, могли поморгать ей и могли пробежаться по всем цветам радуги, плавно сменяя их.
Интерфейс выглядел вот так:
Простенько, но эффективно.
Потом мне пришла идея добавить ещё с десяток разных режимов и этот интерфейс мне показался неудобным, т.к. режимы поочередно сменяли друг друга по нажатию на кнопку.
Я решил переработать дизайн приложения и получилось примерно вот так:
Я добавил колесо режимов слева, добавил некоторые опции (например, подсветка могла включаться и выключаться вместе с запуском Windows, возможность сохранять пресеты настроек и т.д.), но потом и этого интерфейса оказалось недостаточно. Чтобы долистать до нужного режима, приходилось много крутить колесиком мыши, режимы сливались один с другим и это было неудобно. Я снова решил переработать интерфейс, но оставил общую концепцию, т.к. она мне сильно нравилась. В конечном счете получилось вот так:
Все режимы я разбил на 7 основных и несколько подрежимов, которые теперь стало удобно выбирать на "колесе режимов" посередине.
И теперь началось самое интересное: я написал алгоритм светомузыки, который позволял находить в песнях ритмические рисунки разных инструментов и визуализировать тот, который мы выберем. Эта функция работает не идеально до сих пор, иногда алгоритм ошибается, но вокал, гитарную партию и барабаны может выделить без проблем.
Я накидал 5 режимов светомузыки (можно ознакомиться в видео, ссылка на которое в начале поста, словами объяснить это сложно, но я попытаюсь): подсветка может мигать в такт биениям основного ритма, может визуализировать сразу несколько ритмических рисунков, есть интересный режим радуги, режим горения пламени, интенсивность которого меняется в зависимости от того, какие звуки воспроизводятся и режим мигающей гирлянды.
Помимо светомузыки я сделал алгоритм, который сам генерирует подсветку в зависимости от того, что изображено на рабочем столе в данный момент. Некое подобие Ambilight, но немного для других целей.
А теперь, как всё это подключить:
Нам потребуется Arduino любой версии и светодиодная лента WS2812b, подключаем всё по схеме:
Запитываем ленту от 5 вольт, а канал Din подключаем в 7 цифровой пин на Ардуино
Экспериментально я выяснил, что ленты в 30 пикселей более чем достаточно, чтобы сделать подсветку рабочего стола. А питания от USB версии 2.0 и 3.0 достаточно, чтобы запитать эти 30 светодиодов и при этом не спалить контроллер Ардуино.
Далее последовало решение, которое может многим показаться "ну таким себе": я решил отказаться от внешнего блока питания, т.к. предполагалось использовать подсветку только рядом с ПК. Да и управлять ей мы можем только через приложение, поэтому ставить её в другие места нецелесообразно. Таким образом, схема подключения стала немного проще, но взамен мы получили ограничение в 30 пикселей на ленту. Кстати говоря, USB никогда не выдаст больше 900 мА тока, даже если мы закоротим контакты питания (если это версия 3.0), поэтому беспокоиться о выходе из строя чего-либо не придется.
А дальше всё, что нужно сделать: скачать приложение по ссылке на гитхабе, установить его на ПК, следуя установки
После сделуем инструкции:
1) Запускаем приложение
2) Нажимаем на шестеренку в правом верхнем углу
3) Переходим во вкладку "подключение"
4) Выбираем USB-порт, куда подключена Ардуино
5) Нажимаем "Обновить модуль" и выбираем свою версию ардуино
Прошивка автоматически загрузится в контроллер, не понадобится никаких IDE, всё работает через приложение. Готово!
Но я всё-таки рекомендую посмотреть видео на ютубе , там я более подробно и наглядно всё объясняю. Плюс там есть демонстрация того, как это выглядит в самом начале.
Я не очень умею писать длинные посты, поэтому, надеюсь, вы не закидаете меня тапками. Всем спасибо за потраченное время!
Ах да, у меня уже был похожий пост, но там в приложении не было светомузыки, не было многих режимов и возможностей, поэтому считаю это не совсем повтором и баяном, надеюсь на ваше понимание.
Напоследок демонстрация светомузыки в комментариях (сюда не получилось добавить)