一、項目開發(fā)背景
隨著城市化進(jìn)程的推進(jìn),工地建設(shè)和拆遷作業(yè)逐漸增多,工地環(huán)境的空氣污染、噪聲污染等問題越來越嚴(yán)重。為了改善工地周邊居民的生活環(huán)境和施工人員的工作環(huán)境,工地環(huán)境實時監(jiān)測與控制系統(tǒng)應(yīng)運而生。該系統(tǒng)通過實時監(jiān)測空氣中的PM2.5、噪聲、溫濕度等環(huán)境參數(shù),將數(shù)據(jù)上傳至云端平臺進(jìn)行存儲和分析,從而實現(xiàn)對環(huán)境的實時監(jiān)控和智能控制。
此外,本項目通過控制加濕系統(tǒng)降低空氣中的粉塵濃度,確保工地作業(yè)環(huán)境符合安全和健康標(biāo)準(zhǔn)。通過將監(jiān)測數(shù)據(jù)上傳至云端服務(wù)器,項目還能夠提供全面的環(huán)境可視化展示,便于施工方和管理方進(jìn)行數(shù)據(jù)分析與決策。
二、設(shè)計實現(xiàn)的功能
1. 支持檢測空氣中的PM2.5含量
系統(tǒng)通過使用夏普PM2.5傳感器檢測空氣中的PM2.5濃度,并實時反饋到本地LCD顯示屏,同時上傳到云平臺進(jìn)行進(jìn)一步分析。
2. 支持檢測環(huán)境的噪聲
通過噪聲檢測傳感器檢測周圍環(huán)境的噪聲水平,轉(zhuǎn)換為電壓信號,經(jīng)過處理后得到噪聲值,實時顯示在LCD屏幕上并上傳至云端。
3. 本地實時顯示數(shù)據(jù)
采用1.44寸LCD顯示屏,實時顯示PM2.5濃度、噪聲級別、溫濕度值等環(huán)境數(shù)據(jù),方便現(xiàn)場人員實時查看。
4. 數(shù)據(jù)上云并可視化展示
系統(tǒng)通過WIFI連接到華為云物聯(lián)網(wǎng)服務(wù)器,實時上傳采集到的環(huán)境數(shù)據(jù)。然后通過搭建自有的后端服務(wù)器,使用Python的socket模塊從華為云獲取數(shù)據(jù),并通過Flask框架構(gòu)建Web應(yīng)用,展示環(huán)境監(jiān)測數(shù)據(jù)的可視化大屏。
5. 設(shè)備端數(shù)據(jù)傳輸使用WIFI+MQTT協(xié)議
設(shè)備端(STM32)通過ESP8266模塊連接WiFi,并使用MQTT協(xié)議將監(jiān)測數(shù)據(jù)傳輸?shù)饺A為云物聯(lián)網(wǎng)平臺。MQTT協(xié)議輕量且高效,非常適合物聯(lián)網(wǎng)環(huán)境下的數(shù)據(jù)傳輸。
6. 加濕系統(tǒng)控制
當(dāng)PM2.5濃度超過設(shè)定范圍時,系統(tǒng)自動控制加濕器工作,通過繼電器驅(qū)動噴灑水霧,降低空氣中的粉塵濃度。
7. 支持環(huán)境溫度和濕度檢測
系統(tǒng)通過SHT30傳感器實時監(jiān)測環(huán)境的溫度和濕度,數(shù)據(jù)通過STM32處理后顯示在LCD上,并上傳至云端平臺。
三、項目硬件模塊組成
- 主控芯片:STM32F103RCT6
- PM2.5傳感器(夏普)
- 采用紅外光散射原理,實時檢測空氣中的PM2.5濃度。
- 噪聲傳感器
- 模擬輸出,通過轉(zhuǎn)換為電壓信號來表示噪聲的強(qiáng)度。
- LCD顯示屏(1.44寸)
- 用于實時顯示環(huán)境數(shù)據(jù),包括PM2.5濃度、噪聲、溫濕度等。
- ESP8266 WiFi模塊
- 提供無線連接功能,將設(shè)備端數(shù)據(jù)通過WiFi傳輸?shù)皆贫恕?/li>
- 繼電器模塊
- 用于控制加濕器的開關(guān),響應(yīng)PM2.5濃度的變化,啟動噴水加濕。
- SHT30溫濕度傳感器
- 精度高,穩(wěn)定性好,用于檢測環(huán)境的溫度和濕度。
- 電源模塊(USB供電)
- 提供穩(wěn)定的5V電源,確保系統(tǒng)運行。
四、設(shè)計思路
1. 硬件設(shè)計
- 主控芯片STM32F103RCT6通過GPIO和ADC接口與PM2.5傳感器、噪聲傳感器、SHT30溫濕度傳感器進(jìn)行數(shù)據(jù)采集。
- 通過UART接口與ESP8266通信,進(jìn)行WiFi連接和MQTT協(xié)議數(shù)據(jù)傳輸。
- LCD顯示屏通過SPI接口與STM32連接,用于實時顯示環(huán)境參數(shù)。
- 使用繼電器控制加濕器,當(dāng)PM2.5濃度超標(biāo)時啟動加濕器,保持工地環(huán)境的穩(wěn)定。
2. 軟件設(shè)計
- 使用Keil5開發(fā)環(huán)境編寫STM32的控制程序,程序包括傳感器數(shù)據(jù)采集、加濕器控制、LCD顯示更新、WiFi連接、MQTT數(shù)據(jù)上傳等功能。
- 在后端,使用Python的socket模塊建立與云服務(wù)器的通信,通過Flask框架提供Web界面,展示云端環(huán)境數(shù)據(jù)。
3. 數(shù)據(jù)上傳和可視化
- STM32通過ESP8266模塊上傳數(shù)據(jù)到華為云物聯(lián)網(wǎng)平臺,數(shù)據(jù)格式采用JSON。
- 后端服務(wù)器通過MQTT協(xié)議從華為云獲取實時數(shù)據(jù),使用Flask框架展示數(shù)據(jù),并通過前端大屏進(jìn)行實時數(shù)據(jù)可視化。
五、系統(tǒng)功能總結(jié)
| 功能模塊 | 具體內(nèi)容 |
| ---------- | ------------------------------------------------------- |
| 環(huán)境監(jiān)測 | 檢測PM2.5、噪聲、溫濕度等環(huán)境數(shù)據(jù) |
| 本地顯示 | LCD顯示屏實時顯示各項監(jiān)測數(shù)據(jù) |
| 數(shù)據(jù)上傳 | 通過WiFi將數(shù)據(jù)上傳至華為云物聯(lián)網(wǎng)平臺 |
| 數(shù)據(jù)展示 | 使用Flask框架搭建Web應(yīng)用,展示實時環(huán)境數(shù)據(jù) |
| MQTT協(xié)議 | 設(shè)備端與云平臺使用MQTT協(xié)議進(jìn)行數(shù)據(jù)傳輸 |
| 加濕器控制 | 根據(jù)PM2.5濃度自動控制加濕器,降低空氣中的粉塵濃度 |
| 后端服務(wù)器 | 使用Python和Flask框架搭建后端服務(wù)器,支持?jǐn)?shù)據(jù)獲取與展示 |
| 可視化大屏 | 提供前端大屏顯示,實時顯示環(huán)境數(shù)據(jù) |
六、使用的模塊的技術(shù)詳情介紹
1. PM2.5傳感器(夏普)
2. 噪聲傳感器
- 工作原理:根據(jù)聲音的強(qiáng)度變化,輸出與噪聲大小成比例的電壓信號。
- 輸出信號:模擬電壓輸出。
- 測量范圍:一般為30dB至120dB。
3. SHT30溫濕度傳感器
4. ESP8266 WiFi模塊
- 技術(shù)特點:支持WiFi協(xié)議、TCP/IP協(xié)議棧,具有獨立的處理能力,可以作為WiFi終端連接到網(wǎng)絡(luò)。
- 功能:用于無線數(shù)據(jù)傳輸,支持MQTT協(xié)議。
5. 繼電器模塊
- 用于控制電氣設(shè)備(如加濕器),響應(yīng)系統(tǒng)的控制信號。
6. LCD顯示屏
- 技術(shù)特點:1.44寸的彩色LCD顯示屏,分辨率128x128像素。
- 用途:實時顯示環(huán)境數(shù)據(jù),便于現(xiàn)場人員查看。
七、總結(jié)
本項目設(shè)計了一個基于STM32的工地環(huán)境實時監(jiān)測與控制系統(tǒng),涵蓋了空氣質(zhì)量、噪聲、溫濕度的檢測與展示,數(shù)據(jù)上云并可視化展示,通過控制加濕器自動調(diào)節(jié)空氣質(zhì)量。系統(tǒng)結(jié)合硬件和軟件的設(shè)計,實現(xiàn)了環(huán)境監(jiān)測與控制的智能化與自動化,提升了工地環(huán)境的安全性和舒適度,具有較高的實用價值。
八、STM32代碼設(shè)計
其他子模塊(如PM2.5傳感器、噪聲傳感器、SHT30溫濕度傳感器、LCD顯示、WiFi模塊ESP8266等)的驅(qū)動和功能已經(jīng)寫好,只需要在main.c
中整合這些模塊,實現(xiàn)系統(tǒng)的整體功能。為了簡化代碼,重點展示如何初始化和使用這些模塊。
#include "stm32f1xx_hal.h"
#include "lcd.h"
#include "pm25.h"
#include "noise_sensor.h"
#include "sht30.h"
#include "wifi.h"
#include "mqtt.h"
#include "relay.h"
// 定義外部傳感器和硬件接口
extern PM25_TypeDef pm25_sensor; // PM2.5傳感器實例
extern NoiseSensor_TypeDef noise_sensor; // 噪聲傳感器實例
extern SHT30_TypeDef sht30_sensor; // 溫濕度傳感器實例
extern Relay_TypeDef relay; // 繼電器控制實例
extern WifiModule_TypeDef wifi_module; // ESP8266 WiFi模塊
extern MQTT_Client_TypeDef mqtt_client; // MQTT客戶端
// 定義全局變量
float pm25_value = 0.0; // 存儲PM2.5濃度值
float noise_value = 0.0; // 存儲噪聲值
float temperature = 0.0; // 存儲溫度值
float humidity = 0.0; // 存儲濕度值
// 功能聲明
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);
// 主程序
int main(void)
{
// 初始化硬件
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_USART1_UART_Init();
MX_I2C1_Init();
MX_SPI1_Init();
// 初始化外設(shè)
LCD_Init(); // 初始化LCD顯示屏
PM25_Init(&pm25_sensor); // 初始化PM2.5傳感器
NoiseSensor_Init(&noise_sensor); // 初始化噪聲傳感器
SHT30_Init(&sht30_sensor); // 初始化SHT30溫濕度傳感器
Relay_Init(&relay); // 初始化繼電器
Wifi_Init(&wifi_module); // 初始化WiFi模塊
MQTT_Init(&mqtt_client); // 初始化MQTT客戶端
// 連接WiFi網(wǎng)絡(luò)
if (Wifi_Connect(&wifi_module)) {
printf("WiFi Connected.n");
} else {
printf("WiFi Connection Failed!n");
}
// 連接MQTT服務(wù)器
if (MQTT_Connect(&mqtt_client)) {
printf("MQTT Connected.n");
} else {
printf("MQTT Connection Failed!n");
}
// 主循環(huán)
while (1)
{
// 1. 獲取環(huán)境數(shù)據(jù)
pm25_value = PM25_Read(&pm25_sensor); // 讀取PM2.5濃度
noise_value = NoiseSensor_Read(&noise_sensor); // 讀取噪聲值
SHT30_Read(&sht30_sensor, &temperature, &humidity); // 讀取溫濕度
// 2. 顯示數(shù)據(jù)到LCD
LCD_Clear();
LCD_DisplayString("PM2.5: %.2f μg/m3", pm25_value);
LCD_DisplayString("Noise: %.2f dB", noise_value);
LCD_DisplayString("Temp: %.2f C", temperature);
LCD_DisplayString("Humidity: %.2f %%", humidity);
// 3. 控制加濕器(如果PM2.5超標(biāo))
if (pm25_value > 100.0) { // 如果PM2.5濃度超過100 μg/m3,啟動加濕器
Relay_SetState(&relay, RELAY_ON); // 打開加濕器
} else {
Relay_SetState(&relay, RELAY_OFF); // 關(guān)閉加濕器
}
// 4. 上傳數(shù)據(jù)到云端
char payload[256];
snprintf(payload, sizeof(payload),
"{"pm25": %.2f, "noise": %.2f, "temperature": %.2f, "humidity": %.2f}",
pm25_value, noise_value, temperature, humidity);
// 發(fā)布數(shù)據(jù)到MQTT服務(wù)器
MQTT_Publish(&mqtt_client, "environment/data", payload);
}
}
代碼解析
- 硬件初始化:
- 在
main()
函數(shù)的開頭,通過HAL_Init()
初始化HAL庫,然后調(diào)用各個硬件初始化函數(shù)初始化GPIO、串口、I2C和SPI接口。 - 初始化LCD、PM2.5傳感器、噪聲傳感器、SHT30傳感器、WiFi模塊和MQTT客戶端。
- 在
- 環(huán)境數(shù)據(jù)采集:
- 使用傳感器驅(qū)動函數(shù)(如
PM25_Read()
、NoiseSensor_Read()
、SHT30_Read()
)從相應(yīng)的傳感器獲取PM2.5濃度、噪聲值、溫濕度值。
- 使用傳感器驅(qū)動函數(shù)(如
- 數(shù)據(jù)展示:
- 使用LCD顯示模塊在LCD上顯示PM2.5、噪聲、溫濕度數(shù)據(jù)。
- 加濕器控制:
- 根據(jù)PM2.5濃度的閾值(如100 μg/m3),判斷是否需要啟動加濕器,通過
Relay_SetState()
函數(shù)控制繼電器開關(guān)。
- 根據(jù)PM2.5濃度的閾值(如100 μg/m3),判斷是否需要啟動加濕器,通過
- 數(shù)據(jù)上傳:
- 將讀取的環(huán)境數(shù)據(jù)通過JSON格式上傳至MQTT服務(wù)器。調(diào)用
MQTT_Publish()
將數(shù)據(jù)發(fā)布到指定的MQTT主題上。
- 將讀取的環(huán)境數(shù)據(jù)通過JSON格式上傳至MQTT服務(wù)器。調(diào)用
以上代碼展示了如何將各個子模塊(傳感器、WiFi、MQTT、繼電器等)整合在一個STM32項目中,完成實時環(huán)境監(jiān)測、數(shù)據(jù)展示、數(shù)據(jù)上傳和控制加濕器的功能。
審核編輯 黃宇
-
控制系統(tǒng)
+關(guān)注
關(guān)注
41文章
6652瀏覽量
110758 -
STM32
+關(guān)注
關(guān)注
2270文章
10921瀏覽量
356944 -
實時監(jiān)測
+關(guān)注
關(guān)注
1文章
128瀏覽量
12694
發(fā)布評論請先 登錄
相關(guān)推薦
評論