Detektor Frekuensi Audio Arduino – Ukur Puncak Suara Terkeras dengan Modul Sensitivitas Tinggi
Komponen dan perlengkapan
Arduino UNO × 1
DEVMO High Sensitivity Sound Detection Module for Arduino × 1
Solderless Breadboard Full Size × 1
Komputer × 1
USB-A to B Cable × 1
Jumper wires (generic) × 1
Tentang proyek ini
Proyek Arduino ini menampilkan frekuensi mendekat dari suara terkeras yang terdeteksi oleh modul deteksi suara. Untuk proyek ini, output analog dari detektor modul suara mengirim sinyal audio analog yang terdeteksi ke A0 Arduino Uno. Sinyal diambil sampel dan dikuantisasi (dikigitalkan). Kemudian Fast Fourier Transform (FFT) dilakukan pada data yang telah dikigitalkan. FFT mengonversi data digital dari hasil domain waktu diskrit mendekat. Frekuensi maksimum dari hasil domain waktu diskrit mendekat kemudian ditentukan dan ditampilkan melalui Arduino IDE Serial Monitor.
Untuk informasi lebih lanjut tentang proyek ini, kunjungi tautan ini: More Information
Lihat proyek lanjutan saya dengan mengklik [tautan ini]
Kode
- AudioFrequencyDetectorV1-0.ino
AudioFrequencyDetectorV1-0.inoArduino
Kode/sketsa ini menampilkan frekuensi mendekat dari suara terkeras yang terdeteksi oleh modul deteksi suara.
/* File/Sketch Name: AudioFrequencyDetector Version No.: v1.0 Created 12 Desember, 2019 Original Author: Clyde A. Lettsome, PhD, PE, MEM Description: Kode/sketsa ini menampilkan frekuensi mendekat dari suara terkeras yang terdeteksi oleh modul deteksi suara. Untuk proyek ini, output analog dari detektor modul suara mengirim sinyal audio analog yang terdeteksi ke A0 Arduino Uno. Sinyal diambil sampel dan dikuantisasi (dikigitalkan). Kemudian Fast Fourier Transform (FFT) dilakukan pada data yang telah dikigitalkan. FFT mengonversi data digital dari hasil domain waktu diskrit mendekat. Frekuensi maksimum dari hasil domain waktu diskrit mendekat kemudian ditentukan dan ditampilkan melalui Arduino IDE Serial Monitor. Catatan: Pustaka arduinoFFT.h perlu ditambahkan ke Arduino IDE sebelum mengompilasi dan mengunggah skrip/sketsa ini ke Arduino. Lisensi: Program ini adalah perangkat lunak gratis; Anda dapat mendistribusikannya dan/atau memodifikasinya berdasarkan ketentuan GNU General Public License (GPL) versi 3, atau versi lebih baru pilihan Anda, yang diterbitkan oleh Free Software Foundation. Catatan: Hak Cipta (c) 2019 oleh C. A. Lettsome Services, LLC Untuk informasi lebih lanjut kunjungi https://clydelettsome.com/blog/2019/12/18/my-weekend-project-audio-frequency-detector-using-an-arduino/ */ #include "arduinoFFT.h" #define SAMPLES 128 //SAMPLES-pt FFT. Harus berupa bilangan basis 2. Maks 128 untuk Arduino Uno. #define SAMPLING_FREQUENCY 2048 //Ts = Berdasarkan Nyquist, harus 2 kali frekuensi tertinggi yang diharapkan. arduinoFFT FFT = arduinoFFT(); unsigned int samplingPeriod; unsigned long microSeconds; double vReal[SAMPLES]; //buat vektor ukuran SAMPLES untuk menyimpan nilai real double vImag[SAMPLES]; //buat vektor ukuran SAMPLES untuk menyimpan nilai imajiner void setup() { Serial.begin(115200); //Kecepatan baud untuk Serial Monitor samplingPeriod = round(1000000*(1.0/SAMPLING_FREQUENCY)); //Periode dalam mikrosecond } void loop() { /*Ambil SAMPLES kali*/ for(int i=0; i<SAMPLES; i++) { microSeconds = micros(); //Mengembalikan jumlah mikrosecond sejak papan Arduino mulai menjalankan skrip saat ini. vReal[i] = analogRead(0); //Membaca nilai dari pin analog 0 (A0), mengkuantisasi dan menyimpannya sebagai istilah real. vImag[i] = 0; //Membuat istilah imajiner selalu 0 /*waktu tunggal yang tersisa di antara sampel jika diperlukan*/ while(micros() < (microSeconds + samplingPeriod)) { //jangan lakukan apa-apa } } /*Lakukan FFT pada sampel*/ FFT.Windowing(vReal, SAMPLES, FFT_WIN_TYP_HAMMING, FFT_FORWARD); FFT.Compute(vReal, vImag, SAMPLES, FFT_FORWARD); FFT.ComplexToMagnitude(vReal, vImag, SAMPLES); /*Temukan frekuensi puncak dan cetak puncak*/ double peak = FFT.MajorPeak(vReal, SAMPLES, SAMPLING_FREQUENCY); Serial.println(peak); //Cetak frekuensi paling dominan. /*Skrip berhenti di sini. Reset perangkat keras diperlukan.*/ while (1); //lakukan sekali } Skema
Proyek Arduino ini menampilkan frekuensi mendekat dari suara terkeras yang terdeteksi oleh modul deteksi suara.