亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

Arduino RGB 矩阵音频频谱可视化器 – 从零构建完整教程

组件与物料

Arduino UNO ×1
Adafruit NeoPixel Shield for Arduino (40 RGB LED, 8×5) ×1
SparkFun Spectrum Shield (双 MSGEQ7, 7 频段×2 声道) ×1
ProtoStax Arduino 亚克力外壳(可堆叠模块化) ×1
SPST 按钮开关 ×1
3.5mm 立体声音频插座(面板安装) ×2
90° 3.5mm AUX 音频线 ×2
3.5mm 公对公音频线 (6 英尺) ×1

所需工具

项目概述

本项目结合 SparkFun Spectrum Shield 进行音频频谱分析,与 Adafruit NeoPixel Shield 显示 RGB 频谱瀑布,最终装入 ProtoStax 模块化亚克力外壳,打造一个可桌面摆放的成品级音频可视化器。

核心原理

步骤 1:将 Arduino 固定在底板

按图序安装支柱、螺丝、脚垫,形成“平台配置”,便于后续堆叠扩展板。

步骤 2:准备 Spectrum Shield

Spectrum Shield 原板无排针,利用 NeoPixel Shield 附带的排母焊接。因 USB/电源接口干涉,需剪去 Shield 端部多余 PCB 并修剪排针腿长,使其贴合 Arduino。

步骤 3:堆叠 NeoPixel Shield

将 NeoPixel Shield 焊接直插排针并插在 Spectrum Shield 之上。NeoPixel 数据线默认接 D6,可由 Arduino 直接供电(全亮电流约 2.4A,建议外接 5V 电源)。

步骤 4:核心代码逻辑

GitHub 完整代码:ProtoStax_Audio_Visualizer_Demo

频谱读取

#define STROBE 4
#define RESET 5
#define DC_One A0
#define DC_Two A1

int Frequencies_One[7];
int Frequencies_Two[7];

void Read_Frequencies() {
  digitalWrite(STROBE, LOW); delay(1);
  digitalWrite(RESET, HIGH); delay(1);
  digitalWrite(STROBE, HIGH); delay(1);
  digitalWrite(STROBE, LOW); delay(1);
  digitalWrite(RESET, LOW);
  
  for (int band = 0; band < 7; band++) {
    Frequencies_One[band] = (analogRead(DC_One) + analogRead(DC_One)) >> 1;
    Frequencies_Two[band] = (analogRead(DC_Two) + analogRead(DC_Two)) >> 1;
    digitalWrite(STROBE, HIGH);
    digitalWrite(STROBE, LOW);
  }
}

频段分组

NeoMatrix 初始化与坐标系

#define NEO_MATRIX_WIDTH 5
#define NEO_MATRIX_HEIGHT 8
#define NEOPIXEL_PIN 6

Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(
  NEO_MATRIX_WIDTH, NEO_MATRIX_HEIGHT, NEOPIXEL_PIN,
  NEO_MATRIX_TOP + NEO_MATRIX_RIGHT + NEO_MATRIX_COLUMNS + NEO_MATRIX_PROGRESSIVE,
  NEO_GRB + NEO_KHZ800
);

void setup() {
  matrix.begin();
  matrix.setTextWrap(false);
  matrix.setBrightness(40);
  matrix.fillScreen(0);
  matrix.show();
}

坐标系原点 (0,0) 固定在左上角。本项目采用 TOP-RIGHT, COLUMNS PROGRESSIVE 方向,使频段从左下向右上排列,符合频谱瀑布直觉。

频谱绘制与配色

void Graph_Frequencies(int range, int scheme) {
  // 根据 range 确定行范围 from/to
  for (int row = from; row < to; row++) {
    int freq = max(Frequencies_One[row], Frequencies_Two[row]); // 取双声道最大值
    int numCol = freq / 204;  // 1023/204≈5 列
    if (numCol > 5) numCol = 5;
    
    for (int col = 0; col < numCol; col++) {
      uint32_t rgbcolor;
      // 三种配色方案:MAGNITUDE_HUE, MAGNITUDE_HUE_2, HSV_COLOR_WHEEL
      // 使用 HSV 色环实现平滑过渡
      static uint16_t hue = 0;
      hue += 200;
      rgbcolor = matrix.ColorHSV(hue);
      matrix.setPassThruColor(rgbcolor);
      matrix.drawPixel(col, row, 0);  // 颜色由 PassThruColor 决定
      matrix.setPassThruColor();
    }
    matrix.show();
  }
}

步骤 5:测试与调试

上传代码,播放音乐,观察频谱响应。通过串口发送数字 0/1/2 切换配色方案。

步骤 6:封装外壳

安装侧壁、顶板、加强筋、音频面板插座,最终形成成品外观。可选:在侧壁开孔安装面板音频插座、按钮开关;顶板轻微打磨作漫射板,光效更柔和。

进阶扩展想法

  1. 面板安装音频插座,内部走线更整洁
  2. 增加更多配色/动画模式
  3. 添加按钮切换频段范围 (BASS/MID/TREBLE/ALL)
  4. 第二个按钮切换配色方案
  5. 使用阶梯钻在亚克力上开孔安装开关/插座
  6. 顶板打磨做漫射面

制造工艺

  1. K30 CO₂ 传感器:室内空气质量实时监测
  2. 基于 1Sheeld 与 Arduino 的盲聋人士沟通辅助系统
  3. 智能存钱罐:Arduino Nano 控制硬币识别器实现余额显示
  4. 用 Arduino Nano 与 MAX7219 制作 24×16 LED Pong 游戏机
  5. Arduino 音频频率检测:基于 FFT 测量最响亮声音峰值
  6. Arduino + HC-05 蓝牙控制 LED:MIT App Inventor 手机 App 开发全攻略
  7. DFRobot 电容指纹传感器 (ID809) 接入 Arduino/ESP8266 完整教程
  8. Arduino UNO 与 DFPlayer Mini 播放音频完整指南
  9. 让大嘴鲈鱼玩具随音频起舞:分步制作指南
  10. Arduino RGB LED调色器:三电位器混色入门项目
  11. Arduino Uno驱动MAX7219级联8×8 LED矩阵:从入门到动画显示
  12. Arduino UNO + 以太网盾板实现低成本太阳辐射测量仪(热电堆原理)