【已验证】STM32采集声音传感器实现环境声实时监测
1. 引言声音传感器模块这玩意一般在什么环境检测类的课设毕设用的比较多什么工地环境检测声控灯、噪音监测、安防报警等场景。本文将详细介绍硬件连接、STM32CubeMX配置以及完整的HAL库驱动代码最终通过串口打印实时噪声值ADC原始值、电压值、声音强度等级。2. 硬件准备STM32F103C8T6开发板核心板或最小系统板均可高感度声音传感器模块带AO模拟输出引脚USB转TTL模块用于串口打印调试杜邦线若干声音传感器模块引脚说明引脚功能VCC3.3V/5V电源本文使用3.3VGND地AO模拟信号输出接STM32 ADCDO数字信号输出本文未使用3. 硬件连接传感器引脚STM32引脚VCC3.3VGNDGNDAOPA3 (ADC1通道3)DO未使用将USB转TTL模块的TX、RX分别连接STM32的PA9(TX)、PA10(RX)用于串口输出。4. STM32CubeMX配置4.1 时钟配置HSE外部晶振8MHz系统时钟72MHzAPB2外设时钟72MHz4.2 ADC1配置开启ADC1选择IN3对应PA3模式独立模式单次转换软件触发采样时间55.5周期保证稳定读数ADC分辨率12位4.3 USART1配置模式异步波特率115200数据位8位停止位1位无校验4.4 生成代码选择HAL库生成MDK-ARM工程。5. 代码实现5.1 关键代码 (main.c)/* 根据ADC值判断噪声等级 */ void Display_Noise_Level(uint16_t adc_val) { float voltage adc_val * 3.3f / 4095.0f; if (adc_val 800) { sprintf(msg_buffer, Noise Level: ADC%d, Voltage%.2fV, LevelQuiet\r\n, adc_val, voltage); } else if (adc_val 1600) { sprintf(msg_buffer, Noise Level: ADC%d, Voltage%.2fV, LevelNormal\r\n, adc_val, voltage); } else if (adc_val 2400) { sprintf(msg_buffer, Noise Level: ADC%d, Voltage%.2fV, LevelLoud\r\n, adc_val, voltage); } else if (adc_val 3200) { sprintf(msg_buffer, Noise Level: ADC%d, Voltage%.2fV, LevelVery Loud\r\n, adc_val, voltage); } else { sprintf(msg_buffer, Noise Level: ADC%d, Voltage%.2fV, Level!DANGER!\r\n, adc_val, voltage); } printf(%s, msg_buffer); } int main(void) { HAL_ADC_Start(hadc1); printf(\r\nNoise Sensor Test Start!\r\n); printf(Sampling every 500ms...\r\n\r\n); while (1) { if (HAL_ADC_PollForConversion(hadc1, 100) HAL_OK) { adc_value HAL_ADC_GetValue(hadc1); Display_Noise_Level(adc_value); } HAL_Delay(500); } }5.2 代码说明ADC读取使用HAL_ADC_PollForConversion等待转换完成然后读取12位采样值。电压换算参考电压3.3V分辨率4096公式电压 采样值 × 3.3 / 4095。噪声分级根据ADC值将声音分为“安静”“正常”“响亮”“非常响亮”“危险”五个等级阈值可根据实际环境调整。串口输出重定向printf到USART1每500ms输出一次噪声数据。6. 测试结果将程序下载到开发板后打开串口助手115200-8-1-N这里我放了一首歌可以看到如下输出这一章节比较简单就不放代码了主要还是一个ADC转换
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2471597.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!