概述
本指南介紹了如何使用Arduino將Adafruit駐極體麥克風(fēng)放大器連接到測量聲級。
麥克風(fēng)放大器將駐極體膠囊麥克風(fēng)與aMAX4466運算放大器配對,該放大器經(jīng)過優(yōu)化,可用于麥克風(fēng)前置放大器應(yīng)用。靈活的電源電壓和可調(diào)節(jié)的增益使該模塊適用于各種音頻應(yīng)用。
電源電壓:2.4v-5v
輸出:軌到軌-最高5vp-p
頻率響應(yīng):20Hz-20 KHz
可調(diào)增益25x-125x
可用范圍:當然是Adafruit!
組裝和接線
裝配:該板附帶所有表面貼裝的組件-焊接。可以將附帶的標題條焊接起來,以方便在帶有0.1英寸連接器的面包板上使用。
準備標題條: 如有必要,將標題條切成一定長度。如果將其插入面包板,則焊接起來會更容易-長針向下。
添加分支板: 將分支板放置在插針上。
(您可以用一些額外的插針支撐板的自由邊緣,以便更好地對齊以進行焊接。)
和焊接! 確保焊接所有引腳以確保可靠的電接觸。
(有關(guān)焊接的技巧,請務(wù)必查看我們的 優(yōu)良焊接指南 )。
接線:該放大器只有3個連接,因此接線很簡單:
GND-》 GND
VCC-》 3.3V
OUT-》 AIN0
VCC的電壓范圍可以是2.4-5VDC。為了獲得最佳性能,我們使用3.3v引腳,因為它是Arduino上的“最安靜”電源。
輸出將具有VCC/2的DC偏置,因此當其完全安靜時,電壓為穩(wěn)定的VCC/2(1.65v)。
測量聲音水平
來自放大器輸出的音頻信號是變化的電壓。為了測量聲級,我們需要進行多次測量以找到信號的最小和最大范圍或“峰到峰幅度”。
在下面的示例中,我們選擇50毫秒的示例窗口。這足以測量低至20 Hz(人類聽覺的下限)頻率的聲音水平。
找到最小和最大樣本后,我們計算差值并將其轉(zhuǎn)換為伏特,然后將輸出打印到串行監(jiān)視器。
下載:文件
復(fù)制代碼
/****************************************
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);
} /****************************************
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);
}
確定,所以這不是很令人興奮。您還能做什么?
滾動聲級計因此,現(xiàn)在我們將進行峰峰值測量,并使用它來驅(qū)動BicolorLED矩陣以顯示聲級。為了使它更有趣,我們將滾動顯示屏幕,以便實時繪制最近的8個測量結(jié)果。
為此,您需要下載Adafruit GFX庫和LED背包庫。 Wire Library包含在Arduino IDE安裝中。
組裝矩陣,請按照以下教程進行操作:
連接Matrix Matrix背包有4個插針,其連接方式如下:
‘+’-》 5v
‘-’-》 GND
C-》 SCL(模擬引腳5)
上傳代碼,將以下代碼粘貼到Arduino IDE中并上傳。以正常的聲音說話,距離麥克風(fēng)大約6-8英寸,并且聲級計矩陣顯示應(yīng)該開始滾動。
調(diào)整增益盡管放大器能夠產(chǎn)生軌到軌信號(在這種情況下為3.3v),但是代碼映射了一個1v峰峰值信號可滿幅顯示。
這可以在代碼中更改。或者,您可以使用小號直刃螺絲刀調(diào)節(jié)放大器的增益微調(diào)電位器。放大器增益可在25倍至125倍之間調(diào)節(jié)。
輕輕進行所有增益調(diào)整。如果您感到阻力,請停止。小巧的裝飾鍋很精致,很容易通過擋塊損壞。
下載:文件
復(fù)制代碼
/****************************************
Scrolling Sound Meter Sketch for the
Adafruit Microphone Amplifier
****************************************/
#include
#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
} /****************************************
Scrolling Sound Meter Sketch for the
Adafruit Microphone Amplifier
****************************************/
#include
#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
}
更多酷項目!
要使用Adafruit麥克風(fēng)放大器獲得更多樂趣,請查看出色的Wave ShieldVoice Changer項目:
Tiny Arduino Music Visualizer!
下載
數(shù)據(jù)表
鏈接到MAX4466數(shù)據(jù)表(主放大器芯片)
使用的駐極體麥克風(fēng)
下載EAGLE文件
示意圖:
單擊以進行簽名
責(zé)任編輯:wv
-
放大器
+關(guān)注
關(guān)注
143文章
13553瀏覽量
213111 -
麥克風(fēng)
+關(guān)注
關(guān)注
15文章
632瀏覽量
54767 -
Arduino
+關(guān)注
關(guān)注
187文章
6464瀏覽量
186650
發(fā)布評論請先 登錄
相關(guān)推薦
評論