Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

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

Herstellungsprozess

  1. Monitor-Ambilight selbst bauen mit Arduino Nano & WS2812B LEDs
  2. Klassisches Pong-Spiel auf Arduino UNO mit OLED-Display bauen – Schritt-für-Schritt-Tutorial
  3. Selbstbau-Tamagotchi: Digitales Haustier mit Arduino
  4. Audio-Wiedergabe mit Arduino UNO und DFPlayer Mini – Schritt-für-Schritt-Anleitung
  5. Intelligenter kabelloser Lichtschalter-Controller: Arduino-basierter Fernschalter-Manipulator
  6. Arduino Tic Tac Toe mit MAX7219 LED-Matrix und Karton-Gehäuse
  7. Intelligente, bewegungsaktivierte Wasserpistole mit Arduino Nano
  8. Zuverlässigen Arduino-Countdown-Timer mit SparkFun 7-Segment-Display bauen
  9. Arduino-Sonnenblume: Elektronischer Sonnen-Tracker selbst bauen
  10. RC Porsche selbst bauen: Arduino-Schritt-für-Schritt-Anleitung