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

Arduino 音频频率检测:基于 FFT 测量最响亮声音峰值

所需元件

原理简介

模块模拟输出接 A0,Arduino 以 2048 Hz 采样率采集 128 点样本,调用 arduinoFFT 库做汉宁窗 FFT,得到幅度谱,再用 MajorPeak() 找出主频,通过串口打印。

接线

模块 VCC→5V,GND→GND,OUT→A0。

完整代码

#include "arduinoFFT.h"
#define SAMPLES 128
#define SAMPLING_FREQUENCY 2048

arduinoFFT FFT = arduinoFFT();
unsigned int samplingPeriod;
unsigned long microSeconds;
double vReal[SAMPLES];
double vImag[SAMPLES];

void setup() {
  Serial.begin(115200);
  samplingPeriod = round(1000000 * (1.0 / SAMPLING_FREQUENCY));
}

void loop() {
  // 采样
  for (int i = 0; i < SAMPLES; i++) {
    microSeconds = micros();
    vReal[i] = analogRead(0);
    vImag[i] = 0;
    while (micros() < (microSeconds + samplingPeriod));
  }

  // FFT
  FFT.Windowing(vReal, SAMPLES, FFT_WIN_TYP_HAMMING, FFT_FORWARD);
  FFT.Compute(vReal, vImag, SAMPLES, FFT_FORWARD);
  FFT.ComplexToMagnitude(vReal, vImag, SAMPLES);

  // 主频
  double peak = FFT.MajorPeak(vReal, SAMPLES, SAMPLING_FREQUENCY);
  Serial.println(peak);

  while (1); // 单次运行,复位后重新开始
}

使用提示

制造工艺

  1. 用 Arduino 打造绚丽显示器 Ambilight 系统
  2. 用 Arduino UNO 和 OLED 显示屏制作经典 Pong 游戏:分步教程
  3. 自制 Arduino 电子宠物「Tamaguino」:复刻经典 Tamagotchi 全攻略
  4. Arduino UNO 与 DFPlayer Mini 播放音频完整指南
  5. 智能无线开关控制器:Arduino + 433MHz 远程操控墙壁开关
  6. Arduino 井字棋游戏:MAX7219 点阵屏 + 纸板外壳 DIY
  7. 基于 Arduino Nano 的智能运动感应水枪
  8. 使用 SparkFun 7 段数码管构建可靠的 Arduino 倒计时器
  9. Arduino 向日葵:制作电子向日葵追踪阳光
  10. 自制 Arduino 遥控保时捷赛车:从改装底盘到手机 App 控制全攻略
  11. Arduino 合成乐音:从零实现 88 键钢琴全音域
  12. 使用 Arduino UNO 和 SR04 超声波传感器构建超声波测距仪