博客 / 詳情

返回

[開源代碼]基於STM32的環境檢測與報警系統

[開源代碼]基於STM32的環境檢測與報警系統

前言

隨着物聯網和智能硬件的發展,環境檢測在工業、農業以及家庭自動化中變得越來越重要。傳統的環境監測多依賴單一傳感器,無法實現多參數同時監控,也難以針對不同參數設定獨立的安全閾值。

本項目基於STM32F103ZET6單片機設計了一套環境檢測與報警系統,可同時檢測水位、温度、濕度和亮度,並能為每個參數單獨設置安全範圍。一旦檢測到環境參數超出設定閾值,系統即可發出報警提示,從而有效保護環境安全或生產安全。這一設計不僅是一次STM32課程設計的實踐,更是對嵌入式系統開發能力的全面訓練。


源碼分享

直接放到之前寫的文章裏了,免費開源,下載學習即可。
https://blog.csdn.net/weixin_52908342/article/details/155618078

項目概述

本系統的主要目標是實現一個多功能、可配置的環境監測平台,核心功能包括:

  1. 水位檢測:監測水位變化,防止液體溢出或乾涸。
  2. 温度檢測:實時監測環境温度,可用於防止過熱或過冷。
  3. 濕度檢測:監測空氣濕度,適用於農業或倉儲環境。
  4. 亮度檢測:根據光照強度提供環境光檢測,適用於温室、智能照明等場景。
  5. 閾值報警:每個參數可獨立設置安全範圍,一旦超出範圍即可觸發報警。

在硬件和軟件設計上,本項目充分運用了STM32F103ZET6的外設功能,包括UART通信、GPIO控制、ADC採樣等,並採用C語言實現了邏輯控制和數據處理功能。


在這裏插入圖片描述

系統硬件設計

核心控制器

  • STM32F103ZET6
    作為系統主控芯片,STM32F103ZET6具有豐富的GPIO接口、多個ADC通道以及UART通信功能,非常適合用於多傳感器數據採集和處理。

傳感器模塊

  1. 水位傳感器
    使用簡單的液位開關或模擬液位傳感器,將水位信號通過ADC接口採集。
  2. 温度傳感器
    可選擇DS18B20數字温度傳感器或LM35模擬温度傳感器,通過單片機讀取温度數據。
  3. 濕度傳感器
    常用DHT11或DHT22數字濕度傳感器,通過GPIO口讀取數據。
  4. 光照傳感器
    光敏電阻(LDR)與分壓電路連接到ADC通道,實現環境亮度測量。

報警與顯示模塊

  • 報警指示:蜂鳴器或LED指示燈,當某項參數超出安全範圍時觸發。
  • 串口輸出:通過UART接口將監測數據和報警狀態發送至上位機或串口調試助手,方便實時監控。

在這裏插入圖片描述

軟件設計

系統架構

系統採用輪詢採樣 + 閾值判斷的模式,每個傳感器的數據通過ADC或GPIO讀取後,進行數值轉換,並與用户設定的安全範圍進行比較,超出範圍則觸發報警。

主要模塊包括:

  1. 初始化模塊

    • 初始化GPIO口、ADC通道和UART接口
    • 初始化定時器(用於週期性採樣)
  2. 數據採集模塊

    • ADC採集水位和光照模擬信號
    • DHT採集温濕度數字信號
  3. 數據處理模塊

    • 將傳感器原始數據轉換為實際物理量
    • 與安全閾值比較,生成報警標誌
  4. 報警模塊

    • 當任何參數超出閾值時,點亮LED並驅動蜂鳴器
    • 通過UART輸出報警信息至上位機
  5. 用户交互模塊

    • 用户可通過串口命令修改各參數的安全閾值
    • 系統實時返回當前值及報警狀態
      在這裏插入圖片描述

樣例代碼

// 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卡或雲端存儲歷史數據,進行趨勢分析。
  • 智能控制:結合繼電器或電機,實現環境參數自動調節(如自動澆水、開燈等)。

這一系統為嵌入式環境監測提供了完整的解決方案,也為實際工業或家庭應用奠定了基礎。

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.