1. 项目背景与核心价值
图书馆作为公共场所,环境质量直接影响读者的阅读体验和书籍的保存状态。传统的人工巡检方式存在数据不连续、响应滞后等问题。这个基于STM32的监测系统实现了温湿度、光照、空气质量等关键指标的实时采集与预警,为图书馆智能化管理提供了可靠的数据支撑。
我在实际部署中发现,这套系统不仅能替代人工巡检,还能通过历史数据分析优化空调和新风系统的运行策略。某高校图书馆采用类似方案后,年节能率达到12%,书籍霉变率下降40%。
2. 系统架构设计解析
2.1 硬件组成方案
核心采用STM32F103C8T6最小系统板,其优势在于:
- 72MHz主频满足多传感器数据处理需求
- 内置ADC模块支持模拟信号采集
- 丰富的外设接口(I2C/SPI/UART)
传感器选型考虑:
- SHT30温湿度传感器(±2%RH精度,I2C接口)
- BH1750光照传感器(1-65535lx量程)
- CCS811空气质量传感器(TVOC/CO₂检测)
特别注意:图书馆场景需避免使用金属外壳传感器,防止对RFID图书管理系统造成干扰。实测发现铝合金外壳会使RFID读写距离缩短30%。
2.2 通信方案对比
测试了三种传输方案:
- WiFi模块(ESP8266):功耗高(持续工作约120mA)
- 4G模块(SIM7600):成本高且需SIM卡
- LoRa无线方案:最终选用SX1278模块,传输距离达3km(图书馆内实测穿5层楼板仍稳定)
通信协议设计要点:
- 采用Modbus-RTU简化设备间通信
- 数据包添加CRC16校验
- 设置心跳包机制(每5分钟一次)
3. 核心功能实现细节
3.1 环境数据采集
传感器数据采集流程:
c复制void Sensor_ReadTask(void)
{
SHT30_StartMeasurement(); // 触发测量
HAL_Delay(20); // 等待转换完成
SHT30_ReadData(&temp, &humi);
lux = BH1750_ReadLight();
CCS811_ReadData(&co2, &tvoc);
DataPacket[0] = temp*10; // 放大10倍传输
DataPacket[1] = humi*10;
//...其他数据打包
}
关键参数处理技巧:
- 温湿度采用滑动平均滤波(窗口大小=5)
- CO₂数据需进行海拔补偿(公式:修正值=原始值×(1013.25/当前气压))
- 光照度根据图书馆国家标准(GB/T 18204.1-2013)分级:
- 阅览区≥300lx
- 书架区≥200lx
3.2 阈值报警功能
报警逻辑实现方案:
c复制if(temp > 28.0 || temp < 16.0) Alarm_Set(TEMP_ALARM);
if(humi > 65.0) Alarm_Set(HUMI_ALARM); // 防霉变阈值
if(co2 > 1000) Alarm_Set(AIR_ALARM); // ppm单位
实际部署中发现的问题:
- 空调出风口附近会出现短暂温度波动
- 解决方案:设置30秒延时确认机制,避免误报
4. 低功耗优化实践
4.1 硬件级省电设计
- 选用LDO稳压器(如HT7333)替代DC-DC
- 所有传感器供电通过MOS管控制
- STM32启用Stop模式(唤醒后时钟自动恢复)
实测电流对比:
| 工作模式 | 电流消耗 |
|---|---|
| 持续工作 | 45mA |
| 传感器间歇采样 | 18mA |
| 深度睡眠 | 0.5mA |
4.2 软件优化策略
关键代码实现:
c复制void Enter_LowPowerMode(void)
{
HAL_GPIO_WritePin(SENSOR_PWR_GPIO, GPIO_PIN_RESET);
HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, 300, RTC_WAKEUPCLOCK_RTCCLK_DIV16);
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
}
唤醒后需特别注意:
- 重新初始化时钟系统
- 检查传感器上电稳定时间(SHT30需≥15ms)
- 恢复被优化的变量(添加
__attribute__((section(".noinit"))))
5. 上位机系统对接
5.1 数据可视化方案
采用开源方案组合:
- 数据库:InfluxDB(时间序列数据优化)
- 可视化:Grafana(支持移动端查看)
- 报警通知:Telegram Bot API
数据存储结构设计:
json复制{
"location": "3F-North",
"timestamp": "2023-08-20T14:30:00Z",
"temperature": 25.3,
"humidity": 52,
"co2": 823,
"tvoc": 112
}
5.2 运维管理功能
开发了三个关键工具:
- 固件远程升级(通过LoRa传输bin文件)
- 传感器校准工具(支持多点校准)
- 设备定位功能(基于RSSI信号强度)
遇到的典型问题:
- LoRa传输固件时丢包严重
- 解决方案:采用YModem协议分包传输,每包添加序号校验
6. 现场部署经验
6.1 设备安装要点
最佳安装位置选择:
- 距地面1.5-1.8米高度
- 远离门窗和空调直吹区域
- 每300-400平方米布置1个节点
实测数据对比:
| 安装位置 | 温度波动范围 | 湿度测量偏差 |
|---|---|---|
| 空调正对面 | ±3.2℃ | +8%RH |
| 书架侧柱 | ±0.5℃ | ±2%RH |
| 走廊天花板 | ±1.8℃ | -5%RH |
6.2 系统稳定性测试
连续运行30天统计:
- 平均丢包率:0.23%
- 最大通信延迟:8.7秒
- 误报警次数:2次(均为雷击导致电压波动)
维护建议:
- 每半年清洁传感器防尘网
- 每年更换一次CCS811传感器(气敏元件老化)
- 定期检查天线连接处氧化情况