1. 項目開發(fā)背景
隨著工業(yè)化和現(xiàn)代化的進程,尤其是在制造業(yè)、食品業(yè)、醫(yī)藥業(yè)等行業(yè),倉庫環(huán)境的監(jiān)控和管理成為了至關(guān)重要的一環(huán)。尤其是在存儲易腐品、藥品、電子產(chǎn)品等貨物時,溫度、濕度、氣體濃度等環(huán)境參數(shù)的異常變化可能導(dǎo)致物品的質(zhì)量和安全性問題。為了保證倉庫內(nèi)物品的安全存儲,及時發(fā)現(xiàn)環(huán)境參數(shù)異常并采取必要措施,倉庫環(huán)境監(jiān)測系統(tǒng)應(yīng)運而生。
傳統(tǒng)的環(huán)境監(jiān)測方式往往依賴人工檢查或簡單的環(huán)境檢測設(shè)備,但這些方式往往難以實現(xiàn)實時監(jiān)控與自動預(yù)警。物聯(lián)網(wǎng)技術(shù)的發(fā)展為倉庫環(huán)境監(jiān)控系統(tǒng)提供了更加智能、高效、實時的數(shù)據(jù)采集、傳輸和處理手段。本項目基于STM32微控制器設(shè)計一個環(huán)境監(jiān)測與預(yù)警系統(tǒng),具備溫濕度監(jiān)測、氣體檢測、墻壁水汽檢測、蜂鳴器報警、通風(fēng)控制等功能,支持數(shù)據(jù)上傳至華為云物聯(lián)網(wǎng)平臺并通過網(wǎng)頁實現(xiàn)數(shù)據(jù)可視化與控制。
本項目不僅滿足了傳統(tǒng)環(huán)境監(jiān)測的需求,還通過物聯(lián)網(wǎng)和大數(shù)據(jù)分析提升了倉庫管理的效率和智能化水平,具有重要的實際應(yīng)用價值。
2. 設(shè)計實現(xiàn)的功能
本項目設(shè)計的倉庫環(huán)境監(jiān)測與預(yù)警系統(tǒng)的主要功能如下:
1. 環(huán)境溫度和濕度檢測
使用SHT30溫濕度傳感器實時監(jiān)測倉庫內(nèi)的環(huán)境溫度和濕度,并通過顯示屏和云平臺實時展示。
2. 二氧化碳濃度檢測
使用SGP30傳感器檢測倉庫內(nèi)的二氧化碳濃度,提供空氣質(zhì)量監(jiān)測功能。
3. 墻壁水汽檢測
安裝雨滴傳感器以檢測墻壁或角落的水汽情況,當(dāng)水汽超標(biāo)時,通過蜂鳴器進行報警。
4. 可燃氣體檢測
使用MQ9氣體傳感器檢測倉庫內(nèi)的一氧化碳、甲烷等可燃氣體濃度,當(dāng)檢測到氣體濃度超標(biāo)時,觸發(fā)蜂鳴器報警。
5. 通風(fēng)風(fēng)扇控制
使用繼電器控制通風(fēng)風(fēng)扇的啟停,用戶可以手動按鍵開啟或關(guān)閉風(fēng)扇,確保倉庫通風(fēng)良好。
6. 報警功能
當(dāng)環(huán)境參數(shù)不符合設(shè)定要求時,系統(tǒng)通過蜂鳴器報警并在可視化大屏上顯示報警信息,通知工作人員及時處理。
7. 可視化大屏顯示
使用1.44寸LCD顯示屏顯示溫濕度、二氧化碳濃度、氣體濃度、墻壁水汽等環(huán)境數(shù)據(jù)。
8. 數(shù)據(jù)上傳與云平臺顯示
系統(tǒng)通過ESP8266模塊連接Wi-Fi,將數(shù)據(jù)通過MQTT協(xié)議上傳到華為云物聯(lián)網(wǎng)平臺,實時顯示數(shù)據(jù),并支持歷史數(shù)據(jù)查詢和分析。
9. Web端數(shù)據(jù)可視化與控制
使用Python編寫后端服務(wù)器,接收從華為云物聯(lián)網(wǎng)平臺轉(zhuǎn)發(fā)的數(shù)據(jù),并通過HTML前端頁面展示實時數(shù)據(jù)與報警狀態(tài),用戶可通過Web頁面進行控制操作。
10. 數(shù)據(jù)存儲與分析
服務(wù)器支持本地存儲數(shù)據(jù),并通過云平臺的數(shù)據(jù)存儲與分析功能,提供環(huán)境參數(shù)歷史數(shù)據(jù)的查看與分析,輔助決策與管理。
3. 項目硬件模塊組成
本項目所使用的硬件模塊如下:
- 主要負責(zé)系統(tǒng)的控制與數(shù)據(jù)處理,協(xié)調(diào)各個模塊的工作。
- 具有豐富的IO口、USART接口、PWM輸出等功能,適合本項目的多傳感器數(shù)據(jù)采集和控制需求。
2. 溫濕度傳感器:SHT30
3. 二氧化碳濃度傳感器:SGP30
- 用于檢測倉庫內(nèi)的二氧化碳濃度,具有較高的檢測精度。
- 同樣采用I2C接口進行數(shù)據(jù)通信。
4. 可燃氣體傳感器:MQ9
- 用于檢測倉庫內(nèi)一氧化碳、甲烷等氣體的濃度。
- 通過模擬輸出與STM32進行通信。
5. 雨滴傳感器
- 用于檢測墻壁或角落的水汽情況。
- 安裝在墻壁或角落,如果檢測到水汽,則通過蜂鳴器進行報警。
6. 蜂鳴器
- 用于報警,當(dāng)環(huán)境參數(shù)不符合要求時,蜂鳴器發(fā)出聲音提醒。
7. 通風(fēng)風(fēng)扇:繼電器控制
- 用于控制通風(fēng)風(fēng)扇的開關(guān),通過繼電器與STM32連接。
8. Wi-Fi模塊:ESP8266
- 用于與本地網(wǎng)絡(luò)連接,將采集到的環(huán)境數(shù)據(jù)上傳到華為云物聯(lián)網(wǎng)平臺。
- 支持MQTT協(xié)議,用于數(shù)據(jù)上傳。
9. 顯示屏:1.44寸LCD
- 顯示當(dāng)前倉庫的環(huán)境數(shù)據(jù),包括溫濕度、二氧化碳濃度、氣體濃度等。
10. 電源模塊:5V 2A外部穩(wěn)壓模塊
- 為系統(tǒng)提供穩(wěn)定的電源。
4. 設(shè)計思路
4.1 系統(tǒng)架構(gòu)
本系統(tǒng)由硬件和軟件兩部分組成,硬件部分主要包括溫濕度傳感器、二氧化碳傳感器、可燃氣體傳感器、雨滴傳感器、蜂鳴器、Wi-Fi模塊等。系統(tǒng)使用STM32F103RCT6作為主控芯片,通過I2C、GPIO、PWM等接口與傳感器和執(zhí)行器連接。
系統(tǒng)通過ESP8266 Wi-Fi模塊實現(xiàn)數(shù)據(jù)無線傳輸,數(shù)據(jù)通過MQTT協(xié)議上傳至華為云物聯(lián)網(wǎng)平臺。云端平臺負責(zé)數(shù)據(jù)存儲和歷史數(shù)據(jù)分析,同時提供API接口供本地服務(wù)器拉取數(shù)據(jù)。通過Web頁面,用戶可以查看實時環(huán)境數(shù)據(jù)并進行控制操作。
4.2 數(shù)據(jù)采集與處理
- 溫濕度檢測:使用SHT30傳感器實時采集倉庫內(nèi)的環(huán)境溫度和濕度,STM32通過I2C接口與SHT30通信,獲取數(shù)據(jù)并進行處理。
- 氣體檢測:通過MQ9傳感器獲取一氧化碳等氣體的濃度,當(dāng)濃度超標(biāo)時觸發(fā)報警。
- 墻壁水汽檢測:雨滴傳感器監(jiān)測墻壁或角落的水汽,當(dāng)水汽超標(biāo)時,蜂鳴器報警。
- 二氧化碳濃度檢測:SGP30傳感器監(jiān)測二氧化碳濃度。
4.3 報警與控制
- 蜂鳴器報警:當(dāng)檢測到溫濕度、氣體濃度、墻壁水汽等不符合要求時,蜂鳴器發(fā)出報警聲音。
- 風(fēng)扇控制:通過繼電器控制通風(fēng)風(fēng)扇的啟停,確保倉庫內(nèi)空氣流通。
- 按鍵控制:用戶可以通過按鍵手動啟動或關(guān)閉風(fēng)扇。
4.4 數(shù)據(jù)上傳與可視化
- 云數(shù)據(jù)上傳:數(shù)據(jù)通過ESP8266模塊通過Wi-Fi上傳到華為云物聯(lián)網(wǎng)平臺,使用MQTT協(xié)議實現(xiàn)數(shù)據(jù)傳輸。
- Web端可視化:后端服務(wù)器使用Python開發(fā),前端使用HTML5展示實時數(shù)據(jù)、報警信息和控制界面。
5. 系統(tǒng)功能總結(jié)
云平臺 | | Web端可視化 | 通過Web前端展示數(shù)據(jù)、報警信息及控制操作 |
6. 使用的模塊的技術(shù)詳情介紹
6.1 SHT30 溫濕度傳感器
工作原理:SHT30是一款數(shù)字輸出型溫濕度傳感器,采用I2C協(xié)議與STM32通信。具有高精度、低功耗的特點,適合長期穩(wěn)定監(jiān)測環(huán)境條件。
6.2 SGP30 二氧化碳傳感器
工作原理:SGP30是一款基于金屬氧化物傳感器的二氧化碳傳感器,采用I2C通信協(xié)議,能精確檢測空氣中的二氧化碳濃度。
6.3 MQ9 可燃氣體傳感器
工作原理:MQ9是常見的氣體傳感器,可檢測一氧化碳、甲烷等可燃氣體。輸出模擬信號,STM32通過ADC讀取數(shù)據(jù),進行氣體濃度判斷。
6.4 雨滴傳感器
工作原理:雨滴傳感器檢測環(huán)境中的水汽,當(dāng)水汽濃度超標(biāo)時,通過觸發(fā)高電平輸出控制蜂鳴器報警。
6.5 ESP8266 Wi-Fi模塊
工作原理:ESP8266模塊提供Wi-Fi無線網(wǎng)絡(luò)連接,支持通過MQTT協(xié)議與云平臺進行通信,傳輸環(huán)境數(shù)據(jù)。
6.6 蜂鳴器
工作原理:蜂鳴器通過接收到高電平信號時發(fā)出響聲,用于報警通知。
7. 總結(jié)
本項目成功設(shè)計并實現(xiàn)了基于STM32的倉庫環(huán)境監(jiān)測與預(yù)警系統(tǒng)。通過結(jié)合多種傳感器、Wi-Fi模塊以及云平臺,能夠?qū)崟r監(jiān)測倉庫內(nèi)的溫濕度、氣體濃度、水汽等環(huán)境參數(shù),并在出現(xiàn)異常時通過蜂鳴器報警提醒工作人員。同時,系統(tǒng)支持數(shù)據(jù)上傳至云平臺,提供實時數(shù)據(jù)展示和歷史數(shù)據(jù)分析,幫助管理人員更好地了解倉庫環(huán)境狀況,做出決策。
該系統(tǒng)具備高效性、智能化、實時性強等特點,具有廣泛的應(yīng)用前景,可以為各類倉儲、生產(chǎn)線等環(huán)境提供有效的監(jiān)測和預(yù)警保障。
8. STM32代碼設(shè)計
以下是基于STM32的倉庫環(huán)境監(jiān)測與預(yù)警系統(tǒng)的 main.c 文件代碼。主程序負責(zé)初始化各個模塊,進行數(shù)據(jù)采集,并通過蜂鳴器進行報警,最后通過Wi-Fi上傳數(shù)據(jù)到華為云物聯(lián)網(wǎng)平臺。
資料下載地址:https://gh2wvkmipb87sstdyjx80r99rn12g1u.taobao.com/
#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" // 繼電器控制風(fēng)扇
#include "buzzer.h" // 蜂鳴器
// 定義環(huán)境監(jiān)測閾值
#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,用于調(diào)試
I2C_HandleTypeDef hi2c1; // I2C1,用于溫濕度傳感器、SGP30
SPI_HandleTypeDef hspi1; // SPI1,用于LCD顯示
WiFi_Module wifi; // Wi-Fi模塊
// 函數(shù)聲明
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)
{
// 系統(tǒng)初始化
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(); // 初始化繼電器(風(fēng)扇控制)
// 系統(tǒng)主循環(huán)
while (1)
{
// 讀取環(huán)境數(shù)據(jù)
float temperature, humidity, co2, co;
int water_vapor;
read_environment_data(&temperature, &humidity, &co2, &co, &water_vapor);
// 顯示數(shù)據(jù)到LCD
display_data_on_lcd(temperature, humidity, co2, co);
// 上傳數(shù)據(jù)到云平臺
send_data_to_cloud(temperature, humidity, co2, co);
// 檢查是否需要報警或執(zhí)行控制
check_alerts(temperature, humidity, co2, co, water_vapor);
}
}
// 讀取環(huán)境數(shù)據(jù)(溫濕度,CO2濃度,CO濃度,水汽濃度)
void read_environment_data(float *temperature, float *humidity, float *co2, float *co, int *water_vapor)
{
// 獲取溫濕度數(shù)據(jù)
*temperature = SHT30_ReadTemperature();
*humidity = SHT30_ReadHumidity();
// 獲取CO2濃度數(shù)據(jù)
*co2 = SGP30_ReadCO2();
// 獲取CO濃度數(shù)據(jù)
*co = MQ9_ReadCO();
// 獲取水汽濃度數(shù)據(jù)
*water_vapor = Rain_Sensor_Read();
}
// 將數(shù)據(jù)顯示在LCD屏上
void display_data_on_lcd(float temperature, float humidity, float co2, float co)
{
char display_buffer[50];
// 顯示溫濕度數(shù)據(jù)
sprintf(display_buffer, "Temp: %.2fC Hum: %.2f%%", temperature, humidity);
LCD_DisplayStringLine(0, (uint8_t*)display_buffer);
// 顯示CO2和CO數(shù)據(jù)
sprintf(display_buffer, "CO2: %.2fppm CO: %.2fppm", co2, co);
LCD_DisplayStringLine(1, (uint8_t*)display_buffer);
}
// 將數(shù)據(jù)上傳到云平臺
void send_data_to_cloud(float temperature, float humidity, float co2, float co)
{
// 將數(shù)據(jù)通過MQTT協(xié)議上傳到華為云物聯(lián)網(wǎng)平臺
char payload[200];
sprintf(payload, "{"temperature": %.2f, "humidity": %.2f, "co2": %.2f, "co": %.2f}",
temperature, humidity, co2, co);
ESP8266_MQTT_Publish("warehouse/environment", payload); // 假設(shè)該主題用于上傳環(huán)境數(shù)據(jù)
}
// 檢查環(huán)境參數(shù),判斷是否需要報警或控制
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); // 水汽濃度過高,啟動蜂鳴器報警
}
// 控制風(fēng)扇(繼電器控制)
if (temperature > TEMP_THRESHOLD_HIGH)
{
control_relay(1); // 啟動風(fēng)扇
}
else if (temperature < TEMP_THRESHOLD_LOW)
{
control_relay(0); // 關(guān)閉風(fēng)扇
}
}
// 控制繼電器(風(fēng)扇)
void control_relay(int status)
{
if (status)
{
Relay_On(); // 打開風(fēng)扇
}
else
{
Relay_Off(); // 關(guān)閉風(fēng)扇
}
}
// 控制蜂鳴器
void control_buzzer(int status)
{
if (status)
{
Buzzer_On(); // 啟動蜂鳴器報警
}
else
{
Buzzer_Off(); // 關(guān)閉蜂鳴器
}
}