Arduino Audio-Frequenz-Detektor – Lauteste Schallpeaks mit hochsensiblem Modul messen
Benötigte Komponenten
| Arduino UNO | × | 1 |
| DEVMO High Sensitivity Sound Detection Module | × | 1 |
| Steckbrett (Full Size) | × | 1 |
| Computer | × | 1 |
| USB-A auf B Kabel | × | 1 |
| Jumper-Wires | × | 1 |
Funktionsweise
Das analoge Audiosignal des Schallmoduls wird an Pin A0 des Arduino eingespeist. Der Arduino sampelt und quantisiert das Signal (Digitalisierung). Anschließend wird eine Fast Fourier Transform (FFT) auf den digitalisierten Daten durchgeführt. Die FFT wandelt die Daten aus dem Zeitbereich in den Frequenzbereich. Die Frequenz mit der höchsten Amplitude (Major Peak) wird ermittelt und über den Serial Monitor ausgegeben.
Verwendet wird die Bibliothek arduinoFFT.h (vorher in der Arduino IDE installieren).
Code
/* AudioFrequencyDetector v1.0
Author: Clyde A. Lettsome, PhD, PE, MEM
Lizenz: GPL v3
Mehr Infos: https://clydelettsome.com/blog/2019/12/18/my-weekend-project-audio-frequency-detector-using-an-arduino/
*/
#include "arduinoFFT.h"
#define SAMPLES 128 // Muss Potenz von 2 sein, max 128 für Arduino Uno
#define SAMPLING_FREQUENCY 2048 // Hz, nach Nyquist: 2x höchste erwartete Frequenz
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)); // Periode in µs
}
void loop() {
// Sampling
for (int i = 0; i < SAMPLES; i++) {
microSeconds = micros();
vReal[i] = analogRead(0); // A0
vImag[i] = 0;
while (micros() < (microSeconds + samplingPeriod)) {
// warten bis nächster Sample-Zeitpunkt
}
}
// FFT
FFT.Windowing(vReal, SAMPLES, FFT_WIN_TYP_HAMMING, FFT_FORWARD);
FFT.Compute(vReal, vImag, SAMPLES, FFT_FORWARD);
FFT.ComplexToMagnitude(vReal, vImag, SAMPLES);
// Peak finden & ausgeben
double peak = FFT.MajorPeak(vReal, SAMPLES, SAMPLING_FREQUENCY);
Serial.println(peak); // dominante Frequenz in Hz
while (1); // einmalig ausführen, Reset nötig für neuen Messwert
}
Schaltplan
Das Sound-Modul: VCC → 5V, GND → GND, OUT (analog) → A0. Optional: Digitaler Ausgang des Moduls (Schwellwert) an einen Digitalpin.
Hinweise
- Die Abtastrate von 2048 Hz erlaubt Frequenzerkennung bis ca. 1024 Hz (Nyquist).
- Für höhere Frequenzen muss SAMPLING_FREQUENCY erhöht und SAMPLES ggf. angepasst werden (Speicher beachten).
- Das Modul verfügt über einen einstellbaren Schwellwert (Potentiometer) für den digitalen Ausgang.
Herstellungsprozess
- Monitor-Ambilight selbst bauen mit Arduino Nano & WS2812B LEDs
- Klassisches Pong-Spiel auf Arduino UNO mit OLED-Display bauen – Schritt-für-Schritt-Tutorial
- Selbstbau-Tamagotchi: Digitales Haustier mit Arduino
- Audio-Wiedergabe mit Arduino UNO und DFPlayer Mini – Schritt-für-Schritt-Anleitung
- Intelligenter kabelloser Lichtschalter-Controller: Arduino-basierter Fernschalter-Manipulator
- Arduino Tic Tac Toe mit MAX7219 LED-Matrix und Karton-Gehäuse
- Intelligente, bewegungsaktivierte Wasserpistole mit Arduino Nano
- Zuverlässigen Arduino-Countdown-Timer mit SparkFun 7-Segment-Display bauen
- Arduino-Sonnenblume: Elektronischer Sonnen-Tracker selbst bauen
- RC Porsche selbst bauen: Arduino-Schritt-für-Schritt-Anleitung