Mikrofon Listrik
Electret adalah dielektrik yang bermuatan kuasi-permanen. Dibuat dengan cara memanaskan bahan keramik, menempatkannya dalam medan magnet kemudian dibiarkan dingin saat masih berada di dalam medan magnet. Ini adalah setara elektrostatik dari magnet permanen. Dalam mikrofon electret sepotong bahan ini digunakan sebagai bagian dari dielektrik kapasitor di mana diafragma mikrofon membentuk satu pelat. Tekanan suara menggerakkan diafragma. Pergerakan pelat memvariasikan kapasitansi sesuai dengan tekanan suara. Mengingat muatan tetap built-in dari dielektrik, tegangan kapasitor juga akan bervariasi. Kapasitor electret terhubung ke input penguat FET bawaan. Mikrofon electret berukuran kecil, memiliki sensitivitas yang sangat baik, respons frekuensi yang luas, dan umumnya berbiaya sangat rendah.
Penguat Mikrofon MAX9814
MAX9814 adalah penguat mikrofon dengan kontrol penguatan otomatis (AGC) dan bias mikrofon dengan noise rendah, serta memiliki beberapa opsi yang dapat Anda konfigurasikan dengan breakout.
Modul MAX9814 memiliki tiga pengaturan amplifier (40dB, 50dB, 60dB). Standarnya adalah 60dB, tetapi dapat diatur ke 40dB atau 50dB dengan melakukan jumper pin Gain ke VCC atau ground.
Bias mikrofon kebisingan rendah internal 1.25V, 2Vpp. Output dari amp adalah sekitar 2Vpp maks pada bias 1,25V DC, sehingga dapat dengan mudah digunakan dengan konverter Analog/Digital apa pun yang memiliki input hingga 3,3V.
Rasio Attack/Release juga dapat dimodifikasi, dari default 1:4000 menjadi 1:2000 atau 1:500.
Untuk menghubungkan langsung ke Line Input, Anda memerlukan kapasitor pemblokiran / kapasitor kopling untuk memblokir komponen DC. Anda dapat menggunakan kapasitor pemblokiran secara seri di atas 1uF, tergantung pada sistem Anda, jika ragu coba dari 33 uF hingga 100uF. Rangkaian kopling memungkinkan sinyal AC mengalir dari satu bagian ke bagian lain sambil memblokir komponen DC. Di sirkuit audio, ini dilakukan untuk mencegah komponen DC mendistorsi output audio. Keefektifan kapasitor kopling bergantung pada beragam parameter yang bergantung pada frekuensi termasuk rugi-rugi penyisipan, resistansi seri ekivalen, dan frekuensi resonansi seri.
Catu daya:2,7V hingga 5,5V
Sensitivitas
Sensitivitas , rasio tegangan keluaran analog atau nilai keluaran digital terhadap tekanan masukan, adalah spesifikasi utama mikrofon apa pun. Pemetaan unit dalam domain akustik ke unit dalam domain listrik menentukan besarnya sinyal keluaran mikrofon, dengan masukan yang diketahui.
Sensitivitas mikrofon adalah respons listrik pada outputnya terhadap input akustik standar yang diberikan. Sinyal input referensi standar untuk pengukuran sensitivitas mikrofon adalah gelombang sinus 1 kHz pada tingkat tekanan suara (SPL) 94 dB, atau 1 pascal (Pa, pengukuran tekanan). Mikrofon dengan nilai sensitivitas yang lebih tinggi memiliki tingkat output yang lebih tinggi untuk input akustik tetap daripada mikrofon dengan nilai sensitivitas yang lebih rendah. Sensitivitas mikrofon dalam desibel (dB) biasanya berupa angka negatif; oleh karena itu, sensitivitas yang lebih tinggi adalah nilai absolut yang lebih kecil.
Untuk mikrofon analog, sensitivitas biasanya ditentukan dalam satuan dBV, yaitu desibel dengan mengacu pada 1,0 V rms.
Tingkat referensi dan Respons Frekuensi
Respons frekuensi mikrofon menggambarkan tingkat outputnya di seluruh spektrum frekuensi. Batas frekuensi tinggi dan rendah digambarkan sebagai titik di mana respons mikrofon 3 dB di bawah tingkat output referensi pada 1 kHz. Tingkat referensi pada 1 kHz biasanya dinormalisasi menjadi 0 dB.
Layar OLED I2C 0,91 inci 128 x 32 Piksel
Ini adalah layar kecil, hanya sekitar 1" diagonal. Ini terbuat dari 128x32 piksel OLED putih individu, masing-masing dihidupkan atau dimatikan oleh chip pengontrol. Tidak diperlukan lampu latar. Ini mengurangi daya yang dibutuhkan untuk menjalankan OLED.
Model yang kami gunakan di sini hanya memiliki empat pin dan berkomunikasi dengan Arduino menggunakan protokol komunikasi I2C. Model ini tidak memiliki pin RESET. Anda hanya perlu menyambungkan ke pin Arduino Uno I2C:
- Arduino Nano:SDA (A4); SCL (A5);
Untuk mengontrol tampilan OLED, Anda memerlukan adafruit_SSD1306.h dan adafruit_GFX.h library. Ikuti petunjuk selanjutnya untuk menginstal perpustakaan tersebut.
Kami menggunakan perpustakaan Adafruit. Ingat Anda dapat membeli sesuatu dari Adafruit untuk mendukung mereka.
Langkah selanjutnya
Arduino Nano 33 BLE menggunakan kaleng yang lebih baik untuk membaca analog. Versi berikutnya saya akan menggunakan input FFT dan Analog yang dioptimalkan untuk nrf52840.
Kode
- Visualizer Spektrum Suara untuk Arduino Nano 33 BLE
Visualizer Spektrum Suara untuk Arduino Nano 33 BLEArduino
Visualizer Spektrum Suara untuk Arduino Nano 33 BLE
menggunakan arduinoFFT https://github.com/kosme/arduinoFFT
menggunakan Adafruit_GFX https://github.com/adafruit/Adafruit-GFX-Library
menggunakan Adafruit_SSD1306 https://github.com/adafruit/Adafruit_SSD1306/* Sound Spectrum Visualizer untuk Arduino Nano 33 BLE Visualizer suara berbasis Arduino @author Enrique Albertos Persyaratan perangkat keras:- Papan yang kompatibel dengan Arduino atau Arduino. - Layar ssd1306 oled I2C 128x32 - Amplifier Mikrofon Electret dengan max9814 - Opsional:baterai untuk penggunaan portabel (daya lain melalui USB) Persyaratan perangkat lunak:- arduinoFFT https://github.com/kosme/arduinoFFT - Adafruit_GFX https://github.com /adafruit/Adafruit-GFX-Library - Adafruit_SSD1306 https://github.com/adafruit/Adafruit_SSD1306 Koneksi:- Mic GAIN:* VCC ke mic GAIN untuk 40dB * GND ke mic GAIN untuk 50dB * Floating mic GAIN untuk 60dB - Analog pin 0 ke output amp mic - +3.3V, GND, SDA (atau analog 4) dan SCL (analog 5) ke I2C SSD1306 @menggunakan arduinoFFT https://github.com/kosme/arduinoFFT @menggunakan Adafruit_GFX https://github. com/adafruit/Adafruit-GFX-Library @uses Adafruit_SSD1306 https://github.com/adafruit/Adafruit_SSD1306 Program ini adalah perangkat lunak gratis:Anda dapat mendistribusikan ulang dan/atau memodifikasinya di bawah persyaratan Lisensi Publik Umum GNU yang diterbitkan oleh Free Software Foundation, baik versi 3 dari Lisensi, atau (sesuai pilihan Anda) versi yang lebih baru. Program ini disebarluaskan dengan harapan dapat bermanfaat, tetapi TANPA JAMINAN APAPUN; bahkan tanpa jaminan tersirat tentang KELAYAKAN DIPERDAGANGKAN atau KESESUAIAN UNTUK TUJUAN TERTENTU. Lihat Lisensi Publik Umum GNU untuk lebih jelasnya.*/#include "arduinoFFT.h"#include #include #define SAMPLES 1024 // power of 2#define SAMPLING_FREQ 24000 // 12 kHz Fmax =sampleF /2 #menentukan AMPLITUDE 100 // sensitivitas#menentukan FREQUENCY_BANDS 14#menentukan SCREEN_WIDTH 128 // Lebar tampilan OLED, dalam piksel#menentukan SCREEN_HEIGHT 32 // Tinggi tampilan OLED, dalam piksel#menentukan BARWIDTH 11#menentukan BARS 11#menentukan ANALOG_PIN A0// Deklarasi untuk layar SSD1306 yang terhubung ke I2C (SDA, pin SCL)#define OLED_RESET -1 // Reset pin # (atau -1 jika berbagi pin reset Arduino)Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); double vImag[SAMPLES];double vReal[SAMPLES];unsigned long sampling_period_us;arduinoFFT fft =arduinoFFT(vReal, vImag, SAMPLES, SAMPLING_FREQ);// sesuaikan referensi untuk menghilangkan kebisingan latar belakang referensi noisefloat =log10(50.0);double coutoffFrequencies[ FREQUENCY_BANDS];void setup() { // SSD1306_SWITCHCAPVCC =menghasilkan dis putar tegangan dari 3.3V secara internal if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Alamat 0x3C untuk 128x32 untuk (;;); // Jangan lanjutkan, loop selamanya } // Atur tampilan display.clearDisplay(); tampilan.display(); tampilan.setRotation(0); display.invertDisplay(salah); sampling_period_us =(1.0 / SAMPLING_FREQ ) * pow(10.0, 6); // Hitung frekuensi cuttoff, buat basis skala logaritmik basePOt double basePot =pow(SAMPLING_FREQ / 2.0, 1.0 / FREQUENCY_BANDS); coutoffFrequencies[0] =basePot; for (int i =1; i max[index] ) { max[index] =vReal[i]; } if (hz> coutoffFrequencies[indeks]) { median[indeks] =jumlah / hitungan; jumlah =0,0; hitung =0; indeks++; maks[indeks] =0; median[indeks] =0; } hz +=hzPerSampel; } // menghitung median dan maksimum per pita frekuensi jika ( sum> 0.0) { median[index] =sum / count; if (median[indeks]> maxinband) { maxinband =median[indeks]; } } batang int =0; for (int i =FREQUENCY_BANDS - 1; i>=3; i--) { int newHeight =0; int maks.baru =0; // menghitung desibel sebenarnya jika (median[i]> 0 &&max[i]> 0 ) { tinggi baru =20.0 * (log10(median[i] ) - referensi); newMax =20.0 * (log10(max[i] ) - referensi); } // sesuaikan level minimum dan maksimum if (newHeight <0 || newMax <0) { newHeight =1; baruMaks =1; } if (newHeight>=SCREEN_HEIGHT - 2) { newHeight =SCREEN_HEIGHT - 3; } if (newMax>=SCREEN_HEIGHT - 2) { newMax =SCREEN_HEIGHT - 3; } int barX =bar * BARWIDTH + 5; // hapus median level lama if (oldHeight[i]> newHeight) { display.fillRect(barX, newHeight + 1, 7, oldHeight[i], SSD1306_BLACK); } // hapus level maks lama if ( oldMax[i]> newHeight) { for (int j =oldMax[i]; j> newHeight; j -=2) { display.drawFastHLine(barX , j, 7, SSD1306_BLACK); } } // melukis level maks baru untuk (int j =newMax; j> newHeight; j -=2) { display.drawFastHLine(barX , j, 7, SSD1306_WHITE); } // melukis tampilan median level baru.fillRect(barX , 1, 7, newHeight, SSD1306_WHITE); oldMax[i] =newMax; oldHeight[i] =tinggi baru; batang++; } display.drawFastHLine(0 , SCREEN_HEIGHT - 1, SCREEN_WIDTH, SSD1306_WHITE); display.display();}
Skema
soundspectrumvisualizer_qLzRsVPVlc.fzz