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

32 频段 Arduino 音频频谱分析仪:线性与伪对数双模式

零部件与物料

零部件数量
Arduino Nano R31
10kΩ 电阻1
100kΩ 电阻2
4.75kΩ 电阻3
跳线1套
面包板1
USB-A 转 Mini-USB 线1
轻触开关(顶按)1
36Pin 单排公排针1

所需工具

软件与在线服务

项目简介

作者首个 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;
}

原理图

32 频段 Arduino 音频频谱分析仪:线性与伪对数双模式

制造工艺

  1. 智能缺水报警器 – DIY植物土壤湿度监测装置
  2. 意大利语单词时钟:Arduino Nano + NeoPixel 144 灯珠 + LCD + RTC 打造
  3. 仅用 3 根模拟口驱动 4×3 矩阵键盘:电阻分压识别键值
  4. 基于Arduino MKR Fox 1200构建可靠Sigfox千瓦时电表
  5. 蓝牙温度监测仪:Arduino Nano + NTC 热敏电阻 + HC-06 无线传输
  6. DIY 自动量程电容表 (10 pF – 10 μF) – Arduino Nano 简易制作
  7. 非接触手势门锁:APDS-9960 + Arduino 实现安全门禁
  8. Arduino Nano 多功能伴侣套件 —— 电阻/电容测量、二极管测试、RTC时钟一体化
  9. Arduino Micro/Leonardo USB MIDI 适配器套件 —— 完整元件清单与固件指南
  10. 为Arduino构建隔离模拟输入电路
  11. RGB 32 频段音频频谱可视化器:Arduino Nano 驱动 WS2812B 8×32 LED 矩阵
  12. Arduino UNO 精准视觉反应时间测试仪