RGB-матрица аудиовизуализатор на Arduino (NeoPixel + Spectrum Shield) — полное руководство
Компоненты и материалы
| Компонент | Количество | Примечание |
|---|---|---|
| Arduino UNO | 1 | |
| Adafruit NeoPixel Shield для Arduino (40 RGB LED, 8x5) | 1 | WS2812B, управление одним пином |
| SparkFun Spectrum Shield (2x MSGEQ7) | 1 | Анализатор спектра 7 полос на канал |
| Корпус ProtoStax для Arduino (акрил, стыкуемый) | 1 | Опционально, для готовое устройства |
| Кнопка тактовая (панельная, SPST) | 1 | Переключение цветовых схем |
| Стереоджек 3.5мм панельный (вход/выход) | 2 | Аудио вход и проходной выход |
| Кабели аудио 3.5мм (угловые, патч-корд) | 2 + 1 |
Инструменты
- Дрель/шуруповёрт (для отверстий в корпусе под джеки и кнопку)
- Паяльник, припой, флюс
- Ножовка/дремель (для подгонки Spectrum Shield под USB-разъём Uno)
О проекте
Устройство визуализирует звук в реальном времени: стереосигнал разбивается на 7 частотных полос на канал (всего 14 значений), амплитуда каждой полосы отображается столбиком на RGB-матрице 8x5 (40 NeoPixel). Используются HSV-цветовые схемы для плавных переходов. Всё помещается в компактный стыкуемый корпус ProtoStax.
Пошаговая сборка
Шаг 1: Монтаж Arduino в корпус ProtoStax
Устанавливаем Arduino Uno на базовую пластину корпуса, добавляем ножки и винты. Конфигурация "Platform" — открытый доступ к плате.
Шаг 2: Подготовка SparkFun Spectrum Shield
Shield поставляется без пинов. Используем разъёмы-столбики (stacking headers) от комплекта NeoPixel Shield (они выше, позволяют поставить NeoPixel сверху).
Проблема: USB и разъём питания Uno мешают плотной посадке Shield.
Решение:
- Спилите угол Spectrum Shield над USB/питанием (там прототипирование, не используется).
- Подрежьте ножки stacking headers, чтобы Shield сидел плотно.
Шаг 3: Установка Adafruit NeoPixel Shield
Впаяйте обычные пины (идущие в комплекте) в NeoPixel Shield. Вставьте его сверху на stacking headers Spectrum Shield. Питание NeoPixel берётся от Arduino (Vin/5V) — суммарный ток 40 LED при яркости 40/255 в пределах возможностей стабилизатора Uno. Терминальный блок на Shield не используется.
Шаг 4: Программный код (демо)
Полный скетч на GitHub: ProtoStax_Audio_Visualizer_Demo.ino.
Основные блоки:
Анализ спектра (Spectrum Analysis)
MSGEQ7 читаются по очереди: сброс (RESET), строб (STROBE), чтение АЦП (A0 — левый канал, A1 — правый). 7 полос: 63Hz, 160Hz, 400Hz, 1kHz, 2.5kHz, 6.25kHz, 16kHz.
Группировка в диапазоны:
- BASS (бас): полосы 0,1 (63, 160 Hz)
- MID_RANGE (мид): полосы 2,3,4 (400, 1k, 2.5k Hz)
- TREBLE (высокие): полосы 5,6 (6.25k, 16k Hz)
Значения 0–1023 усредняются по двум каналам (берётся максимум).
RGB-матрица (NeoMatrix)
Матрица 5x8 (ширина 5, высота 8). Ориентация: NEO_MATRIX_TOP + NEO_MATRIX_RIGHT + NEO_MATRIX_COLUMNS + NEO_MATRIX_PROGRESSIVE. Начало координат (0,0) — верхний левый угол физической матрицы, но логически мы хотим начало внизу слева (низкие частоты, низкая амплитуда). Поэтому матрица инициализируется как 5x8 с началом в TOP-RIGHT и прогрессией по колонкам.
Отображение: для каждой полосы (строки матрицы) амплитуда мапится на 5 колонок: numCol = freq / 204 (1023/5≈204). Рисуется matrix.drawPixel(col, row, color).
Цветовые схемы (HSV)
Используется matrix.ColorHSV(hue) (32-бит) и matrix.setPassThruColor() для обхода 16-битного ограничения drawPixel. Три схемы:
MAGNITUDE_HUE: зелёный→красный/розовый (бас, мид, требл одинаковые).MAGNITUDE_HUE_2: розовый/синий сдвиг.HSV_COLOR_WHEEL: циклическое изменение оттенка по всему цветовому кругу.
Переключение схем — через Serial Monitor (ввод 0, 1, 2).
Шаг 5: Тестирование
Подключите аудио источник (телефон, ПК) к входу Spectrum Shield, выход — к колонкам/усилителю. Загрузите скетч, откройте Serial Monitor, вводите 0/1/2 для смены схем. Наблюдайте реакцию на музыку.
Шаг 6: Завершение сборки корпуса
Установите верхние распорки, боковые стенки, панель с аудиоджеками и кнопкой, крышку. Корпус становится монолитным блоком.
Шаг 7: Идеи для развития
- Панельные аудиоджеки на боковой стенке (внутренняя пайка к Spectrum Shield) — чистый вид.
- Кнопки переключения диапазонов (BASS/MID/TREBLE/ALL) и цветовых схем.
- Матовый верх (шкурка акрила) — диффузор света.
- Автоматическое масштабирование амплитуды (AGC) для слабых сигналов.
- Дополнительные визуальные эффекты (волны, спектрограмма, пики).
Схема подключения
Spectrum Shield: STROBE->D4, RESET->D5, DC_One->A0, DC_Two->A1. NeoPixel Shield: DIN->D6 (стандартный пин шилда). Питание общее от Arduino.
Файл схемы: изображение в разделе Schematics.
Производственный процесс
- Датчик CO2 K30: мониторинг качества воздуха в реальном времени на Arduino
- Устройство для общения глухосліпых людей с помощью 1Sheeld и Arduino
- Умная копилка: управление монетоприёмником на Arduino Nano
- Сборка консоли Pong 24×16 на Arduino Nano и MAX7219
- Детектор аудиочастот на Arduino: измеряем пик громкости с высокочувствительным модулем
- Управление светодиодом по Bluetooth с Arduino: простой DIY-гид
- Интеграция ёмкостного сканера отпечатков DFRobot с Arduino или ESP8266
- Как воспроизводить аудио с Arduino UNO и DFPlayer Mini – Пошаговое руководство
- Оживление рыбы Billy Bass с любым аудиоисточником — пошаговое руководство
- Arduino RGB-микшер цветов: Простой проект для начинающих