RGB 32 频段音频频谱可视化器:Arduino Nano 驱动 WS2812B 8×32 LED 矩阵
核心硬件清单
- Arduino Nano R3 ×1
- WS2812B 8×32 RGB LED 矩阵(256 颗) ×1
- 音频输入电路: 3.5mm 音频插座或 RCA 座子、屏蔽线
- 电阻: 4.75 kΩ ×3、100 kΩ ×2、10 kΩ ×1、390 Ω ×1(数据线串联保护)
- 电容: 100 nF ×2(去耦)、1000 µF/16V ×1(大容量滤波)
- 按键开关 12mm ×1(切换配色模式)
- 4×6 cm 万用板 ×1、外部 5V/2A 电源(矩阵全亮峰值 > 2.5A)
工具需求
- 电烙铁、焊锡、3.5mm 音频分线线(一分二,一路听一路分析)
项目来源与改进
本项目移植自 Shajeeb 的 32-Band Audio Spectrum Visualizer Analyzer(基于 MAX7219 单色点阵)。核心改进:
- 将驱动层改为 Adafruit NeoPixel 兼容 WS2812B RGB 矩阵。
- 增加 输入保护二极管(5V 线串联),防止矩阵反向供电烧坏 Nano。
- 数据线串联 390 Ω 电阻抑制反射,1000 µF 电容 稳定供电。
- 加入 32 段均衡器曲线(
eq[32]),抑制 PC 声卡低频过强、高频偏弱问题。 - 提供 7 种配色模式(按键循环切换),含列/行渐变、峰值白光等。
硬件组装要点
- 音频信号线必须用屏蔽线,屏蔽层单端接地,防嗡嗡声。
- Nano 到矩阵数据线尽量短(< 10 cm),减少信号衰减。
- 矩阵供电正负极分别从电源引出粗线,不要 经过 Nano 供电。
- 原型板布局见附件原理图与实物图。
核心算法流程
- ADC 自由运行采样: 配置 ADCSRA=0xE5(预分频 32,约 38 kHz 采样率),ADMUX 选 A0 外部参考。
- 64 点 FFT:
arduinoFFT库完成加窗、FFT、幅度计算。 - 频段合并: 32 个显示列对应 FFT 前 32 个频率桶,每桶平均 2 个 FFT bin。
- 均衡器修正:
data_avgs[i] = data_avgs[i] * eq[i] / 100。 - 映射到 0~8 行:
map(value, 0, 80, 0, 8),峰值保持并每帧衰减 1 格。 - 矩阵映射:
GetLedFromMatrix(x,y)处理蛇形布线(零号 LED 在右下角,偶列向上、奇列向下)。 - 配色:
Wheel()生成 HSV→RGB,colors[mode][row]定义各模式调色板。
关键代码片段
#define SAMPLES 64
#define xres 32
#define yres 8
#define ledPIN 6
#define NUM_LEDS (xres * yres)
#define BRIGHTNESS 32 // 建议 32~64,>100 发黄需改供电点
bool EQ_ON = true;
byte eq[32] = {50,55,60,70,75,80,85,95,100,100,100,100,100,100,100,100,
100,100,100,100,100,100,100,100,115,125,140,160,185,200,225,255};
byte colors[7][8] = {
{170,160,150,140,130,120,1,1}, // 模式0:暖色→峰值白
{1,5,10,15,20,25,90,90}, // 模式1:冷色→峰值蓝
{90,85,80,75,70,65,1,1}, // 模式2:青绿→峰值白
{90,90,90,30,30,30,1,1}, // 模式3:单色蓝→峰值白
{170,160,150,140,130,120,0,0}, // 模式4:自定义峰值色(0=白)
{170,160,150,140,130,120,1,1}, // 模式5:按列变色
{170,160,150,140,130,120,1,1} // 模式6:按行变色
};
void setup() {
pixel.begin(); pixel.setBrightness(BRIGHTNESS);
ADCSRA = 0b11100101; ADMUX = 0b00000000;
}
void loop() {
// 1. 采样 64 点
for(int i=0;i
性能与优化
- 当前
arduinoFFT浮点运算约 30 ms/帧,刷新率 ~30 fps。 - 正在移植 OpenMusicLabs FHT 定点运算库,预期提速 5~10 倍,释放 CPU 做更多特效。
- 亮度设为 32 时 1A 电源足矣;若需高亮建议从矩阵中心取电并用 2A 电源。
3D 打印外壳(可选)
附件提供 .stl 文件(arduino_rgb_audio_analyzer_lX4Dv4Pta2.zip),含矩阵固定框、Nano 仓、音频插座座、电源接口,PLA 打印即可组装成成品外观。
常见问题
- 全屏闪烁/乱码: 检查 390 Ω 电阻、数据线长度、共地是否可靠。
- 低频柱子一直满格: 关闭 EQ_ON 或调低 eq[0~7] 数值。
- 颜色发黄/变暗: 供电不足,缩短供电线、加粗线径、或降低 BRIGHTNESS。
制造工艺
- 32 频段 Arduino 音频频谱分析仪:线性与伪对数双模式
- 智能缺水报警器 – DIY植物土壤湿度监测装置
- 意大利语单词时钟:Arduino Nano + NeoPixel 144 灯珠 + LCD + RTC 打造
- 基于Arduino MKR Fox 1200构建可靠Sigfox千瓦时电表
- 蓝牙温度监测仪:Arduino Nano + NTC 热敏电阻 + HC-06 无线传输
- 非接触手势门锁:APDS-9960 + Arduino 实现安全门禁
- Arduino Nano 多功能伴侣套件 —— 电阻/电容测量、二极管测试、RTC时钟一体化
- Arduino Micro/Leonardo USB MIDI 适配器套件 —— 完整元件清单与固件指南
- 为Arduino构建隔离模拟输入电路
- 两个电阻自制 Arduino UNO 视频输出线(RCA/TVout)
- Arduino UNO 自制可靠植物土壤湿度传感器
- Arduino UNO 精准视觉反应时间测试仪