基于stm32图书馆检测系统设计
若该文为原创文章,转载请注明原文出处。
一、引言
(一)研究背景及意义
图书馆作为知识和信息的存储中心,其内部环境的稳定性与安全性至关重要。不适宜的温湿度会损害书籍的纸质材料,烟雾火焰是藏书楼最大的安全隐患,而过度的光照则会导致书籍封面褪色、纸张脆化。同时,为读者提供一个光线适宜、安静舒适的阅读环境也是图书馆的核心职能。传统的人工巡查方式效率低下,无法实现实时监控和即时响应。因此,构建一套集环境监测、安全预警、智能控制和远程管理于一体的自动化系统,对于实现图书馆的现代化、智能化管理,保护珍贵文献资源,提升读者体验具有重大意义。
(二)国内外研究现状
目前,智能环境监控系统在智慧农业、智能家居等领域已有广泛应用。然而,针对图书馆这一特定场景的定制化系统研究相对较少。现有方案多侧重于单一功能(如仅防火或恒温恒湿),缺乏将多种环境参数(光、声、人)与安全因素(火、烟)相结合进行联动控制的综合性解决方案。随着STM32等高性能MCU和物联网技术的成熟,开发功能全面、成本可控、稳定可靠的集成系统已成为可能,并成为智慧图书馆建设的一个重要发展方向。
二、系统总体设计
(一)系统架构
本系统采用“感知-决策-执行-云联”的四层架构:
-
感知层:由DHT11、MQ-2、火焰传感器、光敏电阻、声音传感器、HC-SR501红外人体传感器组成,负责全方位采集环境数据。
-
决策层:以STM32F103C8T6为核心,作为系统大脑,负责处理所有传感器数据,执行用户设定的逻辑算法,做出控制决策。
-
执行层:包括继电器驱动的水泵(灭火)、风扇(排烟)、LED灯(照明)以及蜂鸣器(报警),接收决策层的指令并动作。
-
云联层:通过ESP-01S Wi-Fi模块连接云端服务器或手机APP,实现数据远程透传和远程控制功能。
(二)功能模块划分
-
环境监测模块:负责六类传感器数据的定时采集与预处理。
-
安全报警模块:处理火焰、烟雾超标等紧急情况,触发最高优先级报警。
-
智能控制模块:根据光照强度自动控制灯光,并结合红外信号实现“人走灯灭”。
-
人机交互模块:通过OLED屏幕实时显示所有环境参数和系统状态。
-
通信模块:通过串口AT指令与Wi-Fi模块通信,实现与手机APP的数据交互。
-
系统管理模块:处理按键输入,管理阈值设置和设备模式。
三、硬件设计与实现
(一)系统硬件框架图

(二)系统硬件配置与功能说明表
1. 主控单元
| 器件名称 | 推荐型号 | 接口 | 功能说明 |
|---|---|---|---|
| STM32单片机 | STM32F103C8T6 | - | 作为系统核心,负责所有传感器的数据采集、逻辑判断、控制各执行器、以及与WiFi模块通信。 |
2. 传感器与输入单元
| 器件名称 | 推荐型号/类型 | 接口 | 功能说明 |
|---|---|---|---|
| 温湿度传感器 | DHT11 | 单总线 | 检测图书馆内的环境温度和湿度,确保阅读环境舒适。 |
| 火焰传感器 | 红外火焰模块 | GPIO | 检测明火火焰。检测到火焰时,模块输出数字信号(低电平),STM32可直接读取该GPIO口状态。为安防最高优先级。 |
| 烟雾传感器 | MQ-2 | ADC | 检测烟雾浓度。输出模拟电压信号,浓度越高电压越高,STM32的ADC引脚读取后与阈值比较。用于预防火灾和有人吸烟。 |
| 光敏传感器 | 光敏电阻模块 | ADC | 检测环境光照强度。输出模拟电压,光线越强电压越高。STM32根据此值自动控制灯光。 |
| 噪声传感器 | 声音传感器 | ADC | 检测环境噪音大小。输出模拟电压,噪音越大电压越高。STM32读取后判断是否超过阈值。 |
| 人体红外传感器 | HC-SR501 | GPIO | 检测区域内是否有人。检测到人体移动时,输出高电平信号。STM32通过读取该GPIO口状态判断是否有人。 |
3. 执行器与输出单元
| 器件名称 | 推荐型号/类型 | 接口 | 功能说明 |
|---|---|---|---|
| 继电器模块 | 5V 继电器模块 | GPIO | 安全控制大功率设备。STM32通过GPIO输出高/低电平,控制继电器吸合或断开,从而控制220V的水泵、风扇、照明灯。强弱电必须严格隔离! |
| 有源蜂鸣器 | 5V有源蜂鸣器 | GPIO | 发生异常情况(火焰、烟雾)时,STM32控制其鸣响,进行现场声光报警,提醒馆内人员。 |
| OLED显示屏 | SSD1306 | I²C | 实时显示所有监测数据(温湿度、烟雾浓度、光照、噪声值)和系统状态(有人/无人、报警信息),提供最直接的人机交互界面。 |
4. 通信单元
| 器件名称 | 推荐型号 | 接口 | 功能说明 |
|---|---|---|---|
| WiFi模块 | ESP-01S | UART | STM32通过串口(UART)以AT指令的方式与ESP-01S通信,将采集到的所有状态数据上传至云平台(如OneNet、阿里云),并接收从云平台下发的手机APP控制指令(如远程强制开关灯、风扇)。 |
5. 电源单元
| 器件名称 | 推荐规格 | 功能说明 |
|---|---|---|
| 电源适配器 | 5V/3A 开关电源 | 为整个控制系统(STM32、传感器、模块)提供稳定的5V电源。 |
| 注意: 水泵、大功率风扇和照明灯使用220V供电,必须通过继电器控制,与低压部分隔离。 |
核心控制逻辑说明
-
火焰报警(最高优先级):
-
条件:
if (火焰传感器输出 == 检测到火焰) -
动作:
{ 启动水泵继电器; 启动蜂鸣器; 向上推送紧急火警消息; }
-
-
烟雾报警:
-
条件:
if (烟雾浓度ADC值 > 烟雾阈值) -
动作:
{ 启动风扇继电器; 启动蜂鸣器; OLED显示报警信息; }
-
-
自动照明控制:
-
条件1(有人):
if (人体传感器 == 有人 && 光照强度ADC值 < 光照阈值) -
动作:
{ 启动照明灯继电器; } -
条件2(无人):
if (人体传感器 == 无人) -
动作:
{ 延迟一段时间后关闭照明灯继电器; }// 防止人短暂移动造成灯频繁开关
-
-
噪声警示:
-
条件:
if (噪声ADC值 > 噪声阈值) -
动作:
{ OLED显示 "请保持安静!" 或当前噪声值; }// 可考虑增加静音模式,仅显示不蜂鸣
-
-
数据上传与远程控制:
-
动作: STM32定期将所有传感器数据和状态通过WiFi上传至手机APP。
-
远程手动: 在APP上可手动强制控制风扇、灯的开关,覆盖自动逻辑。
-
关键设计注意事项
-
安全性设计:
-
强弱电隔离: 控制220V水泵、风扇、灯的电路必须使用继电器模块进行彻底隔离,布线规范,防止高压窜入低压电路损坏单片机或引发安全事故。
-
报警优先级: 火焰报警应具有最高中断优先级,即使系统处于其他状态也能立即响应。
-
-
传感器布局与抗干扰:
-
MQ-2传感器: 需定期预热才能稳定工作,且对酒精、香烟等多种烟雾敏感,阈值需合理设置以减少误报。
-
HC-SR501人体传感器: 安装位置应避免正对窗户或空调出风口,防止因气流或热源变化引起误触发。可调节其延迟时间和灵敏度。
-
-
功耗与布線:
-
图书馆环境通常需长期运行,系统待机功耗应尽可能低。
-
由于传感器众多,布线需整齐规范,建议使用排线或PCB板连接,提高系统可靠性。
-
-
云平台与APP:
-
可选择阿里云物联网平台或OneNet等,它们提供了设备接入和APP开发的完整解决方案,可以快速实现远程监控功能。
-
四、软件设计与实现
(一)开发环境搭建
使用STM32CubeIDE + STM32CubeMX。
-
用CubeMX配置引脚、ADC、I2C、UART、定时器等。
-
生成初始化代码工程。
-
在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();
}
五、系统测试与优化
(一)测试方案
进行分模块和整体测试:
-
传感器校准:用标准设备对比,校准MQ-2、光敏、声音传感器的ADC值与实际物理量的关系。
-
功能测试:
-
安全测试:用打火机测试火焰传感器,用烟雾测试MQ-2,观察水泵、风扇、蜂鸣器是否联动。
-
照明测试:遮挡光敏电阻,观察灯是否自动开启;人离开后,灯是否延迟关闭。
-
显示测试:观察OLED是否正确显示所有信息,噪声警告是否出现。
-
通信测试:测试手机APP是否能收到数据并下发控制指令。
-
(二)预期问题与优化
-
问题:HC-SR501存在检测盲区和不稳定。优化:调整安装角度,软件上采用延时关闭策略(检测不到人后延迟30秒再关灯)。
-
问题:MQ-2初始预热和误报。优化:系统上电后延迟1分钟再进行烟雾判断,并适当提高阈值。
-
问题:Wi-Fi网络不稳定。优化:在代码中加入网络状态检测和自动重连机制。
-
问题:逻辑复杂度高。优化:考虑移植FreeRTOS,将传感器采集、显示、网络、控制等任务拆分到不同线程,提高系统可靠性和可维护性。
六、结论与展望
(一)总结
本项目成功设计并实现了一个功能完备的基于STM32的图书馆监测系统。系统整合了六类传感器与四类执行器,实现了环境监测、安全防护、智能照明和远程监控四大核心功能,验证了STM32在复杂嵌入式物联网项目中作为主控器的强大能力和灵活性。
(二)未来展望
-
功能扩展:增加甲醛、PM2.5等空气质量监测模块,打造更健康的环境。
-
能源管理:增加电流电压传感器,监测灯具、空调等设备的能耗,实现节能控制。
-
技术升级:将Wi-Fi通信升级为NB-IoT或4G Cat.1,适用于没有Wi-Fi覆盖的大型图书馆仓库。
-
数据分析:将数据持久化存储在云端,利用大数据分析读者人流规律、环境变化趋势,为图书馆管理提供决策支持,真正实现“智慧图书馆”。
如有侵权,或需要完整代码,请及时联系博主。
更多推荐


所有评论(0)