基于STM32的仓库检测系统
本文设计了一套基于STM32的智能仓库监测系统,集成温湿度、烟雾及人体红外检测功能,通过DS1302时钟芯片提供精确时间戳记录。系统采用模块化设计,包含感知层(各类传感器)、控制层(STM32F103C8T6主控)、执行层(蜂鸣器报警)及云平台层(ESP8266 WiFi模块上传数据)。创新点在于实现了带时间戳的多参数监测报警,并支持远程数据查询。测试表明系统能有效监测环境异常和入侵行为,具有响应
若该文为原创文章,转载请注明原文出处。
一、引言
(一)研究背景及意义
-
背景:仓库作为物资存储的核心场所,其安全性至关重要。传统仓库管理面临环境监控不到位(温湿度、火灾隐患)、安防手段单一(依赖人工巡逻)、事件追溯困难等挑战。同时, regulatory compliance(如食品、药品仓储)对环境参数有严格记录要求。
-
意义:本设计构建了一套集环境监测(温湿度、烟雾)、实时时钟记录、智能安防(人体红外检测)和远程监控于一体的综合性系统。它能实现7×24小时无人值守监测,在异常发生时立即报警并精确记录时间,为仓库安全管理、质量追溯和灾害预防提供了完整的技术解决方案。
(二)国内外研究现状
-
国内现状:国内仓库监测系统多采用功能分离的方案,如独立的温湿度记录仪、单一的烟雾报警器,缺乏系统性的集成和远程管理能力,数据难以汇总分析。
-
国外现状:国外高端仓储领域采用基于工业计算机(IPC)或大型SCADA系统的解决方案,集成度高但成本昂贵,部署复杂,不适合中小型仓库。
-
本文创新点:本设计以STM32微控制器为核心,创新性地将高精度时钟记录(DS1302) 与多参数传感相结合,实现了带时间戳的报警事件记录,并通过WiFi云平台进行数据可视化与远程管理,提供了一套低成本、高可靠性、具备历史数据追溯能力的仓库监测系统。
二、系统总体设计
(一)系统架构
-
系统采用“感知-控制-记录-云控”架构:
-
感知层:由DHT11(温湿度)、MQ-2(烟雾)、HC-SR501(人体红外)传感器组成。
-
控制与记录层:STM32F103C8T6负责数据处理、逻辑判断;DS1302专用时钟芯片提供独立、精准的时间基准。
-
执行层:有源蜂鸣器,用于声报警。
-
人机交互层:OLED显示屏(显示实时数据与时间)、按键(进行系统设置)。
-
云平台层:通过ESP8266 WiFi模块将实时数据、报警事件及准确时间上传至云平台(如OneNET、ThingsBoard),实现手机APP远程监控与历史查询。
-
(二)功能模块划分
-
环境监测模块:采集仓库内的温湿度、烟雾浓度。
-
时间基准模块:DS1302时钟芯片,提供精确的日期和时间。
-
安防监测模块:人体红外传感器,检测非法入侵。
-
核心控制模块:STM32,系统大脑。
-
报警模块:蜂鸣器,实现本地声音报警。
-
交互与设置模块:OLED显示、按键。
-
数据通信模块:ESP8266,负责与云平台交互。
三、硬件设计与实现
(一)系统硬件框架图

(二)主控模块选型及介绍
-
型号:STM32F103C8T6
-
选型理由:该芯片基于ARM Cortex-M3内核,72MHz主频,拥有64KB Flash和20KB RAM,资源充足。其丰富的外设(多路ADC、USART、I2C、SPI、多个GPIO)能够同时满足连接所有传感器、时钟芯片、显示屏、WiFi模块以及处理复杂逻辑的需求,是工业级应用的理想选择。
(三)传感器模块选型及电路设计
| 模块名称 | 型号/类型 | 功能 | 接口方式 | 电路设计要点 |
|---|---|---|---|---|
| 温湿度传感器 | DHT11 | 检测仓库内的温度和湿度,预防因环境异常导致的物资变质。 | 单总线 | DATA引脚接STM32的PA0引脚,并连接一个4.7KΩ上拉电阻至3.3V。 |
| 烟雾传感器 | MQ-2 | 检测烟雾浓度,用于火灾早期预警。 | 模拟电压输出 | VCC接5V,AOUT引脚接STM32的ADC1通道(PA1)。需预热。 |
| 人体红外传感器 | HC-SR501 | 检测人体移动,用于防盗入侵报警。 | 数字输出 | VCC接5V,OUT引脚接STM32的PA2引脚。检测到人时输出高电平。可调节灵敏度和延时时间。 |
| 实时时钟芯片 | DS1302 | 提供精确的年、月、日、时、分、秒时间信息,为报警事件添加时间戳。 | 三线串行接口 | VCC1接主电源3.3V,VCC2接备份电池(3V纽扣电池)。SCLK、I/O、CE/RST引脚分别接STM32的PB12, PB13, PB14。 |
(四)通信模块选型及配置
-
选用ESP-01S ESP8266模块。通过AT指令集与STM32的USART2(PA2-TX, PA3-RX)进行通信,连接至云平台(如OneNET,其支持数据流和历史数据查询)。
(五)执行模块选型及驱动电路
-
选用5V有源蜂鸣器。使用NPN三极管(S8050)进行驱动,基极通过1kΩ电阻接STM32的IO口(PA4),发射极接地,集电极接蜂鸣器负极,蜂鸣器正极接5V。
(六)电源模块设计
-
采用5V/2A直流电源适配器供电。
-
使用AMS1117-3.3V稳压芯片将5V降为3.3V,为STM32、DHT11、DS1302、OLED供电。
-
MQ-2传感器、HC-SR501、蜂鸣器、ESP8266使用5V供电。
-
DS1302的备份电源:使用一颗CR2032纽扣电池(3V),确保主电源断电后时钟仍能继续运行。
四、软件设计与实现
(一)开发环境搭建
-
IDE:Keil uVision 5 / STM32CubeIDE
-
开发库:采用HAL库,开发效率高。
-
云平台:选择OneNET,因其提供完善的数据可视化、报警触发和历史数据API功能。
(二)系统软件流程图

(三)系统初始化(代码片段)
// 定义全局变量用于存储报警记录
typedef struct {
uint8_t year, month, day, hour, minute, second;
char event_type[20]; // "SMOKE", "TEMP_HIGH", "INTRUSION", etc.
} Alarm_Record;
Alarm_Record alarm_log[50]; // 循环存储最近50条报警记录
uint8_t log_index = 0;
int main(void) {
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_ADC1_Init();
MX_I2C1_Init();
MX_USART2_UART_Init();
OLED_Init();
DS1302_Init();
ESP8266_Init();
while (1) {
System_Task();
HAL_Delay(500);
}
}
(四)传感器数据采集与处理(代码片段)
// 读取DS1302时间
void DS1302_GetTime(Time_Struct *time) {
// 通过三线接口读取DS1302的时钟寄存器
// 将BCD码转换为十进制数并填充到结构体中
}
// 读取所有数据
void Read_All_Sensors(Time_Struct *now, float *temp, float *humi, uint16_t *smoke, uint8_t *pir) {
DS1302_GetTime(now);
DHT11_Read(temp, humi);
*smoke = HAL_ADC_GetValue(&hadc1);
*pir = HAL_GPIO_ReadPin(PIR_GPIO_Port, PIR_Pin);
}
(五)安防逻辑实现(代码片段)
void Check_Alarm_Condition(Time_Struct t, float temp, float humi, uint16_t smoke, uint8_t pir) {
uint8_t alarm_triggered = 0;
char event[20] = {0};
// 1. 环境报警判断
if (smoke > smoke_threshold) {
alarm_triggered = 1;
strcpy(event, "SMOKE_HIGH");
} else if (temp > temp_max_threshold) {
alarm_triggered = 1;
strcpy(event, "TEMP_HIGH");
} else if (temp < temp_min_threshold) {
alarm_triggered = 1;
strcpy(event, "TEMP_LOW");
}
// ... 同样判断湿度
// 2. 安防报警判断 (仅在布防模式下)
if (system_mode == GUARD_MODE && pir) {
alarm_triggered = 1;
strcpy(event, "INTRUSION");
}
// 3. 触发报警与记录
if (alarm_triggered) {
Buzzer_ON();
// 记录报警事件
alarm_log[log_index].year = t.year;
alarm_log[log_index].month = t.month;
alarm_log[log_index].day = t.day;
alarm_log[log_index].hour = t.hour;
alarm_log[log_index].minute = t.minute;
alarm_log[log_index].second = t.second;
strcpy(alarm_log[log_index].event_type, event);
log_index = (log_index + 1) % 50; // 循环覆盖
Upload_Alarm_Event(&t, event); // 立即上传报警事件
} else {
Buzzer_OFF();
}
}
(六)远程通信功能实现(代码片段)
// 上传报警事件(带时间戳)
void Upload_Alarm_Event(Time_Struct *t, const char *event) {
char json_buffer[256];
sprintf(json_buffer, "{\"datastreams\":["
"{\"id\":\"alarm_event\",\"datapoints\":[{\"value\":\"%s\", \"at\":\"%02d-%02d-%02dT%02d:%02d:%02d\"}]}"
"]}",
event, t->year, t->month, t->day, t->hour, t->minute, t->second);
ESP8266_HTTP_Post("/devices/XXX/datapoints", json_buffer);
}
// 上传常规数据
void Upload_Regular_Data(float temp, float humi, uint16_t smoke, uint8_t pir) {
char json_buffer[128];
sprintf(json_buffer, "{\"datastreams\":["
"{\"id\":\"temperature\",\"datapoints\":[{\"value\":%.1f}]},"
"{\"id\":\"humidity\",\"datapoints\":[{\"value\":%.1f}]},"
"{\"id\":\"smoke\",\"datapoints\":[{\"value\":%d}]},"
"{\"id\":\"pir\",\"datapoints\":[{\"value\":%d}]}"
"]}",
temp, humi, smoke, pir);
ESP8266_HTTP_Post("/devices/XXX/datapoints", json_buffer);
}
// 响应APP查询历史报警记录的请求
void Handle_History_Query(void) {
// 遍历alarm_log数组,将报警记录组织成JSON格式并发送给APP
}
五、系统测试与优化
(一)测试方案
-
功能测试:
-
环境报警:用电吹风加热DHT11,测试高温报警;用烟熏MQ-2,测试烟雾报警。
-
入侵报警:在布防模式下,在红外传感器前移动,测试入侵报警及时间记录。
-
时间记录:手动触发报警,检查OLED显示和云平台记录的时间戳是否准确。
-
设置功能:测试通过按键设置时间、阈值、模式的功能。
-
远程查询:在APP端查询历史报警记录,测试数据准确性。
-
-
性能测试:测试DS1302在主电源断电后的走时准确性、系统长期运行的稳定性。
(二)测试结果与分析
-
记录测试数据,分析报警响应延迟、时间记录精度、数据上传成功率等指标。
(三)系统优化
-
软件优化:为传感器数据增加数字滤波(如限幅滤波法),防止误报。实现报警延时确认功能,避免瞬时干扰。
-
硬件优化:为DS1302的备份电池设计充电电路(如果使用可充电电池)。增加EEPROM芯片,扩展报警事件的存储容量,防止循环覆盖导致重要历史记录丢失。
六、结论与展望
(一)结论
-
本项目成功设计并实现了一套基于STM32的仓库智能监测与安防系统。系统不仅实现了环境参数的实时监测与报警,更创新地集成了独立时钟芯片,为所有报警事件提供了精确的时间戳记录,极大地增强了系统的可靠性和可追溯性,达到了设计要求。
(二)未来展望
-
增加本地数据存储:扩展SD卡模块,将长时间的环境数据以CSV格式存储在本地,形成完整的历史数据库,便于深度分析。
-
视频联动认证:在发生入侵报警时,自动触发网络摄像头抓拍图片并上传,为报警事件提供可视化证据,降低误报率。
-
多节点组网监测:针对大型仓库,开发基于Zigbee或LoRa的无线传感网络,将多个监测节点数据汇总至一个网关,再统一上传至云平台。
-
预测性维护:基于历史温湿度数据,利用简单算法预测仓库环境趋势,提前发出维护建议(如“未来48小时湿度可能超标,建议除湿”)。
如有侵权,或需要完整代码,请及时联系博主。
更多推荐



所有评论(0)