若该文为原创文章,转载请注明原文出处。

一、引言

(一)研究背景及意义

图书馆作为知识和信息的存储中心,其内部环境的稳定性与安全性至关重要。不适宜的温湿度会损害书籍的纸质材料,烟雾火焰是藏书楼最大的安全隐患,而过度的光照则会导致书籍封面褪色、纸张脆化。同时,为读者提供一个光线适宜、安静舒适的阅读环境也是图书馆的核心职能。传统的人工巡查方式效率低下,无法实现实时监控和即时响应。因此,构建一套集环境监测、安全预警、智能控制和远程管理于一体的自动化系统,对于实现图书馆的现代化、智能化管理,保护珍贵文献资源,提升读者体验具有重大意义。

(二)国内外研究现状

目前,智能环境监控系统在智慧农业、智能家居等领域已有广泛应用。然而,针对图书馆这一特定场景的定制化系统研究相对较少。现有方案多侧重于单一功能(如仅防火或恒温恒湿),缺乏将多种环境参数(光、声、人)与安全因素(火、烟)相结合进行联动控制的综合性解决方案。随着STM32等高性能MCU和物联网技术的成熟,开发功能全面、成本可控、稳定可靠的集成系统已成为可能,并成为智慧图书馆建设的一个重要发展方向。

二、系统总体设计

(一)系统架构

本系统采用“感知-决策-执行-云联”的四层架构:

  1. 感知层:由DHT11、MQ-2、火焰传感器、光敏电阻、声音传感器、HC-SR501红外人体传感器组成,负责全方位采集环境数据。

  2. 决策层:以STM32F103C8T6为核心,作为系统大脑,负责处理所有传感器数据,执行用户设定的逻辑算法,做出控制决策。

  3. 执行层:包括继电器驱动的水泵(灭火)、风扇(排烟)、LED灯(照明)以及蜂鸣器(报警),接收决策层的指令并动作。

  4. 云联层:通过ESP-01S Wi-Fi模块连接云端服务器或手机APP,实现数据远程透传和远程控制功能。

(二)功能模块划分

  1. 环境监测模块:负责六类传感器数据的定时采集与预处理。

  2. 安全报警模块:处理火焰、烟雾超标等紧急情况,触发最高优先级报警。

  3. 智能控制模块:根据光照强度自动控制灯光,并结合红外信号实现“人走灯灭”。

  4. 人机交互模块:通过OLED屏幕实时显示所有环境参数和系统状态。

  5. 通信模块:通过串口AT指令与Wi-Fi模块通信,实现与手机APP的数据交互。

  6. 系统管理模块:处理按键输入,管理阈值设置和设备模式。

三、硬件设计与实现

(一)系统硬件框架图

(二)系统硬件配置与功能说明表

1. 主控单元
器件名称推荐型号接口功能说明
STM32单片机STM32F103C8T6-作为系统核心,负责所有传感器的数据采集、逻辑判断、控制各执行器、以及与WiFi模块通信。
2. 传感器与输入单元
器件名称推荐型号/类型接口功能说明
温湿度传感器DHT11单总线检测图书馆内的环境温度和湿度,确保阅读环境舒适。
火焰传感器红外火焰模块GPIO检测明火火焰。检测到火焰时,模块输出数字信号(低电平),STM32可直接读取该GPIO口状态。为安防最高优先级。
烟雾传感器MQ-2ADC检测烟雾浓度。输出模拟电压信号,浓度越高电压越高,STM32的ADC引脚读取后与阈值比较。用于预防火灾和有人吸烟。
光敏传感器光敏电阻模块ADC检测环境光照强度。输出模拟电压,光线越强电压越高。STM32根据此值自动控制灯光。
噪声传感器声音传感器ADC检测环境噪音大小。输出模拟电压,噪音越大电压越高。STM32读取后判断是否超过阈值。
人体红外传感器HC-SR501GPIO检测区域内是否有人。检测到人体移动时,输出高电平信号。STM32通过读取该GPIO口状态判断是否有人。
3. 执行器与输出单元
器件名称推荐型号/类型接口功能说明
继电器模块5V 继电器模块GPIO安全控制大功率设备。STM32通过GPIO输出高/低电平,控制继电器吸合或断开,从而控制220V的水泵、风扇、照明灯。强弱电必须严格隔离!
有源蜂鸣器5V有源蜂鸣器GPIO发生异常情况(火焰、烟雾)时,STM32控制其鸣响,进行现场声光报警,提醒馆内人员。
OLED显示屏SSD1306I²C实时显示所有监测数据(温湿度、烟雾浓度、光照、噪声值)和系统状态(有人/无人、报警信息),提供最直接的人机交互界面。
4. 通信单元
器件名称推荐型号接口功能说明
WiFi模块ESP-01SUARTSTM32通过串口(UART)以AT指令的方式与ESP-01S通信,将采集到的所有状态数据上传至云平台(如OneNet、阿里云),并接收从云平台下发的手机APP控制指令(如远程强制开关灯、风扇)。
5. 电源单元
器件名称推荐规格功能说明
电源适配器5V/3A 开关电源为整个控制系统(STM32、传感器、模块)提供稳定的5V电源。
注意: 水泵、大功率风扇和照明灯使用220V供电,必须通过继电器控制,与低压部分隔离。

核心控制逻辑说明

  1. 火焰报警(最高优先级):

    • 条件: if (火焰传感器输出 == 检测到火焰)

    • 动作: { 启动水泵继电器; 启动蜂鸣器; 向上推送紧急火警消息; }

  2. 烟雾报警:

    • 条件: if (烟雾浓度ADC值 > 烟雾阈值)

    • 动作: { 启动风扇继电器; 启动蜂鸣器; OLED显示报警信息; }

  3. 自动照明控制:

    • 条件1(有人): if (人体传感器 == 有人 && 光照强度ADC值 < 光照阈值)

    • 动作: { 启动照明灯继电器; }

    • 条件2(无人): if (人体传感器 == 无人)

    • 动作: { 延迟一段时间后关闭照明灯继电器; } // 防止人短暂移动造成灯频繁开关

  4. 噪声警示:

    • 条件: if (噪声ADC值 > 噪声阈值)

    • 动作: { OLED显示 "请保持安静!" 或当前噪声值; } // 可考虑增加静音模式,仅显示不蜂鸣

  5. 数据上传与远程控制:

    • 动作: STM32定期将所有传感器数据和状态通过WiFi上传至手机APP。

    • 远程手动: 在APP上可手动强制控制风扇、灯的开关,覆盖自动逻辑。

关键设计注意事项

  1. 安全性设计:

    • 强弱电隔离: 控制220V水泵、风扇、灯的电路必须使用继电器模块进行彻底隔离,布线规范,防止高压窜入低压电路损坏单片机或引发安全事故。

    • 报警优先级: 火焰报警应具有最高中断优先级,即使系统处于其他状态也能立即响应。

  2. 传感器布局与抗干扰:

    • MQ-2传感器: 需定期预热才能稳定工作,且对酒精、香烟等多种烟雾敏感,阈值需合理设置以减少误报。

    • HC-SR501人体传感器: 安装位置应避免正对窗户或空调出风口,防止因气流或热源变化引起误触发。可调节其延迟时间和灵敏度。

  3. 功耗与布線:

    • 图书馆环境通常需长期运行,系统待机功耗应尽可能低。

    • 由于传感器众多,布线需整齐规范,建议使用排线或PCB板连接,提高系统可靠性。

  4. 云平台与APP:

    • 可选择阿里云物联网平台或OneNet等,它们提供了设备接入和APP开发的完整解决方案,可以快速实现远程监控功能。

四、软件设计与实现

(一)开发环境搭建

使用STM32CubeIDE + STM32CubeMX。

  1. 用CubeMX配置引脚、ADC、I2C、UART、定时器等。

  2. 生成初始化代码工程。

  3. 在IDE中编写业务逻辑,并集成第三方OLED驱动库。

(二)系统软件流程图

(三)关键代码片段

1. 传感器数据读取

uint16_t Read_MQ2() {
    HAL_ADC_Start(&hadc1);
    HAL_ADC_PollForConversion(&hadc1, 50);
    return HAL_ADC_GetValue(&hadc1);
}

// 读取光照和噪声类似,选择不同的ADC通道

2. 智能照明控制逻辑

void Light_Control() {
    if (HAL_GPIO_ReadPin(PIR_GPIO_Port, PIR_Pin) == GPIO_PIN_SET) { // 检测到人
        if (light_value < LIGHT_THRESHOLD) { // 光照值低于阈值,认为环境太暗
            HAL_GPIO_WritePin(LED_LIGHT_GPIO_Port, LED_LIGHT_Pin, GPIO_PIN_SET); // 开灯
        } else {
            HAL_GPIO_WritePin(LED_LIGHT_GPIO_Port, LED_LIGHT_Pin, GPIO_PIN_RESET); // 关灯
        }
    } else { // 无人
        HAL_GPIO_WritePin(LED_LIGHT_GPIO_Port, LED_LIGHT_Pin, GPIO_PIN_RESET); // 强制关灯
    }
}

3. OLED显示

void OLED_Show() {
    SSD1306_Clear();
    SSD1306_GotoXY(0,0);
    SSD1306_Puts("T:", &Font_7x10);
    SSD1306_GotoXY(15,0);
    SSD1306_Puts(floatToStr(current_temp), &Font_7x10);

    SSD1306_GotoXY(0,15);
    SSD1306_Puts("H:", &Font_7x10);
    // ... 显示湿度
    SSD1306_GotoXY(0,30);
    SSD1306_Puts("Smog:", &Font_7x10);
    // ... 显示烟雾浓度值
    SSD1306_GotoXY(0,45);
    if (HAL_GPIO_ReadPin(PIR_GPIO_Port, PIR_Pin) == GPIO_PIN_SET) {
        SSD1306_Puts("People: YES", &Font_7x10);
    } else {
        SSD1306_Puts("People: NO", &Font_7x10);
    }
    // 如果噪声过大,在特定位置显示警告图标或文字
    if(noise_value > NOISE_THRESHOLD) {
        SSD1306_GotoXY(80, 45);
        SSD1306_Puts("NOISE!", &Font_7x10);
    }
    SSD1306_UpdateScreen();
}

五、系统测试与优化

(一)测试方案

进行分模块和整体测试:

  1. 传感器校准:用标准设备对比,校准MQ-2、光敏、声音传感器的ADC值与实际物理量的关系。

  2. 功能测试:

    • 安全测试:用打火机测试火焰传感器,用烟雾测试MQ-2,观察水泵、风扇、蜂鸣器是否联动。

    • 照明测试:遮挡光敏电阻,观察灯是否自动开启;人离开后,灯是否延迟关闭。

    • 显示测试:观察OLED是否正确显示所有信息,噪声警告是否出现。

    • 通信测试:测试手机APP是否能收到数据并下发控制指令。

(二)预期问题与优化

  1. 问题:HC-SR501存在检测盲区和不稳定。优化:调整安装角度,软件上采用延时关闭策略(检测不到人后延迟30秒再关灯)。

  2. 问题:MQ-2初始预热和误报。优化:系统上电后延迟1分钟再进行烟雾判断,并适当提高阈值。

  3. 问题:Wi-Fi网络不稳定。优化:在代码中加入网络状态检测和自动重连机制。

  4. 问题:逻辑复杂度高。优化:考虑移植FreeRTOS,将传感器采集、显示、网络、控制等任务拆分到不同线程,提高系统可靠性和可维护性。

六、结论与展望

(一)总结

本项目成功设计并实现了一个功能完备的基于STM32的图书馆监测系统。系统整合了六类传感器与四类执行器,实现了环境监测、安全防护、智能照明和远程监控四大核心功能,验证了STM32在复杂嵌入式物联网项目中作为主控器的强大能力和灵活性。

(二)未来展望

  1. 功能扩展:增加甲醛、PM2.5等空气质量监测模块,打造更健康的环境。

  2. 能源管理:增加电流电压传感器,监测灯具、空调等设备的能耗,实现节能控制。

  3. 技术升级:将Wi-Fi通信升级为NB-IoT或4G Cat.1,适用于没有Wi-Fi覆盖的大型图书馆仓库。

  4. 数据分析:将数据持久化存储在云端,利用大数据分析读者人流规律、环境变化趋势,为图书馆管理提供决策支持,真正实现“智慧图书馆”。

如有侵权,或需要完整代码,请及时联系博主。

更多推荐