[開源代碼]基於STM32的環境檢測與報警系統
前言
隨着物聯網和智能硬件的發展,環境檢測在工業、農業以及家庭自動化中變得越來越重要。傳統的環境監測多依賴單一傳感器,無法實現多參數同時監控,也難以針對不同參數設定獨立的安全閾值。
本項目基於STM32F103ZET6單片機設計了一套環境檢測與報警系統,可同時檢測水位、温度、濕度和亮度,並能為每個參數單獨設置安全範圍。一旦檢測到環境參數超出設定閾值,系統即可發出報警提示,從而有效保護環境安全或生產安全。這一設計不僅是一次STM32課程設計的實踐,更是對嵌入式系統開發能力的全面訓練。
源碼分享
直接放到之前寫的文章裏了,免費開源,下載學習即可。
https://blog.csdn.net/weixin_52908342/article/details/155618078
項目概述
本系統的主要目標是實現一個多功能、可配置的環境監測平台,核心功能包括:
- 水位檢測:監測水位變化,防止液體溢出或乾涸。
- 温度檢測:實時監測環境温度,可用於防止過熱或過冷。
- 濕度檢測:監測空氣濕度,適用於農業或倉儲環境。
- 亮度檢測:根據光照強度提供環境光檢測,適用於温室、智能照明等場景。
- 閾值報警:每個參數可獨立設置安全範圍,一旦超出範圍即可觸發報警。
在硬件和軟件設計上,本項目充分運用了STM32F103ZET6的外設功能,包括UART通信、GPIO控制、ADC採樣等,並採用C語言實現了邏輯控制和數據處理功能。
系統硬件設計
核心控制器
- STM32F103ZET6
作為系統主控芯片,STM32F103ZET6具有豐富的GPIO接口、多個ADC通道以及UART通信功能,非常適合用於多傳感器數據採集和處理。
傳感器模塊
- 水位傳感器
使用簡單的液位開關或模擬液位傳感器,將水位信號通過ADC接口採集。 - 温度傳感器
可選擇DS18B20數字温度傳感器或LM35模擬温度傳感器,通過單片機讀取温度數據。 - 濕度傳感器
常用DHT11或DHT22數字濕度傳感器,通過GPIO口讀取數據。 - 光照傳感器
光敏電阻(LDR)與分壓電路連接到ADC通道,實現環境亮度測量。
報警與顯示模塊
- 報警指示:蜂鳴器或LED指示燈,當某項參數超出安全範圍時觸發。
- 串口輸出:通過UART接口將監測數據和報警狀態發送至上位機或串口調試助手,方便實時監控。
軟件設計
系統架構
系統採用輪詢採樣 + 閾值判斷的模式,每個傳感器的數據通過ADC或GPIO讀取後,進行數值轉換,並與用户設定的安全範圍進行比較,超出範圍則觸發報警。
主要模塊包括:
-
初始化模塊
- 初始化GPIO口、ADC通道和UART接口
- 初始化定時器(用於週期性採樣)
-
數據採集模塊
- ADC採集水位和光照模擬信號
- DHT採集温濕度數字信號
-
數據處理模塊
- 將傳感器原始數據轉換為實際物理量
- 與安全閾值比較,生成報警標誌
-
報警模塊
- 當任何參數超出閾值時,點亮LED並驅動蜂鳴器
- 通過UART輸出報警信息至上位機
-
用户交互模塊
- 用户可通過串口命令修改各參數的安全閾值
- 系統實時返回當前值及報警狀態
樣例代碼
// ADC採樣水位示例
uint16_t Read_Water_Level(void) {
ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_55Cycles5);
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));
return ADC_GetConversionValue(ADC1);
}
// 閾值判斷與報警
void Check_Thresholds(void) {
uint16_t water = Read_Water_Level();
float temp = Read_Temperature();
float hum = Read_Humidity();
uint16_t light = Read_Light();
if(water > WATER_MAX || water < WATER_MIN) Trigger_Alarm();
if(temp > TEMP_MAX || temp < TEMP_MIN) Trigger_Alarm();
if(hum > HUM_MAX || hum < HUM_MIN) Trigger_Alarm();
if(light > LIGHT_MAX || light < LIGHT_MIN) Trigger_Alarm();
}
功能演示與調試
在系統調試階段,通過串口將各傳感器數據實時輸出,並在上位機進行可視化。通過調整閾值參數,可以驗證報警功能的準確性和靈敏度。例如:
- 當水位超過設定上限時,蜂鳴器立即響起,同時LED閃爍。
- 當温度低於最低安全温度時,系統通過UART輸出“温度過低報警”信息。
- 光照不足時,可觸發照明控制或報警提示。
通過模塊化設計,每個功能都可以獨立測試,確保系統穩定運行。
總結與展望
本項目成功實現了基於STM32的環境檢測與報警系統,能夠同時監測水位、温度、濕度和亮度,並對每項參數獨立設置安全範圍,實現報警提示。
通過這一課程設計,不僅加深了對STM32硬件資源的理解,也提高了使用C語言進行嵌入式系統開發的能力。未來可以在此基礎上進一步擴展:
- 無線傳輸:通過ESP8266或LoRa模塊將數據上傳雲端,實現遠程監控。
- 數據記錄與分析:在SD卡或雲端存儲歷史數據,進行趨勢分析。
- 智能控制:結合繼電器或電機,實現環境參數自動調節(如自動澆水、開燈等)。
這一系統為嵌入式環境監測提供了完整的解決方案,也為實際工業或家庭應用奠定了基礎。