來自放大器輸出的音頻信號是變化的電壓。要測量聲級,我們需要進行多次測量以找到信號的最小和最大范圍或“峰到峰幅度”。
在下面的實驗中,我們選擇50毫秒的示例窗口。這足以測量低至20 Hz(人類聽覺的下限)頻率的聲音水平。
找到最小和最大樣本后,我們計算差值并將其轉(zhuǎn)換為伏特,然后將輸出打印到串行監(jiān)視器。
- /*
- 【Arduino】168種傳感器模塊系列實驗(資料+代碼+圖形+仿真)
- 實驗一百五十九:MAX9814麥克風放大器模塊 MIC話筒聲音放大/咪頭傳感器
- 項目測試之二:測量聲級
- 模塊接線:
- 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) // 拋出錯誤的讀數(shù)
- {
- if (sample > signalMax)
- {
- signalMax = sample; // 只保存最大級別
- }
- else if (sample < signalMin)
- {
- signalMin = sample; // 僅保存最低級別
- }
- }
- }
- peakToPeak = signalMax - signalMin; // max-min =峰峰值幅度
- double volts = (peakToPeak * 5.0) / 1024; // 轉(zhuǎn)換為伏特
-
- Serial.println(volts);
- }
復制代碼
|