Home / Tutorial Arduino / Proyek Arduino : Pengukuran Tingkat Suara

Proyek Arduino : Pengukuran Tingkat Suara

kelas-fisika.com – Proyek Arduino : Pengukuran Tingkat Suara

Panduan ini menunjukkan cara menghubungkan Amplifier Mikrofon Adafruit Electret (Mic Max9814) untuk mengukur tingkat suara dengan Arduino . Mikrofon Amplifier pasangan Mikrofon Kapsul Electret dengan Penguat Operasional MAX4466 dioptimalkan untuk digunakan dalam aplikasi mikrofon pre-amplifier. Tegangan suplai fleksibel dan gain yang dapat disesuaikan membuat modul ini dapat beradaptasi dengan berbagai aplikasi audio.

Wiring:

Amplifier hanya memiliki 3 koneksi, jadi kabelnya sederhana:

  • GND -> GND
  • VCC -> 3.3V
  • OUT -> AIN0

VCC dapat berada di mana saja dari 2,4-5 VDC. Untuk kinerja terbaik, kami menggunakan pin 3.3v karena ini adalah suplai “paling tenang” di Arduino.

Output akan memiliki bias DC VCC / 2 sehingga ketika sangat tenang, tegangan akan menjadi VCC / 2 stabil (1,65v).

Pengukuran Tingkat Suara

Sinyal Audio dari output amplifier adalah tegangan yang bervariasi. Untuk mengukur tingkat suara, kita perlu melakukan beberapa pengukuran untuk menemukan luasan minimum dan maksimum atau “peak to peak amplitude” dari sinyal.

Dalam contoh di bawah ini, kami memilih jendela contoh 50 milidetik. Itu cukup untuk mengukur tingkat suara frekuensi serendah 20 Hz – batas bawah pendengaran manusia.

Setelah menemukan sampel minimum dan maksimum, kami menghitung selisihnya dan mengonversinya menjadi volt dan hasilnya dicetak ke monitor serial.

/****************************************
Example Sound Level Sketch for the 
Adafruit Microphone Amplifier
****************************************/
const int sampleWindow = 50; // Sample window width in mS (50 mS = 20Hz)
unsigned int sample;
void setup() 
{
 Serial.begin(9600);
}

void loop() 
{
 unsigned long startMillis= millis(); // Start of sample window
 unsigned int peakToPeak = 0; // peak-to-peak level
 unsigned int signalMax = 0;
 unsigned int signalMin = 1024;
// collect data for 50 mS
 while (millis() - startMillis < sampleWindow)
 {
 sample = analogRead(0);
 if (sample < 1024) // toss out spurious readings
 {
 if (sample > signalMax)
 {
 signalMax = sample; // save just the max levels
 }
 else if (sample < signalMin)
 {
 signalMin = sample; // save just the min levels
 }
 }
 }
 peakToPeak = signalMax - signalMin; // max - min = peak-peak amplitude
 double volts = (peakToPeak * 5.0) / 1024; // convert to volts
Serial.println(volts);
}

OK, jadi itu tidak terlalu menarik. Apa lagi yang bisa Anda lakukan dengan itu?

Scrolling Sound Level Meter

Jadi sekarang kita akan mengambil pengukuran puncak-ke-puncak dan menggunakannya untuk menggerakkan Matriks LED Bicolor untuk menampilkan tingkat suara. Untuk membuatnya lebih menarik, kami akan menggulir layar sehingga 8 pengukuran terakhir digambarkan secara real-time.

Untuk melakukan ini, Anda perlu mengunduh Adafruit GFX Library download dan LED Backpack Library download. library wire sudah termasuk dalam instalasi Arduino IDE.

Assemble the Matrix

Pasang Matriks

  • ‘+’ -> 5v
  • ‘-‘ -> GND
  • D -> SDA (Pin Analog 4)
  • C -> SCL (Pin Analog 5)

Unggah Kode

Tempel kode di bawah ini ke dalam Arduino IDE dan unggah. Bicaralah dengan suara normal sekitar 6-8 inci dari mikrofon dan layar matriks meteran suara harus mulai bergulir.

/****************************************
Scrolling Sound Meter Sketch for the 
Adafruit Microphone Amplifier
****************************************/

#include <Wire.h>
#include "Adafruit_LEDBackpack.h"
#include "Adafruit_GFX.h"

// Include the Matrix code for display
Adafruit_BicolorMatrix matrix = Adafruit_BicolorMatrix();

const int maxScale = 8;
const int redZone = 5;

const int sampleWindow = 50; // Sample window width in mS (50 mS = 20Hz)
unsigned int sample;

void setup() 
{
 Serial.begin(9600);

matrix.begin(0x70); // pass in the address
}


void loop() 
{
 unsigned long startMillis= millis(); // Start of sample window
 unsigned int peakToPeak = 0; // peak-to-peak level

unsigned int signalMax = 0;
 unsigned int signalMin = 1024;

while (millis() - startMillis < sampleWindow)
 {
 sample = analogRead(0); 
 if (sample < 1024) // toss out spurious readings
 {
 if (sample > signalMax)
 {
 signalMax = sample; // save just the max levels
 }
 else if (sample < signalMin)
 {
 signalMin = sample; // save just the min levels
 }
 }
 }
 peakToPeak = signalMax - signalMin;

// map 1v p-p level to the max scale of the display
 int displayPeak = map(peakToPeak, 0, 1023, 0, maxScale);

// Update the display:
 for (int i = 0; i < 7; i++) // shift the display left
 {
 matrix.displaybuffer[i] = matrix.displaybuffer[i+1];
 }

// draw the new sample
 for (int i = 0; i <= maxScale; i++)
 {
 if (i >= displayPeak) // blank these pixels
 {
 matrix.drawPixel(i, 7, 0);
 }
 else if (i < redZone) // draw in green
 {
 matrix.drawPixel(i, 7, LED_GREEN);
 }
 else // Red Alert! Red Alert!
 {
 matrix.drawPixel(i, 7, LED_RED);
 }
 }
 matrix.writeDisplay(); // write the changes we just made to the display
}

Sesuaikan Gain

Meskipun penguat mampu sinyal rel-ke-rel (3.3v dalam kasus ini), kode memetakan sinyal puncak-ke-puncak 1v ke skala penuh layar.

Ini dapat diubah dalam kode. Atau Anda dapat menyesuaikan gain pemangkas-penguat amplifier dengan obeng lurus-kecil. Penguat gain disesuaikan dari 25x ke 125x.

Selamat Mencoba

About kelas-fisika

Check Also

Proyek Arduino Pilah Warna

kelas-fisika.com – Proyek Arduino Pilah Warna Dalam artikel ini kelas-fisika akan menunjukkan bagaimana Anda dapat membuat …

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Powered by themekiller.com