基于 STM32 的智能头盔系统
温度 + 光照 + 超声波防碰撞三路监测、超温自动风扇、低光自动照明、距离过近蜂鸣报警
矿工、消防员、电力巡检属于高危作业场景,头盔是作业人员贴身防护载体,本设计将各类传感器集成于头盔,实现环境监测与防碰撞预警功能。系统以 STM32 为主控,完成温度、光照、障碍物距离三路数据采集;实现温度超标自动开启风扇散热、光照偏低自动开启照明 LED、障碍物距离过近蜂鸣器报警,搭配 OLED 屏幕数据显示,ESP8266 通过 MQTT 协议将数据上传阿里云平台,实现远程监控。
一、系统功能拆解
表格
| 功能域 | 模块 | 说明 |
|---|---|---|
| 环境监测 | DS18B20 温度传感器 | 采集头盔头部环境温度,温度超过设定阈值自动启动风扇降温 |
| 环境监测 | GL5528 光敏电阻 | 检测环境光照,光照不足自动点亮 LED 照明灯 |
| 安全预警 | HC‑SR04 超声波模块 | 检测前方障碍物,距离小于设定阈值触发蜂鸣器报警 |
| 人机交互 | OLED12864 显示屏 | 实时展示温度、光照等级、障碍物距离数据 |
| 人机交互 | 按键 | 完成各项报警阈值的调整设置 |
| 远程通信 | ESP8266‑01S(MQTT 阿里云) | 采集数据上传云端,支持后台、手机 APP 远程查看监测信息 |
| 执行机构 | 风扇、照明 LED、蜂鸣器 | 完成散热、照明、碰撞报警自动控制 |
主逻辑:系统上电初始化,循环采集温度、光照、障碍物距离三项参数,OLED 刷新显示采集数据,按照 2 秒周期通过 MQTT 上传数据至云端;判断传感器数值,温度超阈值开启风扇、光照低于阈值开启 LED 灯、障碍物距离过近触发蜂鸣器报警;扫描按键,完成阈值参数修改。
设计说明:本系统以传感器环境监测、近距离防碰撞预警为核心功能,论文描述应当贴合实物实现功能,不虚构 AR 增强现实、人工智能等未实现的业务。
二、器件选型对比
2.1 主控:STM32F103C8T6 vs NXP LPC1768
STM32F103C8T6 主频 72MHz,资源可以满足 1 路 ADC 采集、1 路单总线、定时器输入捕获、I2C 通信、串口通信的项目全部需求,网络资料丰富,开发便捷。NXP LPC1768 主频 96MHz,硬件资源更高,但硬件成本更高,网络参考资料较少,因此本项目选用STM32F103C8T6 最小系统板。
2.2 光照检测:GL5528 光敏电阻 vs BH1750 数字照度计
表格
| 对比项 | GL5528(光敏电阻) | BH1750(数字照度计) |
|---|---|---|
| 输出 | 模拟分压电压 | I2C 数字信号,直接输出 lux 照度值 |
| 线性特性 | 对数非线性 | 线性度良好 |
| 参考价格 | ≈2 元 | ≈6 元 |
本项目仅做光照阈值判断、实现天黑自动开灯,GL5528 光敏电阻可以满足需求;光敏电阻输出为相对电压等级,无法直接换算标准 lux 照度,OLED 只展示光照相对等级,不标注 lux 单位。如果需要获取真实照度数值,可选用 BH1750 数字照度传感器。
2.3 测距模块:HC‑SR04 超声波 vs VL53L0X 激光 ToF
表格
| 对比项 | HC‑SR04 超声波 | VL53L0X 激光 ToF |
|---|---|---|
| 量程 | 2‑400cm | 最大 200cm |
| 精度 | 静止正对障碍物 ±3mm | 误差约 ±3% |
| 环境影响 | 不受光线干扰 | 强光环境会产生一定干扰 |
| 参考价格 | ≈3 元 | ≈15 元 |
头盔防碰撞 1‑4 米量程需求,HC‑SR04 超声波模块完全适配,成本低廉。VL53L0X 激光模块量程上限仅 2 米,适合短距离检测场景。
2.4 温度检测:DS18B20 vs TMP36
选用 DS18B20 数字温度传感器,不锈钢防水探头版本,可贴装在头盔内侧,适应作业恶劣环境,测量精度 ±0.5℃;SMD 贴片版本适合电路板测温,本系统采用不锈钢探头款式。
2.5 BOM 成本清单
表格
| 器件 | 参考价格 |
|---|---|
| STM32F103C8T6 最小系统板 | ≈15 元 |
| GL5528 光敏模块 | ≈2 元 |
| HC‑SR04 超声波模块 | ≈3 元 |
| DS18B20 不锈钢探头 | ≈6 元 |
| OLED12864(I2C) | ≈10 元 |
| ESP8266‑01S | ≈10 元 |
| 5V 小风扇 + MOS 管驱动电路 | ≈10 元 |
| 蜂鸣器、LED 照明灯、按键、洞洞板、连接线 | ≈10 元 |
| 合计 | ≈66 元 |
三、硬件接线
表格
| 模块 | 引脚 | 说明 |
|---|---|---|
| GL5528 光敏电阻 | PA1(ADC1_IN1) | 分压输出,光照越强输出电压越高 |
| DS18B20 温度传感器 | PA3 | DQ 引脚,外接 4.7kΩ 上拉电阻至 3.3V |
| HC‑SR04 超声波 | PA2(Trig) / PA0(Echo) | Echo 接 TIM2_CH1 输入捕获;Echo5V 输出经 1k+2k 电阻分压降压到 3.3V 接入单片机引脚 |
| OLED12864 | PB6 / PB7 | I2C1,SDA、SCL |
| ESP8266‑01S | PA9 / PA10 | USART1 串口,波特率 115200 |
| 风扇驱动 | PB0 | MOS 管驱动,高电平风扇开启 |
| 照明 LED | PB1 | 高电平点亮 |
| 蜂鸣器 | PB5 | 高电平触发报警鸣叫 |
| 阈值调节按键 | PB12、PB13 | 按键加减阈值参数 |
硬件注意事项:
- HC‑SR04 的 Echo 引脚输出为 5V 电平,不能直接接入 STM32F103,必须使用电阻分压,将电压降低至 3.3V 以内,防止 IO 口烧毁。
- 头盔整机供电采用 18650 锂电池,升压模块输出 5V 给风扇、超声波模块供电;AMS1117‑3.3 为单片机、OLED、ESP8266 供电;ESP8266 瞬时发射电流大,电源位置增加储能电容,保证供电稳定。
- Echo 回波时间测量,使用定时器输入捕获方式,硬件自动记录电平跳变时刻,减少 CPU 资源占用。
四、软件设计
4.1 主程序框架
int main(void) {
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
delay_init();
OLED_Init();
Adc_Init(); /* PA1 光敏 */
DS18B20_Init(); /* PA3 */
HCSR04_Init(); /* PA2 Trig / PA0 TIM2捕获 */
Fan_Init(); Led_Init(); Beep_Init(); Key_Init();
ESP8266_Init(); /* USART1, MQTT 阿里云 */
while (1)
{
temp = DS18B20_Read(); /* 1s 一次读取温度 */
light = Light_GetLevel(); /* ADC均值获取光照相对等级 */
dist = HCSR04_GetDist_cm(); /* 100ms一次,中值滤波处理距离 */
OLED_ShowAll(temp, light, dist);
MQTT_Report(temp, light, dist); /* 2s一次上传云端 */
Control_Loop(temp, light, dist); /* 执行风扇、LED、蜂鸣器控制,带迟滞 */
Key_Scan(); /* 扫描按键,修改各项阈值 */
}
}
4.2 HC‑SR04 超声波测距子程序
定时器配置为1MHz 计数频率,1 微秒每计数脉冲,保障测距分辨率;采集 5 组数据使用中值滤波,过滤环境带来的测量毛刺。
void HCSR04_Init(void) {
TIM_TimeBaseInitTypeDef tb;
tb.TIM_Prescaler = 72 - 1; /* 72分频,定时器计数1MHz,1us/tick */
tb.TIM_Period = 0xFFFF;
TIM_TimeBaseInit(TIM2, &tb);
/* CH1配置输入捕获,捕获上升沿、下降沿,开启定时器中断 */
TIM_ICInit(...);
TIM_Cmd(TIM2, ENABLE);
}
float HCSR04_GetDist_cm(void) {
u16 p[5]; u8 i, j; u16 t;
for (i = 0; i < 5; i++) {
Trig_High_10us(); /* 输出≥10us触发脉冲 */
p[i] = Echo_GetWidth_us(); /* 捕获Echo高电平持续时间,单位us */
delay_ms(60); /* 间隔防止回波干扰 */
}
/* 冒泡排序,取中值滤波 */
for (i = 0; i < 4; i++)
for (j = 0; j < 4 - i; j++)
if (p[j] > p[j+1]) { t = p[j]; p[j] = p[j+1]; p[j+1] = t; }
return p[2] * 0.01715f; /* 根据声速换算距离,单位cm */
}
说明:HC‑SR04 标称毫米级精度为实验室静止正对障碍物条件,头盔佩戴晃动使用,实际误差约 ±1‑2cm,论文描述保留实际误差余量。
4.3 光照采集,输出相对光照等级
GL5528 光敏电阻输出为非线性模拟量,多次 ADC 采样取平均值,输出 0‑9 的相对光照等级,不换算 lux 照度。
u8 Light_GetLevel(void) {
u32 sum = 0; u8 i;
for (i = 0; i < 10; i++) { sum += Get_Adc(CH_LIGHT); delay_ms(2); }
u16 adc = sum / 10;
return (u8)((u32)adc * 10 / 4096);
}
4.4 DS18B20 传感器复位子程序(标准时序)
u8 DS18B20_Reset(void) {
DQ_OUT(); DQ_LOW();
delay_us(480); /* 主机拉低总线480‑500us复位 */
DQ_IN(); /* 释放总线切换为输入模式 */
delay_us(70);
if (!DQ_READ()) {
delay_us(420); /* 等待传感器应答时序结束 */
return 0; /* 传感器正常在线 */
}
return 1; /* 传感器未检测到 */
}
读取流程:发送跳过 ROM 指令0xCC,启动温度转换0x44,等待转换完成;再次发送0xCC,读取温度寄存器0xBE,读取高低字节,12 位模式下 temp = ((th<<8)|tl)*0.0625。
4.5 联动控制,增加迟滞,消除临界点抖动
直接阈值对比会出现设备频繁启停,设置迟滞区间,避免风扇、LED 频繁开关。
void Control_Loop(float temp, u8 light, float dist) {
/* 温度迟滞2℃ */
if (temp > g_temp_th) Fan_On();
else if (temp < g_temp_th - 2.0f) Fan_Off();
/* 光照迟滞 */
if (light < g_light_th) Led_On();
else if (light > g_light_th + 1) Led_Off();
/* 距离报警 */
if (dist < g_dist_th) Beep_On();
else Beep_Off();
}
五、系统调试验证
表格
| 测试项 | 测试方法 | 预期结果 |
|---|---|---|
| 测距精度 | 30cm、50cm、100cm、200cm 卷尺对比测试 | 测量误差≤±2cm,读数无大幅度跳变 |
| 测距稳定性 | 静止正对墙面连续采集 10 秒 | 中值滤波后数据波动≤±1cm |
| 温度采集 | 和标准温度计对比 | 误差控制在 ±0.5℃以内 |
| 光照联动 | 遮光、强光交替切换 | 环境变暗自动点亮 LED,环境光亮自动熄灭,无频繁闪烁 |
| 风扇联动 | 加热升温、自然降温测试 | 在迟滞区间内风扇不会反复启停 |
| 防碰撞报警 | 手掌由远至近靠近超声波模块 | 距离小于阈值蜂鸣器报警,远离障碍物报警停止 |
| Wi‑Fi 云端上传 | 观察阿里云后台数据 | 2 秒刷新一次数据,断网具备自动重连逻辑 |
六、系统拓展方向
- 增加 VL53L0X 激光测距模块,使用多颗 ToF 传感器实现左、中、右多方向障碍物检测,增大预警覆盖范围;
- 增加 MPU6050 加速度陀螺仪模块,增加人员跌倒检测功能,发生跌倒后云端推送报警信息;
- 更换 BH1750 数字照度传感器,获取真实 lux 照度,实现 PWM 渐变调光照明;
- 增加 LoRa 通信模块,适配矿井等无 Wi‑Fi 作业环境,多台头盔设备数据汇总至地面网关。
八、资料内容完整工程资料(原理图、PCB、代码、元件清单)

九、资料获取方式

更多推荐


所有评论(0)