目錄
- 項目開發背景
- 設計實現的功能
- 項目硬件模塊組成
- 設計思路
- 系統功能總結
- 使用的模塊的技術詳情介紹
- 總結
1. 項目開發背景
隨著工業化和現代化的進程,尤其是在制造業、食品業、醫藥業等行業,倉庫環境的監控和管理成為了至關重要的一環。尤其是在存儲易腐品、藥品、電子產品等貨物時,溫度、濕度、氣體濃度等環境參數的異常變化可能導致物品的質量和安全性問題。為了保證倉庫內物品的安全存儲,及時發現環境參數異常并采取必要措施,倉庫環境監測系統應運而生。
傳統的環境監測方式往往依賴人工檢查或簡單的環境檢測設備,但這些方式往往難以實現實時監控與自動預警。物聯網技術的發展為倉庫環境監控系統提供了更加智能、高效、實時的數據采集、傳輸和處理手段。本項目基于STM32微控制器設計一個環境監測與預警系統,具備溫濕度監測、氣體檢測、墻壁水汽檢測、蜂鳴器報警、通風控制等功能,支持數據上傳至華為云物聯網平臺并通過網頁實現數據可視化與控制。
本項目不僅滿足了傳統環境監測的需求,還通過物聯網和大數據分析提升了倉庫管理的效率和智能化水平,具有重要的實際應用價值。
2. 設計實現的功能
本項目設計的倉庫環境監測與預警系統的主要功能如下:
- 環境溫度和濕度檢測
使用SHT30溫濕度傳感器實時監測倉庫內的環境溫度和濕度,并通過顯示屏和云平臺實時展示。 - 二氧化碳濃度檢測
使用SGP30傳感器檢測倉庫內的二氧化碳濃度,提供空氣質量監測功能。 - 墻壁水汽檢測
安裝雨滴傳感器以檢測墻壁或角落的水汽情況,當水汽超標時,通過蜂鳴器進行報警。 - 可燃氣體檢測
使用MQ9氣體傳感器檢測倉庫內的一氧化碳、甲烷等可燃氣體濃度,當檢測到氣體濃度超標時,觸發蜂鳴器報警。 - 通風風扇控制
使用繼電器控制通風風扇的啟停,用戶可以手動按鍵開啟或關閉風扇,確保倉庫通風良好。 - 報警功能
當環境參數不符合設定要求時,系統通過蜂鳴器報警并在可視化大屏上顯示報警信息,通知工作人員及時處理。 - 可視化大屏顯示
使用1.44寸LCD顯示屏顯示溫濕度、二氧化碳濃度、氣體濃度、墻壁水汽等環境數據。 - 數據上傳與云平臺顯示
系統通過ESP8266模塊連接Wi-Fi,將數據通過MQTT協議上傳到華為云物聯網平臺,實時顯示數據,并支持歷史數據查詢和分析。 - Web端數據可視化與控制
使用Python編寫后端服務器,接收從華為云物聯網平臺轉發的數據,并通過HTML前端頁面展示實時數據與報警狀態,用戶可通過Web頁面進行控制操作。 - 數據存儲與分析
服務器支持本地存儲數據,并通過云平臺的數據存儲與分析功能,提供環境參數歷史數據的查看與分析,輔助決策與管理。
3. 項目硬件模塊組成
本項目所使用的硬件模塊如下:
- 主控芯片:STM32F103RCT6
- 主要負責系統的控制與數據處理,協調各個模塊的工作。
- 具有豐富的IO口、USART接口、PWM輸出等功能,適合本項目的多傳感器數據采集和控制需求。
- 溫濕度傳感器:SHT30
- 二氧化碳濃度傳感器:SGP30
- 用于檢測倉庫內的二氧化碳濃度,具有較高的檢測精度。
- 同樣采用I2C接口進行數據通信。
- 可燃氣體傳感器:MQ9
- 用于檢測倉庫內一氧化碳、甲烷等氣體的濃度。
- 通過模擬輸出與STM32進行通信。
- 雨滴傳感器
- 用于檢測墻壁或角落的水汽情況。
- 安裝在墻壁或角落,如果檢測到水汽,則通過蜂鳴器進行報警。
- 蜂鳴器
- 用于報警,當環境參數不符合要求時,蜂鳴器發出聲音提醒。
- 通風風扇:繼電器控制
- 用于控制通風風扇的開關,通過繼電器與STM32連接。
- Wi-Fi模塊:ESP8266
- 用于與本地網絡連接,將采集到的環境數據上傳到華為云物聯網平臺。
- 支持MQTT協議,用于數據上傳。
- 顯示屏:1.44寸LCD
- 顯示當前倉庫的環境數據,包括溫濕度、二氧化碳濃度、氣體濃度等。
- 電源模塊: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 可燃氣體傳感器
6.4 雨滴傳感器
- 工作原理 :雨滴傳感器檢測環境中的水汽,當水汽濃度超標時,通過觸發高電平輸出控制蜂鳴器報警。
6.5 ESP8266 Wi-Fi模塊
- 工作原理 :ESP8266模塊提供Wi-Fi無線網絡連接,支持通過MQTT協議與云平臺進行通信,傳輸環境數據。
6.6 蜂鳴器
- 工作原理 :蜂鳴器通過接收到高電平信號時發出響聲,用于報警通知。
7. 總結
本項目成功設計并實現了基于STM32的倉庫環境監測與預警系統。通過結合多種傳感器、Wi-Fi模塊以及云平臺,能夠實時監測倉庫內的溫濕度、氣體濃度、水汽等環境參數,并在出現異常時通過蜂鳴器報警提醒工作人員。同時,系統支持數據上傳至云平臺,提供實時數據展示和歷史數據分析,幫助管理人員更好地了解倉庫環境狀況,做出決策。
該系統具備高效性、智能化、實時性強等特點,具有廣泛的應用前景,可以為各類倉儲、生產線等環境提供有效的監測和預警保障。
8. STM32代碼設計
當前項目使用的相關軟件工具、模塊源碼已經上傳到網盤:https://ccnr8sukk85n.feishu.cn/wiki/QjY8weDYHibqRYkFP2qcA9aGnvb?from=from_copylink
以下是基于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(); // 關閉蜂鳴器
}
}
審核編輯 黃宇
-
STM32
+關注
關注
2290文章
11018瀏覽量
362734 -
環境監測
+關注
關注
3文章
372瀏覽量
19033
發布評論請先 登錄
STM32應用案例 實現地下停車場安全預警系統設計
智能輸電線路山火監測預警系統,山火隱患監測、預警裝置
基于Basic-RF的家居環境監測預警系統設計

物聯網倉儲環境監測系統
如何快速搭建一個LoRa?無線環境監測系統?WisBlock + RUI3 一鍵實現!

評論