温度 + 光照 + 超声波防碰撞三路监测、超温自动风扇、低光自动照明、距离过近蜂鸣报警

矿工、消防员、电力巡检属于高危作业场景,头盔是作业人员贴身防护载体,本设计将各类传感器集成于头盔,实现环境监测与防碰撞预警功能。系统以 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 温度传感器PA3DQ 引脚,外接 4.7kΩ 上拉电阻至 3.3V
HC‑SR04 超声波PA2(Trig) / PA0(Echo)Echo 接 TIM2_CH1 输入捕获;Echo5V 输出经 1k+2k 电阻分压降压到 3.3V 接入单片机引脚
OLED12864PB6 / PB7I2C1,SDA、SCL
ESP8266‑01SPA9 / PA10USART1 串口,波特率 115200
风扇驱动PB0MOS 管驱动,高电平风扇开启
照明 LEDPB1高电平点亮
蜂鸣器PB5高电平触发报警鸣叫
阈值调节按键PB12、PB13按键加减阈值参数

硬件注意事项:

  1. HC‑SR04 的 Echo 引脚输出为 5V 电平,不能直接接入 STM32F103,必须使用电阻分压,将电压降低至 3.3V 以内,防止 IO 口烧毁。
  2. 头盔整机供电采用 18650 锂电池,升压模块输出 5V 给风扇、超声波模块供电;AMS1117‑3.3 为单片机、OLED、ESP8266 供电;ESP8266 瞬时发射电流大,电源位置增加储能电容,保证供电稳定。
  3. 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 秒刷新一次数据,断网具备自动重连逻辑

六、系统拓展方向

  1. 增加 VL53L0X 激光测距模块,使用多颗 ToF 传感器实现左、中、右多方向障碍物检测,增大预警覆盖范围;
  2. 增加 MPU6050 加速度陀螺仪模块,增加人员跌倒检测功能,发生跌倒后云端推送报警信息;
  3. 更换 BH1750 数字照度传感器,获取真实 lux 照度,实现 PWM 渐变调光照明;
  4. 增加 LoRa 通信模块,适配矿井等无 Wi‑Fi 作业环境,多台头盔设备数据汇总至地面网关。

八、资料内容完整工程资料(原理图、PCB、代码、元件清单)


九、资料获取方式

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐