Detector de frecuencia de audio con Arduino – Mide los picos de sonido más intensos
Componentes y materiales
- 1 × Arduino UNO
- 1 × Módulo detección sonido alta sensibilidad DEVMO
- 1 × Protoboard tamaño completo
- 1 × Cable USB-A a USB-B
- 1 × Computadora
- Cables jumper
Sobre el proyecto
Este proyecto muestra la frecuencia aproximada del sonido más fuerte detectado por el módulo. La salida analógica del módulo se conecta al pin A0 del Arduino. La señal se muestrea y cuantifica (digitaliza) a 2048 Hz (frecuencia de Nyquist para detectar hasta ~1 kHz). Sobre las 128 muestras se aplica una Transformada Rápida de Fourier (FFT) mediante la librería arduinoFFT. El resultado en el dominio de la frecuencia revela el componente dominante, que se imprime por el Monitor Serie.
Nota: La librería arduinoFFT.h debe instalarse desde el Gestor de Librerías del IDE antes de compilar.
Código
/* AudioFrequencyDetector v1.0
Autor: Clyde A. Lettsome, PhD, PE, MEM
Licencia: GPL v3
Más info: https://clydelettsome.com/blog/2019/12/18/my-weekend-project-audio-frequency-detector-using-an-arduino/
*/
#include "arduinoFFT.h"
#define SAMPLES 128 // Debe ser potencia de 2. Máx 128 en Uno.
#define SAMPLING_FREQUENCY 2048 // Hz (2 × frecuencia máxima esperada)
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)); // período en µs
}
void loop() {
// 1. Muestreo
for (int i = 0; i < SAMPLES; i++) {
microSeconds = micros();
vReal[i] = analogRead(A0); // lectura y cuantificación
vImag[i] = 0;
while (micros() < (microSeconds + samplingPeriod)) {
// espera activa para cadencia exacta
}
}
// 2. FFT
FFT.Windowing(vReal, SAMPLES, FFT_WIN_TYP_HAMMING, FFT_FORWARD);
FFT.Compute(vReal, vImag, SAMPLES, FFT_FORWARD);
FFT.ComplexToMagnitude(vReal, vImag, SAMPLES);
// 3. Pico principal
double peak = FFT.MajorPeak(vReal, SAMPLES, SAMPLING_FREQUENCY);
Serial.println(peak); // frecuencia dominante en Hz
// Ejecución única (reinicio hardware para repetir)
while (1);
}
Esquema de conexiones
Salida analógica del módulo → A0. VCC del módulo → 5V (o 3.3V según módulo). GND → GND.
Proceso de manufactura
- Crea un Impresionante Sistema Ambilight para Monitor con Arduino
- Construya el clásico juego Pong en Arduino UNO con pantalla OLED: Tutorial paso a paso
- Construye tu Propio Tamagotchi con Arduino: Mascota Digital DIY
- Cómo reproducir audio con Arduino UNO y DFPlayer Mini – Guía paso a paso
- Controlador Inalámbrico Inteligente de Interruptores: Manipulador Remoto Basado en Arduino
- Tres en raya con Arduino, matriz LED MAX7219 y carcasa de cartón
- Pistola de Agua Inteligente Activada por Movimiento con Arduino Nano
- Construye un Temporizador Regresivo Fiable con Arduino y Pantalla de 7 Segmentos SparkFun
- Girasol Arduino: Construye un Girasol Electrónico que Sigue al Sol
- Construye tu Propio Coche RC Porsche con Arduino: Guía Paso a Paso
- Genera Tonos Musicales con Arduino: Guía Paso a Paso