|
來自放大器輸出的音頻信號(hào)是變化的電壓。要測(cè)量聲級(jí),我們需要進(jìn)行多次測(cè)量以找到信號(hào)的最小和最大范圍或“峰到峰幅度”。
在下面的實(shí)驗(yàn)中,我們選擇50毫秒的示例窗口。這足以測(cè)量低至20 Hz(人類聽覺的下限)頻率的聲音水平。
找到最小和最大樣本后,我們計(jì)算差值并將其轉(zhuǎn)換為伏特,然后將輸出打印到串行監(jiān)視器。
- /*
- 【Arduino】168種傳感器模塊系列實(shí)驗(yàn)(資料+代碼+圖形+仿真)
- 實(shí)驗(yàn)一百五十九:MAX9814麥克風(fēng)放大器模塊 MIC話筒聲音放大/咪頭傳感器
- 項(xiàng)目測(cè)試之二:測(cè)量聲級(jí)
- 模塊接線:
- MAX9814 Arduino
- VCC 5V
- GND GND
- OUT A0
- */
- const int sampleWindow = 50; // 以mS為單位的采樣窗口寬度(50 mS = 20Hz)
- unsigned int sample;
-
- void setup()
- {
- Serial.begin(9600);
- pinMode(A0,INPUT);
- }
-
-
- void loop()
- {
- unsigned long startMillis= millis(); // 樣本窗口的開始
- unsigned int peakToPeak = 0; // 峰峰值
-
- unsigned int signalMax = 0;
- unsigned int signalMin = 1024;
-
- // collect data for 50 mS
- while (millis() - startMillis < sampleWindow)
- {
- sample = analogRead(A0);
- if (sample < 1024) // 拋出錯(cuò)誤的讀數(shù)
- {
- if (sample > signalMax)
- {
- signalMax = sample; // 只保存最大級(jí)別
- }
- else if (sample < signalMin)
- {
- signalMin = sample; // 僅保存最低級(jí)別
- }
- }
- }
- peakToPeak = signalMax - signalMin; // max-min =峰峰值幅度
- double volts = (peakToPeak * 5.0) / 1024; // 轉(zhuǎn)換為伏特
-
- Serial.println(volts);
- }
復(fù)制代碼
|
|