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