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

一、引言

(一)研究背景及意义

  • 背景:仓库作为物资存储的核心场所,其安全性至关重要。传统仓库管理面临环境监控不到位(温湿度、火灾隐患)、安防手段单一(依赖人工巡逻)、事件追溯困难等挑战。同时, regulatory compliance(如食品、药品仓储)对环境参数有严格记录要求。

  • 意义:本设计构建了一套集环境监测(温湿度、烟雾)、实时时钟记录智能安防(人体红外检测)和远程监控于一体的综合性系统。它能实现7×24小时无人值守监测,在异常发生时立即报警并精确记录时间,为仓库安全管理、质量追溯和灾害预防提供了完整的技术解决方案。

(二)国内外研究现状

  • 国内现状:国内仓库监测系统多采用功能分离的方案,如独立的温湿度记录仪、单一的烟雾报警器,缺乏系统性的集成和远程管理能力,数据难以汇总分析。

  • 国外现状:国外高端仓储领域采用基于工业计算机(IPC)或大型SCADA系统的解决方案,集成度高但成本昂贵,部署复杂,不适合中小型仓库。

  • 本文创新点:本设计以STM32微控制器为核心,创新性地将高精度时钟记录(DS1302) 与多参数传感相结合,实现了带时间戳的报警事件记录,并通过WiFi云平台进行数据可视化与远程管理,提供了一套低成本、高可靠性、具备历史数据追溯能力的仓库监测系统。

二、系统总体设计

(一)系统架构

  • 系统采用“感知-控制-记录-云控”架构:

    • 感知层:由DHT11(温湿度)、MQ-2(烟雾)、HC-SR501(人体红外)传感器组成。

    • 控制与记录层:STM32F103C8T6负责数据处理、逻辑判断;DS1302专用时钟芯片提供独立、精准的时间基准。

    • 执行层:有源蜂鸣器,用于声报警。

    • 人机交互层:OLED显示屏(显示实时数据与时间)、按键(进行系统设置)。

    • 云平台层:通过ESP8266 WiFi模块将实时数据、报警事件及准确时间上传至云平台(如OneNET、ThingsBoard),实现手机APP远程监控与历史查询。

(二)功能模块划分

  1. 环境监测模块:采集仓库内的温湿度、烟雾浓度。

  2. 时间基准模块:DS1302时钟芯片,提供精确的日期和时间。

  3. 安防监测模块:人体红外传感器,检测非法入侵。

  4. 核心控制模块:STM32,系统大脑。

  5. 报警模块:蜂鸣器,实现本地声音报警。

  6. 交互与设置模块:OLED显示、按键。

  7. 数据通信模块: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
}

五、系统测试与优化

(一)测试方案

  1. 功能测试

    • 环境报警:用电吹风加热DHT11,测试高温报警;用烟熏MQ-2,测试烟雾报警。

    • 入侵报警:在布防模式下,在红外传感器前移动,测试入侵报警及时间记录。

    • 时间记录:手动触发报警,检查OLED显示和云平台记录的时间戳是否准确。

    • 设置功能:测试通过按键设置时间、阈值、模式的功能。

    • 远程查询:在APP端查询历史报警记录,测试数据准确性。

  2. 性能测试:测试DS1302在主电源断电后的走时准确性、系统长期运行的稳定性。

(二)测试结果与分析

  • 记录测试数据,分析报警响应延迟、时间记录精度、数据上传成功率等指标。

(三)系统优化

  • 软件优化:为传感器数据增加数字滤波(如限幅滤波法),防止误报。实现报警延时确认功能,避免瞬时干扰。

  • 硬件优化:为DS1302的备份电池设计充电电路(如果使用可充电电池)。增加EEPROM芯片,扩展报警事件的存储容量,防止循环覆盖导致重要历史记录丢失。

六、结论与展望

(一)结论

  • 本项目成功设计并实现了一套基于STM32的仓库智能监测与安防系统。系统不仅实现了环境参数的实时监测与报警,更创新地集成了独立时钟芯片,为所有报警事件提供了精确的时间戳记录,极大地增强了系统的可靠性和可追溯性,达到了设计要求。

(二)未来展望

  1. 增加本地数据存储:扩展SD卡模块,将长时间的环境数据以CSV格式存储在本地,形成完整的历史数据库,便于深度分析。

  2. 视频联动认证:在发生入侵报警时,自动触发网络摄像头抓拍图片并上传,为报警事件提供可视化证据,降低误报率。

  3. 多节点组网监测:针对大型仓库,开发基于Zigbee或LoRa的无线传感网络,将多个监测节点数据汇总至一个网关,再统一上传至云平台。

  4. 预测性维护:基于历史温湿度数据,利用简单算法预测仓库环境趋势,提前发出维护建议(如“未来48小时湿度可能超标,建议除湿”)。

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

Logo

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

更多推荐