項目開發背景
隨著現代中藥的廣泛應用,中藥材的存儲環境對其質量有著至關重要的影響。溫濕度、煙霧、火災等環境因素,若不加以控制,將會導致中藥材失效或變質。因此,設計一個基于單片機的中藥存放環境監測系統顯得尤為重要。該系統通過實時監測溫濕度、煙霧濃度、火災情況等環境參數,確保中藥存放環境處于適宜的狀態,從而保證中藥材的品質,減少因環境問題引發的損失。
本項目基于STM32F103C8T6單片機作為核心控制單元,通過多種傳感器對環境進行實時采集,并通過液晶顯示屏和Wi-Fi無線通訊將監測數據展示給用戶,達到環境預警和安全保障的目的。
設計實現的功能
- 溫濕度采集與監控 :使用DHT11溫濕度傳感器實時監控中藥存放房間的溫度和濕度,確保溫濕度符合要求。
- 煙霧監測 :通過煙霧傳感器檢測存放環境中的煙霧濃度,及時發現火災隱患。
- 火災監測 :利用火災傳感器檢測中藥存放環境中是否有火災發生,保證環境安全。
- 環境預警 :設置溫濕度、煙霧、火災等閾值,當超過設定值時,系統自動觸發警報(蜂鳴器),提示用戶注意。
- 緊急處理機制 :當溫度、濕度、煙霧或火災參數超標時,系統自動啟動排氣通道進行換氣或散熱處理。
- 數據展示與實時監控 :通過液晶顯示屏顯示當前環境數據,提供溫度、濕度、煙霧濃度、火災監測結果等信息。
- 數據存儲與歷史記錄 :監測數據可存儲并備份,便于后期查閱和分析,確保數據的長期有效性。
項目硬件模塊組成
- DHT11 溫濕度傳感器
用于實時采集存儲環境的溫度和濕度數據,輸出數字信號,通過單片機讀取數據進行處理。
- DHT11 溫濕度傳感器
- 煙霧傳感器
該傳感器能夠檢測空氣中的煙霧濃度,通過模擬輸出提供實時的煙霧濃度數據。
- 煙霧傳感器
- 火災傳感器
用于檢測火災發生的初期征兆,如溫度劇增、火焰感應等。輸出信號通過單片機讀取,用于判斷是否有火災發生。
- 火災傳感器
- 蜂鳴器
當環境參數超過設定閾值時,蜂鳴器發出警報聲音,提醒用戶注意。
- 蜂鳴器
- 排氣通道控制模塊
該模塊用于控制中藥存儲房的排氣系統,系統可根據傳感器數據自動開啟排氣口進行散熱或通風。
- 排氣通道控制模塊
- LCD液晶顯示屏(1602或類似)
用于顯示當前監測到的溫度、濕度、煙霧濃度、火災報警等數據,提供直觀的實時反饋。
- LCD液晶顯示屏(1602或類似)
- Wi-Fi模塊(如ESP8266)
通過Wi-Fi模塊與手機APP連接,實現遠程數據監控和管理。
- Wi-Fi模塊(如ESP8266)
設計思路
總體架構
本系統的設計包括硬件和軟件兩大部分,硬件部分由STM32F103C8T6單片機作為控制中心,外圍集成了多種傳感器用于環境數據采集,包括溫濕度傳感器、煙霧傳感器、火災傳感器等,同時利用LCD液晶屏實時顯示數據,并通過Wi-Fi模塊實現手機端的數據訪問。
在軟件部分,首先要實現對各個傳感器的數據讀取和處理,并對數據進行實時監控。其次,設置閾值,當環境數據超過設定的閾值時,觸發報警機制(蜂鳴器和排氣通道)。最后,通過Wi-Fi將監測數據傳輸到手機APP,用戶可以遠程查看和管理數據。
數據采集與處理
- 溫濕度采集 :通過DHT11傳感器讀取溫濕度數據,并將數據傳輸給單片機進行處理。
- 煙霧采集 :通過煙霧傳感器讀取煙霧濃度數據,并在程序中進行轉換和閾值判斷。
- 火災采集 :通過火災傳感器獲取火災報警信號,判斷是否發生火災。
環境監測與預警
當溫濕度、煙霧濃度或火災傳感器的讀數超過預設閾值時,系統會觸發警報并啟動相應的緊急處理機制,例如開啟蜂鳴器警告和自動啟動排氣系統。
數據存儲與歷史記錄
通過STM32F103C8T6的內存或外接存儲器(如SD卡)保存歷史數據,方便后期查詢和分析。
無線通訊
通過Wi-Fi模塊實現系統與手機端的通信,手機APP將實時顯示溫濕度、煙霧、火災等監測數據,確保用戶可以遠程掌握存儲環境狀況。
系統功能總結
功能模塊 | 描述 |
---|---|
溫濕度監測 | 實時監測中藥存儲房的溫濕度,確保環境適宜 |
煙霧監測 | 檢測存儲房內的煙霧濃度,及時發現潛在的火災隱患 |
火災監測 | 檢測火災初期征兆,預防火災事故發生 |
環境預警 | 設置溫濕度、煙霧、火災閾值,超標時觸發報警機制 |
緊急處理機制 | 超標時啟動排氣通道進行通風或散熱,降低環境風險 |
數據展示與實時監控 | LCD顯示屏展示環境數據,便于現場查看和管理 |
手機APP監控與管理 | 通過Wi-Fi模塊連接手機,遠程查看實時監測數據 |
數據存儲與歷史記錄 | 保存環境監測數據,便于查詢和分析 |
使用的模塊的技術詳情介紹
1. DHT11 溫濕度傳感器
- ? 工作原理 :DHT11通過內置的溫濕度感應元件來測量環境的溫度和濕度。它通過單總線協議與單片機進行數據通信。
- ? 技術參數:
- ? 溫度測量范圍:0℃到50℃
- ? 濕度測量范圍:20%到90%
- ? 精度:溫度±2℃,濕度±5%
2. 煙霧傳感器
- ? 工作原理 :煙霧傳感器通過對空氣中氣體的吸收與反射變化,檢測煙霧濃度。輸出模擬信號,可通過ADC接口輸入單片機。
- ? 技術參數:
- ? 輸出信號:模擬電壓信號
- ? 檢測濃度:300-1000ppm煙霧
3. 火災傳感器
4. Wi-Fi模塊 (ESP8266)
- ? 工作原理 :ESP8266通過UART接口與單片機通信,實現Wi-Fi功能,能夠將環境數據發送至云平臺或手機APP。
- ? 技術參數:
- ? 支持802.11b/g/n Wi-Fi標準
- ? 支持TCP/IP協議
STM32代碼設計
以下是基于STM32F103C8T6的中藥存放環境監測系統的 main.c
代碼。其他子模塊(如溫濕度傳感器、煙霧傳感器、火災傳感器、蜂鳴器、LCD顯示、Wi-Fi等)的代碼已經編寫好。代碼實現了主要功能:環境數據的采集、報警機制、LCD顯示和Wi-Fi通訊。
#include "stm32f10x.h"
#include "DHT11.h" // 包含DHT11傳感器的代碼
#include "SmokeSensor.h" // 包含煙霧傳感器的代碼
#include "FireSensor.h" // 包含火災傳感器的代碼
#include "Buzzer.h" // 包含蜂鳴器控制代碼
#include "LCD1602.h" // 包含LCD顯示控制代碼
#include "WiFi.h" // 包含Wi-Fi通訊控制代碼
// 定義環境監測閾值
#define TEMP_THRESHOLD_HIGH 30 // 溫度高于30度時報警
#define TEMP_THRESHOLD_LOW 10 // 溫度低于10度時報警
#define HUMIDITY_THRESHOLD_HIGH 80 // 濕度高于80%時報警
#define HUMIDITY_THRESHOLD_LOW 30 // 濕度低于30%時報警
#define SMOKE_THRESHOLD 500 // 煙霧濃度超過500時報警
// 環境參數存儲
float current_temp = 0;
float current_humidity = 0;
int smoke_level = 0;
int fire_alarm = 0;
// 函數聲明
void System_Init(void);
void Environment_Monitoring(void);
void Alert_System(void);
void Display_Data(void);
void WiFi_Transmit_Data(void);
int main(void)
{
// 系統初始化
System_Init();
while (1)
{
// 環境監測
Environment_Monitoring();
// 判斷是否超出報警閾值
Alert_System();
// 顯示環境數據
Display_Data();
// 通過Wi-Fi上傳數據
WiFi_Transmit_Data();
}
}
// 系統初始化函數
void System_Init(void)
{
// 1. 初始化硬件
LCD_Init(); // 初始化LCD
Buzzer_Init(); // 初始化蜂鳴器
DHT11_Init(); // 初始化DHT11傳感器
SmokeSensor_Init(); // 初始化煙霧傳感器
FireSensor_Init(); // 初始化火災傳感器
WiFi_Init(); // 初始化Wi-Fi模塊
// 2. 其他硬件初始化
GPIO_Init(); // 初始化GPIO
}
// 環境監測函數
void Environment_Monitoring(void)
{
// 讀取DHT11傳感器數據
current_temp = DHT11_Read_Temperature();
current_humidity = DHT11_Read_Humidity();
// 讀取煙霧傳感器數據
smoke_level = SmokeSensor_Read();
// 讀取火災傳感器數據
fire_alarm = FireSensor_Read();
}
// 報警系統函數
void Alert_System(void)
{
// 檢查是否超出溫度閾值
if (current_temp > TEMP_THRESHOLD_HIGH || current_temp < TEMP_THRESHOLD_LOW)
{
Buzzer_On(); // 開啟蜂鳴器報警
// 可以增加排氣通道控制的代碼
}
else
{
Buzzer_Off(); // 關閉蜂鳴器
}
// 檢查濕度是否超出閾值
if (current_humidity > HUMIDITY_THRESHOLD_HIGH || current_humidity < HUMIDITY_THRESHOLD_LOW)
{
Buzzer_On(); // 開啟蜂鳴器報警
// 可以增加排氣通道控制的代碼
}
else
{
Buzzer_Off(); // 關閉蜂鳴器
}
// 檢查煙霧濃度是否超標
if (smoke_level > SMOKE_THRESHOLD)
{
Buzzer_On(); // 開啟蜂鳴器報警
// 可以增加排氣通道控制的代碼
}
else
{
Buzzer_Off(); // 關閉蜂鳴器
}
// 檢查火災傳感器
if (fire_alarm == 1)
{
Buzzer_On(); // 開啟蜂鳴器報警
// 可以增加排氣通道控制的代碼
}
else
{
Buzzer_Off(); // 關閉蜂鳴器
}
}
// 數據顯示函數
void Display_Data(void)
{
// 在LCD上顯示環境數據
LCD_Clear();
LCD_SetCursor(0, 0);
LCD_Printf("Temp: %.2f C", current_temp);
LCD_SetCursor(1, 0);
LCD_Printf("Humidity: %.2f %%", current_humidity);
LCD_SetCursor(2, 0);
LCD_Printf("Smoke: %d", smoke_level);
LCD_SetCursor(3, 0);
LCD_Printf("Fire: %s", fire_alarm ? "Detected" : "Safe");
}
// Wi-Fi數據傳輸函數
void WiFi_Transmit_Data(void)
{
// 將環境數據通過Wi-Fi發送到手機APP或服務器
WiFi_Send_Data("Temperature", current_temp);
WiFi_Send_Data("Humidity", current_humidity);
WiFi_Send_Data("Smoke", smoke_level);
WiFi_Send_Data("Fire", fire_alarm ? 1 : 0);
}
// 延時函數
void delay_ms(uint32_t ms)
{
uint32_t i, j;
for (i = 0; i < ms; i++)
{
for (j = 0; j < 8000; j++)
{
__NOP(); // 空操作,等待時間
}
}
}
代碼分析
- 硬件初始化:
- ?
System_Init()
函數進行所有外設(如LCD、蜂鳴器、傳感器、Wi-Fi)的初始化。
- 環境監測:
- ?
Environment_Monitoring()
函數從各個傳感器(DHT11、煙霧傳感器、火災傳感器)中獲取實時數據。
- 報警機制:
- ?
Alert_System()
函數根據各個傳感器的數據判斷是否超出設定的閾值,如果超標則啟動蜂鳴器報警,并根據需要啟動排氣通道。
- 數據展示:
- ?
Display_Data()
函數使用LCD顯示屏展示實時環境數據,包括溫度、濕度、煙霧濃度和火災報警狀態。
- Wi-Fi通信:
- ?
WiFi_Transmit_Data()
函數將環境數據通過Wi-Fi模塊發送至手機APP或云端服務器,方便遠程監控。
審核編輯 黃宇
-
單片機
+關注
關注
6042文章
44617瀏覽量
637491 -
STM32
+關注
關注
2270文章
10923瀏覽量
357036 -
監測系統
+關注
關注
8文章
2752瀏覽量
81450
發布評論請先 登錄
相關推薦
評論