32 频段 Arduino 音频频谱分析仪:线性与伪对数双模式
零部件与物料
| 零部件 | 数量 |
|---|---|
| Arduino Nano R3 | 1 |
| 10kΩ 电阻 | 1 |
| 100kΩ 电阻 | 2 |
| 4.75kΩ 电阻 | 3 |
| 跳线 | 1套 |
| 面包板 | 1 |
| USB-A 转 Mini-USB 线 | 1 |
| 轻触开关(顶按) | 1 |
| 36Pin 单排公排针 | 1 |
所需工具
- 电烙铁
软件与在线服务
- Arduino IDE
项目简介
作者首个 Arduino 音频电子项目。参考 Shajeeb 的音频可视化器,扩展为 32 频段线性模式与 11 频段伪对数模式。在 Excel 建立自定义对数映射表烧录固件,按键切换显示模式,适合表演或实验现场切换。
欢迎魔改固件/硬件适配你的创意项目。
源代码
32_Band_LED_Spectrum_Analyzer-009.ino
// Modified by Christian Suryanto, based on (c) 2019 Shajeeb TM // HAZI TECH
#include <arduinoFFT.h>
#include <MD_MAX72xx.h>
#include <SPI.h>
#include <EEPROM.h>
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define CLK_PIN 13
#define DATA_PIN 11
#define CS_PIN 10
#define SAMPLES 64
#define MAX_DEVICES 4
#define xres 32
#define yres 8
#define PREV 0xFF02FD
#define NEXT 0xFFC23D
#define PWR 0xFFA25D
int audio_response = 35;
double vReal[SAMPLES];
double vImag[SAMPLES];
char data_avgs[xres];
int yvalue, displaycolumn, displayvalue;
int peaks[xres];
const int buttonPin = 6;
int state = HIGH, previousState = LOW, displaymode;
unsigned long lastDebounceTime = 0, debounceDelay = 50;
int MY_ARRAY[] = {0, 128, 192, 224, 240, 248, 252, 254, 255};
bool EQ_ON = true;
byte eq1[32] = {40, 45, 50, 60, 65, 70, 75, 95, 110, 110, 110, 110, 110, 110, 110, 110, 130, 130, 130, 130, 130, 130, 130, 130, 145, 155, 170, 180, 215, 220, 245, 255};
byte eq2[11] = {40, 70, 75, 110, 110, 140, 145, 220, 220, 230, 250};
MD_MAX72XX mx = MD_MAX72XX(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
arduinoFFT FFT = arduinoFFT();
void setup() {
EEPROM.update(1,1);
displaymode = EEPROM.read(1);
ADCSRA = 0b11100101; // ADC 预分频 32,自由运行
ADMUX = 0b00000000; // 参考 AVCC,通道 0
pinMode(buttonPin, INPUT);
mx.begin();
mx.control(MD_MAX72XX::INTENSITY, 0);
delay(50);
}
void loop() {
int numData; double rSum;
for (int i=0; i peaks[i]) peaks[i] = yvalue;
yvalue = peaks[i];
displayvalue = MY_ARRAY[yvalue];
if (displaymode == 1) {
displaycolumn = 31 - i;
mx.setColumn(displaycolumn, displayvalue);
} else {
displaycolumn = 31 - (3*i);
mx.setColumn(displaycolumn-1, displayvalue);
mx.setColumn(displaycolumn, displayvalue);
}
}
displayModeChange();
}
void displayModeChange() {
int reading = digitalRead(buttonPin);
if (reading == HIGH && previousState == LOW && millis() - lastDebounceTime > debounceDelay) {
if (displaymode == 1) {
displaymode = 2; mx.clear(); delay(200); EEPROM.update(1,2);
} else {
displaymode = 1; mx.clear(); delay(200); EEPROM.update(1,1);
}
lastDebounceTime = millis();
}
previousState = reading;
}
原理图
制造工艺
- 智能缺水报警器 – DIY植物土壤湿度监测装置
- 意大利语单词时钟:Arduino Nano + NeoPixel 144 灯珠 + LCD + RTC 打造
- 仅用 3 根模拟口驱动 4×3 矩阵键盘:电阻分压识别键值
- 基于Arduino MKR Fox 1200构建可靠Sigfox千瓦时电表
- 蓝牙温度监测仪:Arduino Nano + NTC 热敏电阻 + HC-06 无线传输
- DIY 自动量程电容表 (10 pF – 10 μF) – Arduino Nano 简易制作
- 非接触手势门锁:APDS-9960 + Arduino 实现安全门禁
- Arduino Nano 多功能伴侣套件 —— 电阻/电容测量、二极管测试、RTC时钟一体化
- Arduino Micro/Leonardo USB MIDI 适配器套件 —— 完整元件清单与固件指南
- 为Arduino构建隔离模拟输入电路
- RGB 32 频段音频频谱可视化器:Arduino Nano 驱动 WS2812B 8×32 LED 矩阵
- Arduino UNO 精准视觉反应时间测试仪