来自放大器输出的音频信号是变化的电压。要测量声级,我们需要进行多次测量以找到信号的最小和最大范围或“峰到峰幅度”。
在下面的实验中,我们选择50毫秒的示例窗口。这足以测量低至20 Hz(人类听觉的下限)频率的声音水平。
找到最小和最大样本后,我们计算差值并将其转换为伏特,然后将输出打印到串行监视器。
- /*
- 【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) // 抛出错误的读数
- {
- if (sample > signalMax)
- {
- signalMax = sample; // 只保存最大级别
- }
- else if (sample < signalMin)
- {
- signalMin = sample; // 仅保存最低级别
- }
- }
- }
- peakToPeak = signalMax - signalMin; // max-min =峰峰值幅度
- double volts = (peakToPeak * 5.0) / 1024; // 转换为伏特
-
- Serial.println(volts);
- }
复制代码
|