Всем привет!
Скоро новый год и нужно как то оригинально украсить свою комнату к празднику. Для этого идеально подходит цветомузыка, в основе которой Ардуино и светодиодная лента ws2812b.
Цветомузыку я собрал еще в прошлом году, на сборку ушло примерно за 3 часа и много времени потратил на разбор и модификацию кода, а так же на поездку в магазин за алюминиевым профилем и кнопками.
Особенность этой цветомузыки в том, что ее не нужно подключать к источнику аудио сигнала, так как она получает аудио данные, благодаря встроенному в нее модулю микрофона MAX9812. Он подключен через усилитель напряжения к АЦП ардуины. Усилитель собран на транзисторе КТ3102, у которого есть много зарубежных аналогов.
Для выбора режимов на цветомузыке имеются две кнопки, color и pattern. Кнопка color переключает цветовые схемы, их всего 3, а кнопка patern переключает динамические режимы цветомузыки, их всего 8.
Для настройки чувствительности и яркости установлен потенциометр param, это переменный резистор с изменяемым сопротивлением от 0 до 10 кОм. Он так же подключен к АЦП и в зависимости от его положения происходит программная обработка параметров. Можно модифицировать код и установить вместо потенциометра энкодер, но это уже будет реализовано в другом проекте.
В настройках так же можно выбирать используемое в ленте количество светодиодов 60, 120 или 180 и регулировать частотный фильтр, настроенный на 8 частотных диапазонов, для этого применяется программный фильтр частот на базе алгоритма быстрого преобразования Фурье.
Светодиодная лента основана на полноцветных, управляемых адресных светодиодах ws2812b. Плотность ленты я выбрал 60 светодиодов на 1 метр. На мой взгляд это оптимальное соотношение для многих задач. К питанию светодиодной ленты нужно отнестись серьезно, так как на максимуме она потребляет до 3,6 А на 1 метр. Конечно вероятность такого сценария что цветомузыка включит все светодиоды белым цветом и еще на полную мощность, равна нулю. Но тем не менее лучше сразу приобрести хороший блок питания. Как минимум на 5 Вольт и 5 Ампер.
Схема цветомузыки.
По схеме комментировать особо нечего. Нужно только настроить среднюю точку усилителя на транзисторе КТ3102. Настройка сводится к подбору резистора смещения 200 кОм или резистора нагрузки 1 кОм, нужно добиться половины напряжения питания на коллекторе транзистора или входе A0. Транзистор можно заменить любым n-p-n аналогом.
Потенциометр лучше использовать линейный с сопротивлением от 10 до 50 кОм.
Если Вы в своем проекте будете использовать контроллер Arduino pro mini, то сразу припаяйте керамический конденсатор 0,1 мкФ на 20-й вывод (ARef) микроконтроллера ATmega328. При использовании Arduino Nano припаивать конденсатор не придется, он уже распаян на этой плате.
Основные комплектующие
Arduino Pro mini
Светодиодная лента на WS2812B
Микрофон с усилителем
Потенциометр 20 кОм
Адаптер питания 5 В, 5 А
Скетч для Ардуино
Я использовал в своем проекте, код цветомузыки Lumazoid с небольшими модификациями. Оригинальный скетч можно скачать с гитхаба.
Еще нужно добавить в папку libraries, используемые в проекте дополнительные библиотеки NeoPixel.h и ffft.h
Если Вы в скетче не прописали параметры своей светодиодной ленты, то их можно изменить. Для этого нажмите кнопку pattern, не отпуская ее включите питание. Вращая потенциометр нужно выбрать плотность используемой светодиодной ленты, по светящимся красным светодиодам: первый — 60, второй — 120 или третий — 180 светодиодов. Для сохранения параметров в EEPROM еще раз нажмите кнопку pattern.
Для регулировки яркости нужно нажать и удерживать кнопку color, после чего включаем питание. По умолчанию в скетче прописано 8 светодиодов которые будут светиться основными цветами. Ручкой потенциометра param можно изменить их яркость. Для сохранения параметров в EEPROM нажмите еще раз кнопку color.
Цветовую схему лучше выбрать 3-ю, так как она наиболее красочная. В этом режиме каждому цвету соответствует свой частотный диапазон. Всего 8 частотных диапазонов, перечисляю их цвета от самого низкого до самого высокого: красный, оранжевый, желтый, зеленый, голубой, синий, фиолетовый, белый.
Если удерживать кнопки color, pattern и вращать потенциометр param, то можно ограничивать частотный диапазон убирая высокие — средние и так далее до самых низких частот(красный светодиод). Например если Вам нужно что бы цветомузыка реагировала только на низкие звуки, то достаточно оставить только низкий диапазон частот.
Видео демонстрирующее возможности цветомузыки.
Сразу прошу извинить меня за качество ролика, снимал дешевым смартфоном.
P.S.
До НГ хочу упростить схему подключения микрофона, буду использовать max9814, без дополнительной обвязки. Наличие АРУ в MAX9814 даст возможность цветомузыке работать без перегрузок при разных уровнях громкости звука.
Надеюсь я ничего не упустил. Если у Вас возникнут вопросы, я с удовольствием на них отвечу.
Комментарии (17)
Aquahawk
23.12.2019 01:44я уже второй год под новый год пишу алгоритмы гирлянд. На лентах на ws2812b. Забавно что красивый алгоритм написать не так то просто.
raamid
23.12.2019 02:26Давно лента такая лежит, вот только сейчас руки дошли. Собрал на Orange Pi + ws2812b и возник вопрос: многие рекомендуют использовать сопротивление порядка 200-500 Ом в управляющей цепи, мол так ничего не сгорит. А у меня с сопротивлением просто не работает, а без сопротивления работает. Не подскажете, насколько действительно необходимо такое сопротивление, если у меня в ленте всего 30 светодиодов.
Aquahawk
23.12.2019 06:15фиг знает, в прошлом году была WS2811, 12 вольт, там не ставил резистор. В этом году сделал на ws2812b, прочитал у Гайвера про 100 Ом резисторир, впаял, сразу заработало.
CyberBot Автор
23.12.2019 08:05Нет необходимости в сопротивлении, так как входное сопротивление светодиода достаточно высокое. Количество светодиодов в ленте ни как не влияет на входное сопротивление.
Aquahawk
23.12.2019 08:14Никакого отношения входное сопротивление светодиода не имеет к входному сопротивлению управляющего контроллера. Речь о сопротивлении на сигнальной ноге.
SlavikMIPT
23.12.2019 09:07ну вообще говоря — не совсем. У диодов сопротивление (dU/dI) зависит от тока — чем больше ток тем сопротивление меньше, а падение напряжения которое этот ток заставляет через диод течь — почти постоянное и определяется шириной запрещенной зоны — для красного это ~2В, для синего ~3В. Но постоянное оно из за экспоненциальной зависимости тока от напряжения — достаточно небольших изменений напряжения чтобы существенно изменить ток. Если к диоду напрямую подключить источник на 5В при нормальных 3В — ток улетит в бесконечность из за экспоненциальной зависимости тока от напряжения и диод сгорит. Если же подключить резистор последовательно — «лишнее» напряжение упадет на нем, а т.к. у него зависимость тока от напряжения линейная, а пропускная способность определяется самым медленным звеном — мы таким образом не даем току скакать экспоненциально.
У ws2812b встроенный контроллер ШИМ который ограничивает средний ток через каждый диод — быстро открывая и закрывая транзисторы через которые напряжение 5В с VDD попадает на диоды.
Здесь ключевой момент какой — мы можем считать постоянным напряжение, которое вообще говоря переменное — только на временных отрезках много больших периода ШИМ.
Если, например, по питанию будет скачок напряжения кратковременный — он вызовет скачок тока через диод пока транзистор открыт — контроллер не успеет отреагировать и увеличить скважность и диод может успеть сгореть.
У меня так LED экран на этих диодах сгорел для rpi на белом цвете, причем работал нормально на этой яркости в среднем, но в один день звезды сошлись и все сгорело.
Подытожу простыню: если источник тока слабый, например usb2.0 какой нить и просто не сможет выдать при скачке напряжения большой ток — резистор последовательно можно не ставить — по сути его функцию выполняет источник питания слабый.
Если же источник тока мощный — например какой нибудь литиевый аккумулятор который через DC/DC повышающий на 5В может выдать ток какой «попросит» схема — стоит озаботиться последовательными резисторами порядка 5-10Ом (подбирается экспериментально) — яркость не так уж сильно снизится, но зато обезопасите от внезапного сгорания диодов (они к слову недешевые)Aquahawk
23.12.2019 09:22Хм, всё что вы написали понятно. Но что Алекс Гайвер пишет у себя, что комметатор выше говорят о диоде не на линии питания, а на управляющем пине, чтобы не спалить пин управляющего контроллера.
SlavikMIPT
23.12.2019 10:39это по сути схожая защита — от статики, на входе затвор полевого транзистора изолированный, который имеет некоторую емкость — порядка 5пф, емкость это C = q/U — коэффициент пропорциональности между зарядом переданным конденсатору и напряжением которое этот заряд создает. U = q/C — емкость маленькая и она в знаменателе, то есть чтобы на затворе появилось напряжение существенное — не нужен большой заряд. Если вы например в затвор ткнете пальцем — заряд который был на теле частично перетечет на затвор — до тех пор пока не выровняется с зарядом оставшимся на теле. Мы на теле можем существенный заряд носить и с учетом маленькой емкости затвора — на нем может возникнуть очень высокое напряжение и пробить диэлектрик транзистора — тем самым выведя его из строя.
Если затвор подключен через резистор — он ограничивает скорость с которой заряжается затвор(ток) не позволяя передать на затвор мгновенно большой заряд, кроме того — если частота управляющего сигнала позволяет — можно на затвор повесить небольшую дополнительную емкость которая снизит напряжение возникающее на затворе при том же самом заряде. То есть тут скорее защищают вход, а не выход. Выходы тоже защищают резисторами ограничительными, но в других ситуациях — когда сопротивление нагрузки подключаемой может оказаться очень малым(коротнуть например).
P.S.
Я в 2к13м ликбез на эти темы писал — может инетерсно будет habr.com/ru/post/156977CyberBot Автор
23.12.2019 11:47-11-Затворы защищать нужно когда транзистор не припаян в схему
2-Кто сказал что на входе микросхемы установлен полевой транзистор?
3-Резистор нужен для защиты выхода контроллера, на случай КЗ или если ток превысит 40мАSlavikMIPT
23.12.2019 12:151. А что — если диод припаян в схему то вход его транзистора каким то магическим образом теряет способность заряд при соприкосновении с более заряженным телом принимать?
2. Производитель — Vdd Vss — voltage source-source/drain-drain — это КМОП логика, Vcc/Vee — collector/emitter — TTL, ну и это по моему очевидно вообще
3. В том числе, я об этом упомянал, но уверяю Вас — это не единственное назначение резисторов — они еще и по номиналу отличаются)
virtualsys
23.12.2019 08:40Ленты лучше использовать на 12 В, если длина нужна большая. WS2815 ( дороже, но при выбивании одного элемента будет работать) или WS2811. Если хочется красоты, но нет времени и сил на собственную разработку (или хочется оценить предел китайского совершенства), на али есть контроллер за 12 долларов SP107E с управляющим софтом по блютусу на смарте. Там и сто вариантов бегущих огней+ эффекты от звука( даже микрофон встроенный). Для себя все вопросы с гирляндами решил на новый год, ни одна из магазина близко не лежит с пиксельными лентами.
Хотелось и самому что-то сделать, но понимаю, что за китайцами угнаться будет сложно с их ценой.
cyberly
23.12.2019 09:32«Цветомузыка» как радиолюбительский проект, похоже, бессмертна :) Мне отец рассказывал, как их делали в пору его молодости, я в свое время (лет 20 назад) пытался…
Mike_soft
23.12.2019 12:02лет 40 назад «лучшим подарком [начинающему] радиолюбителю» был набор из трех КУ202М и четырех Д246… Дефицит-с.
Misery
MSG7EQ