基于STM32设计的仓库环境监测与预警系统设计文档

举报
DS小龙哥 发表于 2024/12/25 14:46:52 2024/12/25
【摘要】 随着工业化和现代化的进程,尤其是在制造业、食品业、医药业等行业,仓库环境的监控和管理成为了至关重要的一环。尤其是在存储易腐品、药品、电子产品等货物时,温度、湿度、气体浓度等环境参数的异常变化可能导致物品的质量和安全性问题。为了保证仓库内物品的安全存储,及时发现环境参数异常并采取必要措施,仓库环境监测系统应运而生。

 


目录

  1. 1. 项目开发背景
  2. 2. 设计实现的功能
  3. 3. 项目硬件模块组成
  4. 4. 设计思路
  5. 5. 系统功能总结
  6. 6. 使用的模块的技术详情介绍
  7. 7. 总结

1. 项目开发背景

随着工业化和现代化的进程,尤其是在制造业、食品业、医药业等行业,仓库环境的监控和管理成为了至关重要的一环。尤其是在存储易腐品、药品、电子产品等货物时,温度、湿度、气体浓度等环境参数的异常变化可能导致物品的质量和安全性问题。为了保证仓库内物品的安全存储,及时发现环境参数异常并采取必要措施,仓库环境监测系统应运而生。

传统的环境监测方式往往依赖人工检查或简单的环境检测设备,但这些方式往往难以实现实时监控与自动预警。物联网技术的发展为仓库环境监控系统提供了更加智能、高效、实时的数据采集、传输和处理手段。本项目基于STM32微控制器设计一个环境监测与预警系统,具备温湿度监测、气体检测、墙壁水汽检测、蜂鸣器报警、通风控制等功能,支持数据上传至华为云物联网平台并通过网页实现数据可视化与控制。

本项目不仅满足了传统环境监测的需求,还通过物联网和大数据分析提升了仓库管理的效率和智能化水平,具有重要的实际应用价值。

image-20241225143902890

2. 设计实现的功能

本项目设计的仓库环境监测与预警系统的主要功能如下:

  1. 1. 环境温度和湿度检测 使用SHT30温湿度传感器实时监测仓库内的环境温度和湿度,并通过显示屏和云平台实时展示。
  2. 2. 二氧化碳浓度检测 使用SGP30传感器检测仓库内的二氧化碳浓度,提供空气质量监测功能。
  3. 3. 墙壁水汽检测 安装雨滴传感器以检测墙壁或角落的水汽情况,当水汽超标时,通过蜂鸣器进行报警。
  4. 4. 可燃气体检测 使用MQ9气体传感器检测仓库内的一氧化碳、甲烷等可燃气体浓度,当检测到气体浓度超标时,触发蜂鸣器报警。
  5. 5. 通风风扇控制 使用继电器控制通风风扇的启停,用户可以手动按键开启或关闭风扇,确保仓库通风良好。
  6. 6. 报警功能 当环境参数不符合设定要求时,系统通过蜂鸣器报警并在可视化大屏上显示报警信息,通知工作人员及时处理。
  7. 7. 可视化大屏显示 使用1.44寸LCD显示屏显示温湿度、二氧化碳浓度、气体浓度、墙壁水汽等环境数据。
  8. 8. 数据上传与云平台显示 系统通过ESP8266模块连接Wi-Fi,将数据通过MQTT协议上传到华为云物联网平台,实时显示数据,并支持历史数据查询和分析。
  9. 9. Web端数据可视化与控制 使用Python编写后端服务器,接收从华为云物联网平台转发的数据,并通过HTML前端页面展示实时数据与报警状态,用户可通过Web页面进行控制操作。
  10. 10. 数据存储与分析 服务器支持本地存储数据,并通过云平台的数据存储与分析功能,提供环境参数历史数据的查看与分析,辅助决策与管理。

3. 项目硬件模块组成

本项目所使用的硬件模块如下:

  1. 1. 主控芯片:STM32F103RCT6
    • • 主要负责系统的控制与数据处理,协调各个模块的工作。
    • • 具有丰富的IO口、USART接口、PWM输出等功能,适合本项目的多传感器数据采集和控制需求。
  2. 2. 温湿度传感器:SHT30
    • • 用于检测仓库内的环境温度和湿度。
    • • 具有高精度和稳定性,通过I2C接口与STM32通信。
  3. 3. 二氧化碳浓度传感器:SGP30
    • • 用于检测仓库内的二氧化碳浓度,具有较高的检测精度。
    • • 同样采用I2C接口进行数据通信。
  4. 4. 可燃气体传感器:MQ9
    • • 用于检测仓库内一氧化碳、甲烷等气体的浓度。
    • • 通过模拟输出与STM32进行通信。
  5. 5. 雨滴传感器
    • • 用于检测墙壁或角落的水汽情况。
    • • 安装在墙壁或角落,如果检测到水汽,则通过蜂鸣器进行报警。
  6. 6. 蜂鸣器
    • • 用于报警,当环境参数不符合要求时,蜂鸣器发出声音提醒。
  7. 7. 通风风扇:继电器控制
    • • 用于控制通风风扇的开关,通过继电器与STM32连接。
  8. 8. Wi-Fi模块:ESP8266
    • • 用于与本地网络连接,将采集到的环境数据上传到华为云物联网平台。
    • • 支持MQTT协议,用于数据上传。
  9. 9. 显示屏:1.44寸LCD
    • • 显示当前仓库的环境数据,包括温湿度、二氧化碳浓度、气体浓度等。
  10. 10. 电源模块:5V 2A外部稳压模块
    • • 为系统提供稳定的电源。

4. 设计思路

4.1 系统架构

本系统由硬件和软件两部分组成,硬件部分主要包括温湿度传感器、二氧化碳传感器、可燃气体传感器、雨滴传感器、蜂鸣器、Wi-Fi模块等。系统使用STM32F103RCT6作为主控芯片,通过I2C、GPIO、PWM等接口与传感器和执行器连接。

系统通过ESP8266 Wi-Fi模块实现数据无线传输,数据通过MQTT协议上传至华为云物联网平台。云端平台负责数据存储和历史数据分析,同时提供API接口供本地服务器拉取数据。通过Web页面,用户可以查看实时环境数据并进行控制操作。

4.2 数据采集与处理

  •  温湿度检测:使用SHT30传感器实时采集仓库内的环境温度和湿度,STM32通过I2C接口与SHT30通信,获取数据并进行处理。
  •  气体检测:通过MQ9传感器获取一氧化碳等气体的浓度,当浓度超标时触发报警。
  •  墙壁水汽检测:雨滴传感器监测墙壁或角落的水汽,当水汽超标时,蜂鸣器报警。
  •  二氧化碳浓度检测:SGP30传感器监测二氧化碳浓度。

4.3 报警与控制

  •  蜂鸣器报警:当检测到温湿度、气体浓度、墙壁水汽等不符合要求时,蜂鸣器发出报警声音。
  •  风扇控制:通过继电器控制通风风扇的启停,确保仓库内空气流通。
  •  按键控制:用户可以通过按键手动启动或关闭风扇。

4.4 数据上传与可视化

  •  云数据上传:数据通过ESP8266模块通过Wi-Fi上传到华为云物联网平台,使用MQTT协议实现数据传输。
  •  Web端可视化:后端服务器使用Python开发,前端使用HTML5展示实时数据、报警信息和控制界面。

5. 系统功能总结

功能模块 描述
环境温湿度检测 通过SHT30传感器检测温湿度数据
二氧化碳浓度检测 通过SGP30传感器检测二氧化碳浓度
可燃气体检测 通过MQ9传感器检测一氧化碳、甲烷等气体浓度
墙壁水汽检测 通过雨滴传感器检测水汽情况
报警功能 超过设定阈值时蜂鸣器报警
风扇控制 通过继电器控制风扇启停
数据上传 通过Wi-Fi模块和MQTT协议上传数据至

云平台 | | Web端可视化 | 通过Web前端展示数据、报警信息及控制操作 |


6. 使用的模块的技术详情介绍

6.1 SHT30 温湿度传感器

  •  工作原理:SHT30是一款数字输出型温湿度传感器,采用I2C协议与STM32通信。具有高精度、低功耗的特点,适合长期稳定监测环境条件。

6.2 SGP30 二氧化碳传感器

  •  工作原理:SGP30是一款基于金属氧化物传感器的二氧化碳传感器,采用I2C通信协议,能精确检测空气中的二氧化碳浓度。

6.3 MQ9 可燃气体传感器

  •  工作原理:MQ9是常见的气体传感器,可检测一氧化碳、甲烷等可燃气体。输出模拟信号,STM32通过ADC读取数据,进行气体浓度判断。

6.4 雨滴传感器

  •  工作原理:雨滴传感器检测环境中的水汽,当水汽浓度超标时,通过触发高电平输出控制蜂鸣器报警。

6.5 ESP8266 Wi-Fi模块

  •  工作原理:ESP8266模块提供Wi-Fi无线网络连接,支持通过MQTT协议与云平台进行通信,传输环境数据。

6.6 蜂鸣器

  •  工作原理:蜂鸣器通过接收到高电平信号时发出响声,用于报警通知。

7. 总结

本项目成功设计并实现了基于STM32的仓库环境监测与预警系统。通过结合多种传感器、Wi-Fi模块以及云平台,能够实时监测仓库内的温湿度、气体浓度、水汽等环境参数,并在出现异常时通过蜂鸣器报警提醒工作人员。同时,系统支持数据上传至云平台,提供实时数据展示和历史数据分析,帮助管理人员更好地了解仓库环境状况,做出决策。

该系统具备高效性、智能化、实时性强等特点,具有广泛的应用前景,可以为各类仓储、生产线等环境提供有效的监测和预警保障。

8. STM32代码设计

以下是基于STM32的仓库环境监测与预警系统的 main.c 文件代码。主程序负责初始化各个模块,进行数据采集,并通过蜂鸣器进行报警,最后通过Wi-Fi上传数据到华为云物联网平台。

#include "stm32f1xx_hal.h"
#include "stdio.h"
#include "string.h"

// 引入各传感器模块的头文件
#include "sht30.h"          // 温湿度传感器
#include "sgp30.h"          // 二氧化碳传感器
#include "mq9.h"            // 可燃气体传感器
#include "rain_sensor.h"    // 水汽传感器
#include "esp8266.h"        // WiFi模块
#include "lcd.h"            // LCD显示
#include "relay.h"          // 继电器控制风扇
#include "buzzer.h"         // 蜂鸣器

// 定义环境监测阈值
#define TEMP_THRESHOLD_HIGH   30  // 高温阈值(单位:℃)
#define TEMP_THRESHOLD_LOW    10  // 低温阈值(单位:℃)
#define HUMIDITY_THRESHOLD_LOW 30  // 低湿度阈值(单位:%)
#define CO_THRESHOLD          10  // 一氧化碳浓度阈值(单位:ppm)
#define CO2_THRESHOLD         1000 // 二氧化碳浓度阈值(单位:ppm)
#define WATER_VAPOR_THRESHOLD 50  // 水汽浓度阈值(单位:%)

UART_HandleTypeDef huart1;  // 串口1,用于调试
I2C_HandleTypeDef hi2c1;    // I2C1,用于温湿度传感器、SGP30
SPI_HandleTypeDef hspi1;    // SPI1,用于LCD显示
WiFi_Module wifi;           // Wi-Fi模块

// 函数声明
void SystemClock_Config(void);
void MX_GPIO_Init(void);
void MX_USART1_UART_Init(void);
void MX_I2C1_Init(void);
void MX_SPI1_Init(void);
void read_environment_data(void);
void display_data_on_lcd(float temperature, float humidity, float co2, float co);
void send_data_to_cloud(float temperature, float humidity, float co2, float co);
void check_alerts(float temperature, float humidity, float co2, float co, int water_vapor);
void control_relay(int status);
void control_buzzer(int status);

int main(void)
{
    // 系统初始化
    HAL_Init();
    SystemClock_Config();
    MX_GPIO_Init();
    MX_USART1_UART_Init();
    MX_I2C1_Init();
    MX_SPI1_Init();

    // 初始化传感器
    SHT30_Init(&hi2c1);  // 初始化温湿度传感器
    SGP30_Init(&hi2c1);  // 初始化二氧化碳传感器
    MQ9_Init();          // 初始化可燃气体传感器
    Rain_Sensor_Init();  // 初始化水汽传感器
    ESP8266_Init(&huart1); // 初始化Wi-Fi模块
    LCD_Init(&hspi1);     // 初始化LCD显示
    Buzzer_Init();        // 初始化蜂鸣器
    Relay_Init();         // 初始化继电器(风扇控制)

    // 系统主循环
    while (1)
    {
        // 读取环境数据
        float temperature, humidity, co2, co;
        int water_vapor;
        read_environment_data(&temperature, &humidity, &co2, &co, &water_vapor);

        // 显示数据到LCD
        display_data_on_lcd(temperature, humidity, co2, co);

        // 上传数据到云平台
        send_data_to_cloud(temperature, humidity, co2, co);

        // 检查是否需要报警或执行控制
        check_alerts(temperature, humidity, co2, co, water_vapor);

    }
}

// 读取环境数据(温湿度,CO2浓度,CO浓度,水汽浓度)
void read_environment_data(float *temperature, float *humidity, float *co2, float *co, int *water_vapor)
{
    // 获取温湿度数据
    *temperature = SHT30_ReadTemperature();
    *humidity = SHT30_ReadHumidity();

    // 获取CO2浓度数据
    *co2 = SGP30_ReadCO2();

    // 获取CO浓度数据
    *co = MQ9_ReadCO();

    // 获取水汽浓度数据
    *water_vapor = Rain_Sensor_Read();
}

// 将数据显示在LCD屏上
void display_data_on_lcd(float temperature, float humidity, float co2, float co)
{
    char display_buffer[50];
    
    // 显示温湿度数据
    sprintf(display_buffer, "Temp: %.2fC Hum: %.2f%%", temperature, humidity);
    LCD_DisplayStringLine(0, (uint8_t*)display_buffer);

    // 显示CO2和CO数据
    sprintf(display_buffer, "CO2: %.2fppm CO: %.2fppm", co2, co);
    LCD_DisplayStringLine(1, (uint8_t*)display_buffer);
}

// 将数据上传到云平台
void send_data_to_cloud(float temperature, float humidity, float co2, float co)
{
    // 将数据通过MQTT协议上传到华为云物联网平台
    char payload[200];
    sprintf(payload, "{\"temperature\": %.2f, \"humidity\": %.2f, \"co2\": %.2f, \"co\": %.2f}",
            temperature, humidity, co2, co);
    ESP8266_MQTT_Publish("warehouse/environment", payload);  // 假设该主题用于上传环境数据
}

// 检查环境参数,判断是否需要报警或控制
void check_alerts(float temperature, float humidity, float co2, float co, int water_vapor)
{
    // 检查温度
    if (temperature > TEMP_THRESHOLD_HIGH || temperature < TEMP_THRESHOLD_LOW)
    {
        control_buzzer(1);  // 超出温度范围,启动蜂鸣器报警
    }
    // 检查湿度
    if (humidity < HUMIDITY_THRESHOLD_LOW)
    {
        control_buzzer(1);  // 湿度过低,启动蜂鸣器报警
    }
    // 检查二氧化碳浓度
    if (co2 > CO2_THRESHOLD)
    {
        control_buzzer(1);  // 二氧化碳浓度过高,启动蜂鸣器报警
    }
    // 检查可燃气体浓度
    if (co > CO_THRESHOLD)
    {
        control_buzzer(1);  // 可燃气体浓度过高,启动蜂鸣器报警
    }
    // 检查水汽浓度
    if (water_vapor > WATER_VAPOR_THRESHOLD)
    {
        control_buzzer(1);  // 水汽浓度过高,启动蜂鸣器报警
    }

    // 控制风扇(继电器控制)
    if (temperature > TEMP_THRESHOLD_HIGH)
    {
        control_relay(1);  // 启动风扇
    }
    else if (temperature < TEMP_THRESHOLD_LOW)
    {
        control_relay(0);  // 关闭风扇
    }
}

// 控制继电器(风扇)
void control_relay(int status)
{
    if (status)
    {
        Relay_On();  // 打开风扇
    }
    else
    {
        Relay_Off();  // 关闭风扇
    }
}

// 控制蜂鸣器
void control_buzzer(int status)
{
    if (status)
    {
        Buzzer_On();  // 启动蜂鸣器报警
    }
    else
    {
        Buzzer_Off();  // 关闭蜂鸣器
    }
}

 

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。