Arduinoオーディオ周波数検出器 – 高感度サウンドモジュールで最大音量ピークの周波数を測定
必要な部品
- Arduino UNO ×1
- DEVMO 高感度サウンド検出モジュール ×1
- フルサイズ ブレッドボード ×1
- コンピューター ×1
- USB-A to B ケーブル ×1
- ジャンパーワイヤー(汎用) ×1
プロジェクト概要
このプロジェクトでは、サウンド検出モジュールが検知した音の中で最も大きい音のおおよその周波数を表示します。
モジュールのアナログ出力をArduino UnoのA0ピンに接続。アナログ信号をサンプリング・量子化(デジタル化)し、高速フーリエ変換(FFT)を実行。FFTにより離散時間領域のデータから周波数領域へ変換し、最大振幅を持つ周波数(ピーク周波数)を特定、シリアルモニタに出力します。
詳細情報: ブログ記事
フォローアッププロジェクト: リンク
コード
AudioFrequencyDetectorV1-0.ino
/* File/Sketch Name: AudioFrequencyDetector
Version: v1.0
Created: 12 December 2019
Author: Clyde A. Lettsome, PhD, PE, MEM
Description: サウンド検出モジュールで検知した最大音量の周波数を表示
Note: arduinoFFTライブラリが必要(ライブラリマネージャからインストール)
License: GPL v3 or later
*/
#include "arduinoFFT.h"
#define SAMPLES 128 // FFTサンプル数(2の累乗、Unoでは最大128)
#define SAMPLING_FREQUENCY 2048 // サンプリング周波数(ナイキストの定理:最高周波数の2倍以上)
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); // A0から読み取り
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);
// 1回だけ実行して停止(ハードウェアリセットで再開)
while (1);
}
回路図

※ arduinoFFT.h ライブラリをArduino IDEのライブラリマネージャから事前にインストールしてください。
製造プロセス
- Arduinoで作るモニター用Ambilightシステム:没入感アップの自作ガイド
- Arduino UNOとOLEDディスプレイでクラシックPongゲームを自作:ステップバイステップチュートリアル
- Arduinoで作る自作デジタルペット「Tamaguino」─ 3Dプリンター製ケース付き完全ガイド
- Arduino UNOとDFPlayer Miniで音声を再生する方法 - ステップバイステップガイド
- スマートワイヤレス照明スイッチコントローラー:Arduinoで物理スイッチを遠隔操作
- Arduino三目並べ:MAX7219 LEDマトリクスと段ボールケースで自作
- Arduino Nanoで作るスマートな動体検知水鉄砲
- SparkFun 7セグメントディスプレイで作る信頼性の高いArduinoカウントダウンタイマー
- Arduino向日葵:太陽を追尾する電子ヒマワリの製作
- Arduinoで自作RCポルシェカー:ステップバイステップガイド
- Arduinoで楽器演奏:音階生成のステップバイステップガイド