Невероятно эффектная цветомузыка на Arduino и светодиодах

22.05.2019  colorMusic_v2.10: • Исправлен глюк с большим количеством светодиодов на МЕГЕ

СТАРЫЕ ВЕРСИИ

15.03.2018, colorMusic_v1.1:

  • Добавлена плавность режиму цветомузыки по частотам! Настройка SMOOTH_STEP
  • Добавлен режим стробоскопа с целой кучей настроек!

16.03.2018 colorMusic_v2.0:

  • Добавлено управление с ИК пульта! Купить пульт можно по этой ссылке, цена вопроса 50р
  • 7 режим – Режим подсветки
  • 8 режим – Режим бегущих частот
  • 9 режим – Анализатор спектра (Версия 2.1)
  • У некоторых режимов появились подрежимы
  • Возможна работа БЕЗ потенциометра. Читайте ниже в инструкции по эксплуатации

18.03.2018 colorMusic_v2.2:

  • Настройки сохраняются в память (энергонезависимую)

19.03.2018 colorMusic_v2.3:

  • Улучшена производительность, почищен мусор
  • в 7 режиме радугу можно остановить и пустить вспять

08.05.2018 colorMusic_v2.4:

  • Добавлена настройка RESET_SETTINGS для сброса настроек в случае некорректной работы. Читайте ниже в FAQ

11.05.2018 ночь colorMusic_v2.5:

  • Код оптимизирован,  библиотеки FastLED и IRremote заменены на более оптимальные Adafruit_NeoPixel и IRLremote (для работы версии 2.5 и выше необходимо установить новые библиотеки из общей папки с библиотеками!)
  • ИК пульт теперь срабатывает почти в 100% случаев вместо прежних 30%
  • Поддержка максимум 410 светодиодов

11.05.2018 день colorMusic_v2.6:

  • Возвращена библиотека FastLED (как оказалось, функции FastLED работают гораздо быстрее, чем NeoPixel, а также поддерживает такое же количество светодиодов!)
  • ИК пульт всё ещё срабатывает почти в 100%, по сравнению с 30% в версиях 2.0-2.4
  • Поддержка максимум 410 светодиодов (работа может быть нестабильной)

20.05.2018 colorMusic_v2.6.1:

  • Исправлен небольшой баг

22.06.18 colorMusic_v2.6.2

  • Добавлено сохранение состояния “включено/выключено” в энергонезависимую память. Штука опциональная, в настройках можно выключить (настройка KEEP_STATE)

28.09.2018  colorMusic_v2.7 (by Евгений Зятьков):

  • Настройка пульта внесена в скетч, тип пульта настраивается в IR_RCT
  • Добавлена поддержка Arduino Mega и Pro Micro
  • Исправлены мелкие баги

22.11.2018  colorMusic_v2.8:

• Добавлено ограничение тока для всей системы, настройка CURRENT_LIMIT • Слегка оптимизированы настройки

22.05.2019  colorMusic_v2.10: • Исправлен глюк с большим количеством светодиодов на МЕГЕ

Крутейшая свето- цветомузыка на Arduino и адресной светодиодной ленте WS2812b. Работает с лентой любой длины (до 450 светодиодов (версия 1.1), до 350 светодиодов (версия 2.0)), и может быть размещена в любом месте в квартире или автомобиле.

Режимы работы (переключаются кнопкой или с ИК пульта (версия 2.0)):

  • VU meter (столбик громкости): от зелёного к красному
  • VU meter (столбик громкости): плавно бегущая радуга
  • Светомузыка по частотам: 5 полос симметрично
  • Светомузыка по частотам: 3 полосы
  • Светомузыка по частотам: 1 полоса
  • Стробоскоп (Версия 2.0)
  • Подсветка (Версия 2.0)
    • Постоянный цвет
    • Плавная смена цвета
    • Бегущая радуга
  • Бегущие частоты (Версия 2.0)
  • Анализатор спектра (Версия 2.1)

Особенности:

  • Плавная анимация (можно настроить)
  • Автонастройка по громкости (можно настроить)
  • Фильтр нижнего шума (можно настроить)
  • Автокалибровка шума при запуске (можно настроить)
  • Поддержка стерео и моно звука (можно настроить)
  • Лента не гаснет полностью (Версия 2.0)
  • (Версия 2.1) все настройки сохраняются в памяти и не сбрасываются при перезагрузке
    • Сохранение настроек происходит при выключении кнопкой звёздочка (*)
    • А также через 30 секунд после последнего нажатия на любую кнопку ИК пульта

ПОДРОБНОЕ ВИДЕО ПО ПРОЕКТУ

Понятные схемы, прошивки с комментариями и подробные инструкции это очень большая работа. Буду рад, если вы поддержите такой подход к созданию Ардуино проектов.

ИНСТРУКЦИИ ПО ЭКСПЛУАТАЦИИ

НАСТРОЙКА ОПОРНОГО НАПРЯЖЕНИЯ. Потенциометр настройки опорного напряжения настраивается “методом тыка” пока не заработает (у меня стоит в середине). Подстройка нужна при смене источника аудио или изменении его потенциальной громкости.

  • Если во время работы в режиме VU метра (первые два режима) шкала всё время горит – слишком низкое опорное напряжение, Ардуино получает слишком высокий сигнал
  • Если не горит – опорное слишком высокое, системе не удаётся распознать изменение громкости с достаточной для работы точностью

МОЖНО СОБРАТЬ СХЕМУ БЕЗ ПОТЕНЦИОМЕТРА! Для этого параметру POTENT (в скетче в блоке настроек в настройках сигнала) присваиваем 0. Будет задействован внутренний опорный источник опорного напряжения 1.1 Вольт. Но он будет работать не с любой громкостью! Для корректной работы системы нужно будет подобрать громкость входящего аудио сигнала так, чтобы всё было красиво, используя предыдущие два пункта по настройке.

НАСТРОЙКА НИЖНЕГО ПОРОГА ШУМОВ является очень важной, в идеале выполняется 1 раз для любого нового источника звука или смены громкости старого. Есть 3 варианта настройки:

  • Ручная: выключаем AUTO_LOW_PASS и EEPROM_LOW_PASS (ставим около них 0), настраиваем значения LOW_PASS и SPEKTR_LOW_PASS вручную, методом тыка
  • Автонастройка при каждом запуске: включаем AUTO_LOW_PASS, выключаем EEPROM_LOW_PASS . При подаче питания музыка должна стоять на паузе! Калибровка происходит буквально за 1 секунду.
  • По кнопке: при удерживании кнопки 1 секунду настраивается нижний порог шума (музыку на паузу!)
  • Из памяти (ЛУЧШИЙ ВАРИАНТ): выключаем AUTO_LOW_PASS и включаем EEPROM_LOW_PASS
    • Включаем систему, источник звука подключен проводом
    • Ставим музыку на паузу
    • Удерживаем кнопку 1 секунду (либо кликаем кнопку 0 (ноль) на ИК пульте
    • Загорится светодиод на плате Arduino, погаснет через ~1.5 секунды
    • Значения шумов будут записаны в память и будут САМИ загружаться при последующем запуске!

Управление с ИК пульта

Номер режима Режим Кнопки ← → Кнопки ↑ ↓ Кнопка #
1 Шкала громкости (градиент) Плавность анимации
2 Шкала громкости (радуга) Плавность анимации Скорость радуги
3 Цветомузыка (5 полос) Плавность анимации Чувствительность
4 Цветомузыка (3 полосы) Плавность анимации Чувствительность
5 Цветомузыка (1 полоса)
5,1 3 частоты Плавность анимации Чувствительность Смена подрежима
5,2 Низкие Плавность анимации Чувствительность Смена подрежима
5,3 Средние Плавность анимации Чувствительность Смена подрежима
5,4 Высокие Плавность анимации Чувствительность Смена подрежима
6 Стробоскоп Плавность вспышек Частота вспышек
7 Цветная подсветка
7,1 Постоянный Цвет Насыщенность Смена подрежима
7,2 Плавная смена цвета Скорость Насыщенность Смена подрежима
7,3 Бегущая радуга Скорость Шаг радуги Смена подрежима
8 Бегущие частоты
8,1 3 частоты Скорость Чувствительность Смена подрежима
8,2 Низкие Скорость Чувствительность Смена подрежима
8,3 Средние Скорость Чувствительность Смена подрежима
8,4 Высокие Скорость Чувствительность Смена подрежима
9 Анализатор спектра Шаг цвета Цвет
Общие настройки (перекл. ОК) Все режимы Общая яркость горящих светодиодов Яркость “не горящих” светодиодов
Остальные кнопки: цифра 0 – калибровка шума, * – вкл/выкл систему,

СХЕМЫ, ПЕЧАТНЫЕ ПЛАТЫ

Внимание! arduino подключается к источнику звука до усилителя (линейному выходу)! звук, который идёт с усилителя на колонки, может спалить плату!

Разделяем на две вертикальные стойки

Без режима частот

С частотами (3-5 режим)

С микрофоном

От источника 12В

С ИК пультом 3.5 вход

С ИК пультом мик вход

С ИК пультом 3.5

Вход с усилителя (с колонки)

Схема для Pro Micro (by Евгений Зятьков)

МАТЕРИАЛЫ И КОМПОНЕНТЫ

Ссылки на магазины, с которых я закупаюсь уже не один год

Вам скорее всего пригодится:

  • Arduino NANO 328p – искать

ПРОШИВКА И НАСТРОЙКА

Загружать прошивку желательно до подключения компонентов, чтобы убедиться в том, что плата рабочая. После сборки можно прошить ещё раз, плата должна спокойно прошиться. В проектах с мощными потребителями в цепи питания платы 5V (адресная светодиодная лента, сервоприводы, моторы и проч.) необходимо подать на схему внешнее питание 5V перед подключением Arduino к компьютеру, потому что USB не обеспечит нужный ток, если например лента его потребует. Это может привести к выгоранию защитного диода на плате Arduino. Гайд по скачиванию и загрузке прошивки можно найти под спойлером на следующей строчке.

ИНСТРУКЦИЯ ПО ЗАГРУЗКЕ ПРОШИВКИ

1. Если это ваше первое знакомство с Arduino, внимательно изучите гайд для новичков и установите необходимые для загрузки прошивки программы.

2. Скачайте архив со страницы проекта. Если вы зашли с GitHub – кликните справа вверху Clone or download, затем Download ZIP. Это тот же самый архив!

3. Извлеките архив. Содержимое папки libraries перетащите в пустое место папки с библиотеками Arduino C:/Program Files (x86)/Arduino/libraries/

4. Папку с прошивкой из firmware положите по пути без русских букв. Если в папке с прошивкой несколько файлов – это вкладки, они откроются автоматически.

5. Настройте прошивку (если нужно), выберите свою плату, процессор. Подключите Arduino к компьютеру, выберите её COM порт и нажмите загрузить.

6. При возникновении ошибок или красного текста в логе обратитесь к 5-ому пункту гайда для новичков – “Разбор ошибок загрузки и компиляции“.

Содержимое папок в архиве

  • libraries – библиотеки проекта. Заменить имеющиеся версии
  • firmware – прошивки
    • colorMusic_v*** – прошивка для Arduino
    • Old versions – старые версии прошивок (не рекомендуется вообще их трогать)
    • IRtest_2.0 – скетч для получения кодов кнопок стороннего ИК пульта
  • schemes – схемы подключения

Дополнительно

  • FAQ: Большинство проблем можно решить, прочитав вот эту статью: https://alexgyver.ru/ws2812_guide/

    В: Купил ленту, на ней контакты G, R, B, 12. Как подключить? О: Это не та лента, можешь выкинуть

    В: Прошивка загружается, но выползает рыжими буквами ошибка “Pragma message….” О: Это не ошибка, а информация о версии библиотеки

    В: Что делать, чтобы подключить ленту своей длины? О: Посчитать количество светодиодов, перед загрузкой прошивки изменить самую первую в скетче настройку NUM_LEDS (по умолчанию стоит 120, заменить на своё). Да, просто заменить и всё!!!

    В: Сколько светодиодов поддерживает система? О: Версия 1.1: максимум 450 штук, версия 2.0: 350 штук

    В: Как увеличить это количество? О: Варианта два: оптимизировать код, взять другую библиотеку для ленты (но придётся переписать часть). Либо взять Arduino MEGA, у неё больше памяти.

    В: Какой конденсатор ставить на питание ленты? О: Электролитический. Напряжение 6.3 Вольт минимум (можно больше, но сам кондер будет крупнее). Ёмкость – минимум 1000 мкФ, а так чем больше тем лучше.

    В: Как проверить ленту без Arduino? Горит ли лента без Arduino? О: Адресная лента управляется по спец протоколу и работает ТОЛЬКО при подключении к драйверу (микроконтроллеру)

  • МОЖНО СОБРАТЬ СХЕМУ БЕЗ ПОТЕНЦИОМЕТРА! Для этого параметру POTENT (в скетче в блоке настроек в настройках сигнала) присваиваем 0. Будет задействован внутренний опорный источник опорного напряжения 1.1 Вольт. Но он будет работать не с любой громкостью! Для корректной работы системы нужно будет подобрать громкость входящего аудио сигнала так, чтобы всё было красиво, используя предыдущие два пункта по настройке.

  • Версию 2.0 и выше можно использовать БЕЗ ИК ПУЛЬТА, режимы переключаются кнопкой, всё остальное настраивается вручную перед загрузкой прошивки.

  • Как настроить другой пульт? У других пультов кнопки имеют другой код, для определения кода кнопок используйте скетч IR_test (версии 2.0-2.4) или IRtest_2.0 (для версий 2.5+), есть в архиве проекта. Скетч шлёт в монитор порта коды нажатых кнопок. Далее в основном скетче в секции для разработчиков есть блок дефайнов для кнопок пульта, просто измените коды на свои. Можно сделать калибровку пульта, но честно уже совсем лень.

  • Как сделать два столбика громкости по каналам? Для этого вовсе необязательно переписывать прошивку, достаточно разрезать длинный кусок ленты на два коротких и восстановить нарушенные электрические связи тремя проводами (GND, 5V, DO-DI). Лента продолжит работать, как одно целое, но теперь у вас есть два куска. Само собой, аудио-штекер должен быть подключен тремя проводами, а в настройках отключен моно режим (MONO 0), а количество светодиодов должно быть равно суммарному количеству на двух отрезках. P.S. Посмотри первую схему в схемах!
  • Как сбросить настройки, которые хранятся в памяти? Если вы доигрались с настройками и что то пошло не так, можно сбросить настройки на “заводские”.  Начиная с версии 2.4 есть настройка RESET_SETTINGS, ставите её 1, прошиваетесь, ставите 0 и снова прошиваетесь. В память будут записаны настройки из скетча. Если вы на 2.3, то смело обновляйте до 2.4, версии отличаются только новой настройкой, которая никак не повлияет на работу системы. В версии 2.9 появилась настройка SETTINGS_LOG, которая выводит в порт значения хранящихся в памяти настроек. Так, для отладки и понимания.

АЛГОРИТМ РАБОТЫ

Режим громкости

  • Делается 100 измерений напряжения на АЦП
  • Ищется максимальное
  • Фильтруется по нижнему порогу шумов
  • Возводится в степень для большей “резкости” анимации
  • Фильтруется “бегущим средним”
  • Ищется “средняя” громкость за несколько секунд (тоже бегущее среднее, но очень медленное)
  • Ищем “максимальную громкость шкалы”, как среднюю * некоторый коэффициент
  • Преобразуем сигнал в количество горящих светодиодов
  • Включаются светодиоды согласно режиму отрисовки

Режим цветомузыки:

  • Преобразование Хартли (разбивка на спектр частот)
  • Фильтрация по нижнему порогу шумов
  • Поиск максимального значения в трёх диапазонах (низкие, средние, высокие)
  • Расчёт “средней громкости” (медленное бегущее среднее)
  • Если текущий сигнал больше среднего * коэффициент – включаем светодиоды
  • Итого имеем массив colorMusicFlash, в котором три ячейки 1 или 0, вкл или выкл
  • Включаем отрезки светодиодов согласно массиву

Это набор компонентов (см. спецификацию) Номенклатурный номер: 9000450949 Артикул: Цветомузыка на Arduino Страна происхождения: РОССИЯ Производитель: DIY

Спецификация набора

То, что у вас уже есть, вы можете удалить в корзине.

Описание

Инструкция

Схема очень простая!

Вам понадобятся Arduino Nano, или Uno. Или какая там у вас есть? Два потенциометра, пять резисторов, пару конденсаторов и линейка (лента) из светодиодов WS2812b. Всё! Светодиодов в линейке может быть 60, 120 или 180. А впрочем, любое количество. В визуализаторе с помощью алгоритма быстрого преобразования Фурье выделяются 8 частот (порог чувствительности на каждую частоту свой, снижается от 1 к 8), преобразуются в цвет и выводятся на линейку светодиодов по одному из восьми алгоритмов. Основную часть скетча писал Майкл Крампас, парни из Чип и Дипа добавили функционал, ещё одна часть кода взята из проекта Piccolo компании Adafruit. В Adafruit также писали библиотеку для светодиодов neopixel. А библиотека быстрого преобразования Фурье (FFT) написана уважаемым ChaN, это библиотека FFT для 128 точек, адаптированная для AVR микроконтроллеров написана на ассемблере. Сам скетч и библиотеки ffft.h и Adafruit_NeoPixel.h нужно скачать в подвале этой страницы и распаковать в папку с другими библиотеками Arduino. Например C:Program Files (x86)Arduinolibraries Не теряйте время на разбор алгоритмов, просто соберите, залейте скетч в плату Arduino и наслаждайтесь шоу. Это всего лишь развлечение!

Настройки

В момент первого включения нужно сделать пару настроек: Яркость: удерживайте кнопку color при включении питания. На первых 8 светодиодах будет отображаться радуга светодиодов. С помощью ручки param измените яркость. По завершении нажмите кнопку color еще раз, и ваша конфигурация будет сохранена в памяти. Длина светодиодной полосы: удерживайте кнопку pattern при включении питания. Отобразится один, два или три красных светодиода. Используйте ручку param, чтобы выбрать длину светодиодной полосы в зависимости от количества красных светодиодов: 1=60 светодиодов 2=120 светодиодов 3=180 светодиодов По завершении нажмите кнопку pattern еще раз, и ваша конфигурация будет сохранена в памяти.

Алгоритмы

Танцы плюс: пики звуковых сигналов испускаются из центра полосы и исчезают по мере приближения к концам. Скорость пика пропорциональна величине звукового сигнала этого пика. Танцы минус: то же, что и Dance Party, но пики сигналов испускаются с одного конца. Импульс: пики сигналов отображаются как яркие импульсы, которые поступают из центра полосы. Ширина импульса зависит от уровня сигнала. Световая полоса: в пиках освещается вся полоса. Цветные полоски: пики сигналов отображаются как цветные полосы, которые исчезают. Цветные полоски 2: подобно цветные полоски, но каждая полоска сжимается и исчезает. Вспышки: пики сигналов отображаются в виде светодиодной вспышки в случайном месте. Начальный цвет белый, а затем исчезает через другой цвет. Светлячки: пики сигналов отображаются как одиночные светодиоды в случайном месте, и они перемещаются влево или вправо и исчезают. Их скорость зависит от величины сигнала.

Цветовые схемы

Случайная двухцветная схема: выбраны два случайных цвета и только они используются для отображения пиков сигнала. Со временем будут выбраны новые цвета. Используйте param, чтобы настроить скорость изменения цветовой схемы. Если ручка потенциометра «параметры» в верхнем положении, цвета будут меняться часто и каждый пик сигнала будет иметь новый цвет. Рекомендую установить ручку в средину. Радуга: все пики сигналов отображаются как один и тот же цвет (с небольшим количеством случайных вариаций) и этот цвет меняется как радуга с течением времени. Скорость изменения цвета устанавливается потенциометром param. Цветные частоты: в этом режиме каждый пик сигнала окрашивается в зависимости от частотной полосы где он находится. Самая низкая полоса красного цвета, и дальше вверх по спектру. Есть 8 полос частот: красный, оранжевый, желтый, зеленый, голубой, синий, фиолетовый, белый. Этот цветовой режим наиболее интересен, когда частотная характеристика настроена на все полосы частот. Диапазон частот: вы можете управлять тем диапазоном частот, на который откликается цветомузыка. Чтобы установить диапазон нажмите и удерживайте обе кнопки. Используйте ручку param, чтобы выбрать, сколько из восьми частотных диапазонов будет показываться. Если вы хотите выделить бас и ритм музыки, установите частотную характеристику только на самые низкие 2 или 3 полосы. Если вы хотите показать все частоты в музыке (например, вокал и более высокие инструменты), выберите все полосы частот. Это видеоинструкция по настройке и она же демонстрация визуализатора в работе. Там, в конце, две музыкальные композиции с разными алгоритмами.

Это открытый проект! Лицензия, под которой он распространяется – Creative Commons — Attribution — Share Alike license.

Гарантийный срок

6 месяцев

Техническая документация

библиотека Neopixel для Arduino zip, 31 КБ Скетч Vizualizator zip, 11 КБ Библиотека FFT для vizualizator zip, 16 КБ Мы рекомендуем DIY лаборатория Усилители НЧ Class D Источники питания Усилители НЧ, мультимедиа Снято с производства

Arduino — цветомузыка и шаговые двигатели.

Постановка задачи

Давно зрело желание переделать «Кузю», чтобы он не только двигался в такт музыки, но и вокруг сияла цветомузыка. Это можно было сделать и на Fujitsu MB90F598G, только руки не доходили. Теперь, когда я поглащен освоением нового микроконтроллера Arduino, я решил Кузю модернизировать.

Контроллер шагового двигателя

Из всех предложений рынка, я остановил свой выбор на EasyDriver:

Технические характеристики микросхемы A3967SLB-T

Возможности Arduino Nano позволяют подключить 4 контроллера шаговых двигателей и обеспечить еще 3 канала для управления RGB светодиодными лентами.

Проект

Для реализации цветомузыки я выбрал 3-х полосный активный фильтр на базе NM2116(Мастер КИТ). С активного фильтра сигналы потребовалось усилить, а для управления светодиодной RGB лентой, поставить транзисторные ключи. В итоге получилось следующее:

Скетч (программа) для Ардуино скачать

Как сделать

Результат

Предыдущая ГлавнаяТворенияУвлеченияАрдуино Следующая

Рубен Лачинов

HELLO WORLD Это мой первый проект на базе Arduino а именно Pro Mini. Поначалу все схемы я рисовал от руки на бумаге и цветомузыку собрал на макетных платах. Но после сборки все же решил создать схемы в Eagle. Некоторые отличия от сборки есть, но суть осталась. Схему разводки светодиодов не рисовал, по-моему, это творческая часть, но если нужно, нарисую. На плате есть все необходимое:

  • Два аудио разъема для подключения источника сигнала и колонок.
  • Разъем для переключателя левый/правых т.к. цветомузыка работает с одним каналом нужно иметь возможность выбирать из стерео сигнала. 
  • Разъем для усилителя. Усилитель из любых дешевых колонок подойдет. Питание всей цветомузыки подается через кнопку включения на усилителе.
  • Разъем для подключения светодиодов.
  • Три кнопки для переключения режимов. Задумывал три режима – 1 активный (мигание под музыку), 2 пассивный быстрый (с быстрой анимацией, но не под музыку), 3 пассивный медленный (медленная плавная анимация не под музыку) но задумку еще не выполнил.
  • Посадочное место для Arduino Pro Mini.

Все порты платы Arduino защищены резисторами. Что касается транзисторов, я использовал КТ817.

Принципиальная схема
Схема печатной платы

На схемах есть резисторы и конденсаторы с неуказанным номиналом, их нужно рассчитывать в зависимости некоторых параметров – питание, количество светодиодов, характеристики светодиодов и т.д. Лично я рассчитывал резисторы следующим образом: Питание я использовал 9В, но предполагал и 12В. Светодиоды разные, к примеру, белые имеют характеристики 3В, 10мА, а красные – 2В, 20мА. На каждом канале у меня по 6 светодиодов одного цвета подключены параллельно, из этого следует – белым светодиодам нужно 3В, 60мА, красным — 2В, 120мА. Далее воспользуемся формулой R = (U – Uz) / I. Для белых светодиодов: U = 12В Uz = 3В I = 0.06А R = (12 – 3) / 0.06 = 150 Ом Для красных светодиодов: U = 12В Uz = 2В I = 0.12А R = (12 – 2) / 0.12 = 83.3 Ом В результате я использовал резисторы номиналом 165 Ом (два по 330 Ом параллельно, других небыло в наличии) на все светодиоды. Рассчитывать другие цвета нет смысла, их параметры колеблются между белыми и красными. 

  • Белые и зеленые 220мФ
  • Синие 470мФ
  • Желтые 2200мФ
  • Красные 1500мФ

Что касается программы, она работает, но еще не закончена. Довольно многое стоит еще допилить напильником. В основе всего проекта лежит “Быстрое преобразование Фурье”, а точнее библиотека FFT (Fast Fourier transform).

/* FFT for LoL Shield v0.9 based on FFT library and code from the Arduino forums and the Charlieplexing library for the LoL Shield. */  #include   #define AUDIOPIN 0  // Аудио вход #define AButton1 1  // Кнопка 1 #define AButton2 2  // Кнопка 2 #define AButton3 3  // Кнопка 3 char im[128], data[128]; char data_a[14]; // Массив из 14 значений для аналоговых выводов char data_d[14]; // Массив из 14 значений для цифровых выводов int i=0, val, vd=0; // Переменные для циклов int vmin=30000; // Минимальное значение аудиосигнала int vmax=0; // Максимальное значение аудиосигнала // Номера аналоговых выводов - Катоды сетодиодов // const int ALeds[] = {3, 5, 6, 9, 10, 11}; // Номера цифровых выводов - Катоды сетодиодов const int DLeds[] = {1, 0, 2, 4, 7, 8, 12, 13, 3, 5, 6, 9, 10, 11}; // Номера выводов 6x-digital 6x-PWM int vBack=0; // общий фоновый int LastClick = 1; // Номер последней нажатой кнопки void setup() {   for (i=0; i<14; i++)   {     <span>pinMode(DLeds[i],OUTPUT);     digitalWrite(DLeds[i], HIGH);     // pinMode(ALeds[i],OUTPUT);   } }  void Passive()   // Пасивная цветомузыка, мигание без аудио сигнала {   for (i=6; i<14; i++)     {       <span>digitalWrite(DLeds[i], 1);       delay(100);       digitalWrite(DLeds[i], 0);       delay(100);     } }  void Active()   // Активная цветомузыка, обработка аудио сигнала {   vmin = 30000;   vmax = 0;    for (i=0; i < 128; i++)   {                                          val = analogRead(AUDIOPIN);                                         data[i] = val;    // усиливаем входящий сигнал         im[i] = 0;                                                        }    fix_fft(data,im,7,0);    for (i=0; i< 128; i++)   {                                           data[i] = sqrt(data[i] * data[i] + im[i] * im[i]);       // получаем абсолютное значение от значения из массива, дальше имеем дело только с положительными числами   }    for (i=0; i<8; i++)   {     <span>// усредняем соседние значения     data_a[i] = (data[i*16] + data[i*16 + 1] + data[i*16 + 2] + data[i*16 + 3] + data[i*16 + 4] + data[i*16 + 5] + data[i*16 + 6] + data[i*16 + 7]     + data[i*16 + 8] + data[i*16 + 9] + data[i*16 + 10] + data[i*16 + 11] + data[i*16 + 12] + data[i*16 + 13] + data[i*16 + 14] + data[i*16 + 15]);     vmax = max(vmax, data_a[i]); // запоминаем максимальное значение     vmin = min(vmin, data_a[i]); // запоминаем минимальное значение   }    for (i=0; i<8; i++)   {     <span>// масштабируем значения под аналоговый вывод     data_d[i] = map(data_a[i], 0, 63, 0, 1); //цифровые     // data_avgs[i] = map(data_avgs[i], vmin, vmax, 255, 0); // аналоговые     // Выводим сигнал     digitalWrite(DLeds[i], data_d[i]);     // analogWrite(ALeds[i], data_avgs[i]);   }    vBack = map(val, 0, 255, 0, 6);   for (i=1; i<7; i++)   {    <span>if (i <= vBack) <span>// если     {      digitalWrite(DLeds[i+7], 1);    }    else // если     {      digitalWrite(DLeds[i+7], 0);    }   } }  void Options() // Третий режим. Назначения пока нет {   for (i=6; i<14; i++)     {       <span>digitalWrite(DLeds[i], 1);       delay(100);     }   for (i=0; i<14; i++)     {       <span>digitalWrite(DLeds[i], 0);       delay(100);     } }  void loop() {       if (analogRead(AButton1) == 1023) // если     {      LastClick = 1;       // запоминаем, что кнопка 1 была нажата      Passive();           // вызываем функцию 1й кнопки    }    else // если     {      if (analogRead(AButton2) == 1023) // если       {        LastClick = 2;       // запоминаем, что кнопка 1 была нажата        Active();            // вызываем функцию 1й кнопки      }      else // если       {        if (analogRead(AButton3) == 1023) // если         {          LastClick = 3;       // запоминаем, что кнопка 1 была нажата          Options();           // вызываем функцию 1й кнопки        }        else        {          switch (LastClick)   // dвспоминаем, какая кнобка была нажата раньше          {            case 1:            // выполняется, если последней была нажата кнопка 1              Passive();       // вызываем функцию 1й кнопки              break;            case 2:             // выполняется, если последней была нажата кнопка 2              Active();         // вызываем функцию 2й кнопки              break;            case 3:             // выполняется, если последней была нажата кнопка 3              Options();        // вызываем функцию 3й кнопки              break;          }        }      }    } }  

Имела место глупость слишком рано похвастаться и выложить видео, не имея схем в приемлемом виде. Надеюсь, я не отпугнул заинтересовавшихся людей столь долгой задержкой. Скачать все материалы одним архивом (Схемы Eagle, Sketch, библиотека FFT, ссылки и фото): Project — LED_music.rar Ссылки на источники: Arduino Realtime Audio Spectrum Analyzer with Video out! LoL Shield (1) Индикатор уровня на Arduino и LoL-shield Arduino: LED цветомузыка Цветомузыка в люминесцентном светильнике LPT цветомузыка image 2017-12-11 в 14:58, , рубрики: arduino, diy или сделай сам, ардуинщик, вечеринка, звук, красиво, легко, начинающим, Новый Год, преобразование фурье, сделай сам, спектрограмма, цветомузыка

С наступающим! Приближается Новый год, а значит, пора срочно создавать настроение! Ну и как всегда в это время года рождаются десятки электронных схем различных цветомузыкальных установок. Чего только самобытные мастера не придумают. От трехцветных моргалок до лазерных многолучевых установок с управлением по MIDI интерфейсу. image Как большой поклонник, так называемых адресных светодиодов, хочу показать вам самую простою, но удивительную цветомузыку. Я вообще такой ни разу не видел. Пока не собрал за один вечер. Итак, визуализатор звука! Инструкция. Схема очень простая! image Вам понадобятся Arduino Nano, или Uno. Или какая там у вас есть? Два потенциометра, пять резисторов, пару конденсаторов и линейка (лента) из 180 светодиодов WS2812b. Всё! Светодиодов в линейке может быть 60, 120 или 180. В визуализаторе с помощью алгоритма быстрого преобразования Фурье выделяются 8 частот (порог чувствительности на каждую частоту свой, снижается от 1 к 8), преобразуются в цвет и выводятся на линейку светодиодов по одному из восьми алгоритмов. Скетч писал Майкл Крампас, парни из Чип и Дипа добавили функционал, а библиотека для светодиодов и быстрого преобразования Фурье (FFT) написана в Адафрут для проекта Piccolo. Библиотека FFT для 128 точек, адаптированная для AVR микроконтроллеров написана на ассемблере.

Сам скетч и библиотеку FFT нужно скачать здесь и здесь

Не теряйте время на разбор алгоритмов, просто соберите, залейте скетч и наслаждайтесь шоу. Это всего лишь развлечение! В момент первого включения нужно сделать пару настроек: ★Яркость: удерживайте кнопку color при включении питания. На первых 8 светодиодах будет отображаться радуга светодиодов. С помощью ручки param измените яркость. По завершении нажмите кнопку color еще раз, и ваша конфигурация будет сохранена в памяти. ★Длина светодиодной полосы: удерживайте кнопку pattern при включении питания. Отобразится один, два или три красных светодиода. Используйте ручку param, чтобы выбрать длину светодиодной полосы в зависимости от количества красных светодиодов: 1=60 светодиодов 2=120 светодиодов 3=180 светодиодов По завершении нажмите кнопку pattern еще раз, и ваша конфигурация будет сохранена в памяти. Алгоритмы Танцы плюс: пики звуковых сигналов испускаются из центра полосы и исчезают по мере приближения к концам. Скорость пика пропорциональна величине звукового сигнала этого пика. Танцы минус: То же, что и Dance Party, но пики сигналов испускаются с одного конца. Импульс: пики сигналов отображаются как яркие импульсы, которые поступают из центра полосы. Ширина импульса зависит от уровня сигнала. Световая полоса: В пиках освещается вся полоса. Цветные полоски: пики сигналов отображаются как цветные полосы, которые исчезают. Цветные полоски 2: Подобно цветные полоски, но каждая полоска сжимается и исчезает. Вспышки: пики сигналов отображаются в виде светодиодной вспышки в случайном месте. Начальный цвет белый, а затем исчезает через другой цвет. Светлячки: пики сигналов отображаются как одиночные светодиоды в случайном месте, и они перемещаются влево или вправо и исчезают. Их скорость зависит от величины сигнала. Цветовые схемы Случайная двухцветная схема: выбраны два случайных цвета и только они используются для отображения пиков сигнала. Со временем будут выбраны новые цвета. Используйте param, чтобы настроить скорость изменения цветовой схемы. Если ручка потенциометра «параметры» в верхнем положении, цвета будут меняться часто и каждый пик сигнала будет иметь новый цвет. Рекомендую установить ручку в средину. Радуга: все пики сигналов отображаются как один и тот же цвет (с небольшим количеством случайных вариаций) и этот цвет меняется как радуга с течением времени. Скорость изменения цвета устанавливается потенциометром param. Цветные частоты: в этом режиме каждый пик сигнала окрашивается в зависимости от частотной полосы где он находится. Самая низкая полоса красного цвета, и дальше вверх по спектру. Есть 8 полос частот: красный, оранжевый, желтый, зеленый, голубой, синий, фиолетовый, белый. Этот цветовой режим наиболее интересен, когда частотная характеристика настроена на все полосы частот. Диапазон частот: вы можете управлять тем диапазоном частот, на который откликается цветомузыка. Чтобы установить диапазон нажмите и удерживайте обе кнопки. Используйте ручку param, чтобы выбрать, сколько из восьми частотных диапазонов будет показываться. Если вы хотите выделить бас и ритм музыки, установите частотную характеристику только на самые низкие 2 или 3 полосы. Если вы хотите показать все частоты в музыке (например, вокал и более высокие инструменты), выберите все полосы частот. Это видеоинструкция по настройке и она же демонстрация визуализатора в работе. Там в конце две музыкальные композиции с разными алгоритмами.

Ещё одна композиция

Автор: Олег Тетушкин

Источник

—>

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
А как считаете Вы?
Напишите в комментариях, что вы думаете – согласны
ли со статьей или есть что добавить?
Добавить комментарий