当前位置: 首页 > news >正文

【已验证】STM32采集声音传感器实现环境声实时监测

1. 引言

声音传感器模块这玩意一般在什么环境检测类的课设毕设用的比较多,什么工地环境检测,声控灯、噪音监测、安防报警等场景。

本文将详细介绍硬件连接、STM32CubeMX配置以及完整的HAL库驱动代码,最终通过串口打印实时噪声值(ADC原始值、电压值、声音强度等级)。

2. 硬件准备

  • STM32F103C8T6开发板(核心板或最小系统板均可)

  • 高感度声音传感器模块(带AO模拟输出引脚)

  • USB转TTL模块(用于串口打印调试)

  • 杜邦线若干

声音传感器模块引脚说明

引脚功能
VCC3.3V/5V电源(本文使用3.3V)
GND
AO模拟信号输出(接STM32 ADC)
DO数字信号输出(本文未使用)

3. 硬件连接

传感器引脚STM32引脚
VCC3.3V
GNDGND
AOPA3 (ADC1通道3)
DO未使用

将USB转TTL模块的TX、RX分别连接STM32的PA9(TX)、PA10(RX),用于串口输出。

4. STM32CubeMX配置

4.1 时钟配置

  • HSE:外部晶振8MHz

  • 系统时钟:72MHz

  • APB2外设时钟:72MHz

4.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, Level=Quiet\r\n", adc_val, voltage); } else if (adc_val < 1600) { sprintf(msg_buffer, "Noise Level: ADC=%d, Voltage=%.2fV, Level=Normal\r\n", adc_val, voltage); } else if (adc_val < 2400) { sprintf(msg_buffer, "Noise Level: ADC=%d, Voltage=%.2fV, Level=Loud\r\n", adc_val, voltage); } else if (adc_val < 3200) { sprintf(msg_buffer, "Noise Level: ADC=%d, Voltage=%.2fV, Level=Very 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.jsqmd.com/news/570057/

相关文章:

  • 黑苹果安装完整指南:OpenCore配置终极教程
  • 从零到一:S32K14x AutoSar MCAL环境部署与核心目录解析
  • CRM是什么?从概念到落地:功能解析、选型建议与操作手册 - 纷享销客智能型CRM
  • ZYNQ实战:PL端硬中断在双核间的精准分发与协同
  • 3个核心模块揭秘:Python量化投资如何免费获取通达信专业数据
  • 延华电子 【EtherCAT实践篇】六、更改XML,增加输入输出变量 (学习笔记)
  • 终极指南:如何用BaiduPCS-Go命令行工具高效管理百度网盘资源
  • Linux UDP 网络编程
  • Endnote与WPS高效协作:自动与手动关联全攻略
  • 2026年口碑好的夜景亮化工程/文旅景观亮化工程推荐施工方案 - 品牌宣传支持者
  • 重新定义宝可梦体验:Universal Pokemon Randomizer ZX 全面解析与使用指南
  • C++ AVL树
  • 为“自感”留白
  • 突破百度网盘限速:BaiduPCS-Go命令行工具深度解析
  • 2026年质量好的台历书刊印刷/广告书刊印刷/折页书刊印刷/成都书刊印刷厂家推荐哪家好 - 品牌宣传支持者
  • 上海腕表售后大数据揭秘:从百达翡丽到浪琴,高端腕表故障图谱与北京名表价格的隐性关联——京沪杭宁深锡六城12,000次维修案例深度解析 - 时光修表匠
  • Pixel Couplet Gen快速上手:MIT开源镜像免配置部署微信小程序前端
  • GitHub加速插件技术解析:300%速度提升的实现原理与实践指南
  • 为什么选择Zabbix而不是Prometheus?K8s监控工具深度对比与实战配置
  • 腾讯开源翻译大模型HY-MT1.5-7B镜像使用教程:新手快速入门
  • Real-ESRGAN-GUI:让模糊图像重获新生的AI超分辨率神器
  • 苹果50周年:辉煌背后的创新困境与未来挑战
  • 上海腕表售后全解析:从北京名表价格看高端腕表养护与维修逻辑 - 时光修表匠
  • 在ESP32上为LVGL 8.x添加中文输入法:从拼音到候选词显示的完整实现
  • Snap Hutao:原神玩家的全方位数据管理解决方案
  • 2026年知名的浓缩设备/食品级血浆蛋白浓缩设备/酶制剂浓缩设备/乳品蛋白浓缩设备厂家推荐哪家好 - 品牌宣传支持者
  • 2269 上市公司智慧供应链对数字创新的平均处理效应指标【ATT】(2000-2024)
  • 京东茅台自动抢购实战指南:高效自动化解决方案
  • Qwen3.5-2B开源大模型部署教程:支持商用、可审计、易集成的端侧AI方案
  • 2026Altium Designer 国产替代软件推荐,如何选到靠谱的国产 EDA? - 品牌2026