第14章 实验二:传感器与显示综合实验
14 第 14 章 实验二:传感器与显示综合实验¶
本实验综合运用超声波传感器、温湿度传感器和 OLED 显示屏,实现一个环境数据采集与显示系统,巩固第 7~8 章的知识。
14.1 实验目的¶
- 掌握 HC-SR04 超声波传感器的定时器输入捕获驱动方法
- 掌握 DHT11 温湿度传感器的单总线时序驱动
- 掌握 SSD1306 OLED I2C 驱动和多行数据显示
- 体验多传感器数据融合与实时显示
14.2 实验环境¶
本实验在实验一环境基础上,增加以下器件(仿真环境使用 PicSimlab 虚拟外设):
表 14-1 实验器件清单
| 器件 | 型号 | 接口 | STM32 引脚 |
|---|---|---|---|
| 超声波传感器 | HC-SR04 | Trig(GPIO) + Echo(TIM IC) | PB0(Trig) + PB1(Echo/TIM3_CH4) |
| 温湿度传感器 | DHT11 | 单总线 | PA1 |
| OLED 显示屏 | SSD1306 0.96" | I2C | PB6(SCL) + PB7(SDA) |
14.3 实验内容¶
14.3.1 任务一:超声波测距¶
- 使用 TIM3_CH4 输入捕获测量 HC-SR04 Echo 脉宽
- 计算距离并通过串口输出
- 精度要求:±1cm
参考代码框架:
/* 触发 HC-SR04 */
void HCSR04_Trigger(void)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
delay_us(15); /* >10us 触发脉冲 */
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
}
/* 在 TIM3 输入捕获回调中计算脉宽 */
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
/* 上升沿记录起始值,下降沿计算差值 → 脉宽(us) → 距离(cm) */
/* distance_cm = pulse_us / 58.0f; */
}
14.3.2 任务二:温湿度采集¶
- 驱动 DHT11 读取温度和湿度
- 每 2 秒采集一次(DHT11 采样间隔不小于 1 秒)
- 串口输出格式:
Temp=25.0C Humi=60%
14.3.3 任务三:OLED 综合显示¶
将超声波距离和温湿度数据整合显示在 OLED 上:
+--------------------+
| Smart Environment |
| Dist: 35.2 cm |
| Temp: 25.0 C |
| Humi: 60 % |
+--------------------+
显示刷新策略: 每 500ms 刷新一次 OLED,避免频繁写 I2C 造成闪烁。
14.3.4 任务四(拓展):超限报警¶
- 温度 > 35°C 或距离 < 10cm 时,LED 快闪报警
- 通过串口发送报警信息
ALERT: xxxx
14.4 系统接线图¶
图 14-1 实验二系统接线示意图。
14.5 实验步骤¶
- CubeMX 配置:新建工程,配置 GPIO(PB0输出, PA1开漏)、TIM3_CH4(输入捕获)、I2C1(PB6/PB7)、USART1
- 逐模块调试:分别测试超声波、DHT11、OLED,确认每个模块独立工作正常
- 系统集成:在主循环中按时间片调度三个采集任务和显示刷新
- 拓展功能:实现报警功能
14.6 评分标准¶
表 14-2 实验二评分标准
| 内容 | 分值 | 评价标准 |
|---|---|---|
| 超声波测距正确 | 25% | 距离值稳定、精度 ±2cm |
| DHT11 读取正确 | 25% | 能读取温湿度且数据合理 |
| OLED 显示完整 | 25% | 多行数据布局清晰 |
| 拓展功能 | 15% | 报警功能完整实现 |
| 代码质量与报告 | 10% | 模块化、注释、报告完整 |