1. 簡介
現代園藝與農業越來越依賴自動化來最佳化資源使用,特別是水——在許多地區都是稀缺資源。一個智慧灌溉控制器會根據即時土壤狀況自動灌溉,而非依賴固定計時器,從而減少浪費,防止過度或不足灌溉,並促進植物更健康生長。
本案例研究專注於使用UML狀態機圖 (也稱為狀態圖)。該圖捕捉系統的生命周期、決策點,以及對濕度讀數、逾時和使用者干預等事件的回應。
該設計使用PlantUML語法,類似於所提供的咖啡店範例,能優雅地模擬複合狀態、守衛條件、動作,以及錯誤/恢復路徑。
2. 問題陳述與需求
家用花園或小型溫室的自動灌溉控制器必須:

- 大多數時間以低功耗待機模式運行。
- 根據時間表(計時器觸發)定期喚醒以檢查條件。
- 進入感測狀態,以讀取土壤濕度(透過電容式或電阻式感測器)。
- 若濕度 < 30%(可設定的乾燥閾值),則開始灌溉透過打開電磁閥或啟動水泵來進行。
- 若濕度 ≥ 30%,則返回到待機(無需澆水)。
- 當灌溉中,持續(或定時)監測濕度。
- 當出現以下情況時,停止灌溉並關閉閥門:
- 濕度達到80%(可設定的濕度閾值)→ 目標達成。
- 一個安全超時逾時(例如30分鐘)→ 若感應器故障,可防止淹水、管線破裂或電氣問題。
- 停止灌溉後,轉至關機狀態。
- 在關機狀態下,等待手動確認(按鈕按下或應用程式指令)後,再返回到待機—— 這讓使用者可檢查系統或必要時進行手動覆蓋。
- 透過轉至錯誤狀態並提供恢復選項,以妥善處理故障(例如感應器故障、閥門卡住)。
額外理想的行為(此處保持簡化):
- 特定時段內不進行灌溉(由排程/定時器處理)。
- 記錄或通知不在此核心狀態機的範圍內。
3. 使用的核心狀態機概念
- 狀態: 空閒/待機、偵測、灌溉、關機、錯誤。
- 複合狀態: 灌溉包含內部監控邏輯(儘管為簡化起見在此保持平坦)。
- 轉移:
- 由事件觸發(計時器、濕度讀取、逾時)。
- 由條件保護 [濕度 < 30%],[濕度 >= 80%]。
- 動作: /open_valve(),/close_valve(),/notify_user(),等。
- 初始/最終偽狀態: [*] 用於開始/結束。
- 自轉移以及恢復迴圈。
4. PlantUML 中的狀態圖
以下是實現所述行為的完整 PlantUML 程式碼。它遵循咖啡店範例的慣例(skinparam 樣式、適當使用複合狀態、條件用 [] 表示、動作以 / 開頭)。
plantuml
PlantUML
Edit PlantUML in VPasCode
@startuml
skinparam {
' 整體樣式
' 顏色
ArrowColor #333333
ArrowFontColor #333333
BackgroundColor #FFFFFF
BorderColor #333333
' 狀態樣式
State {
BorderColor #005073
BackgroundColor #E6F5FF
FontColor #005073
}
}
[*] --> Standby
Standby --> Sensing : timer_triggers()
Sensing --> Irrigating : soil_moisture < 30%
Sensing --> Standby : soil_moisture >= 30%
Irigating --> Shutdown : soil_moisture >= 80% OR safety_timeout()
Irigating --> Shutdown : safety_timeout() // 備用逾時保護
Shutdown --> Standby : user_confirms_reset()
Standby --> [*]
@enduml 
圖示說明
- 待機 — 預設低功耗/空閒狀態。
- 偵測 — 由計時器觸發的快速檢查;避免不必要的灌溉。
- 灌溉(複合)— 內部具有子活動的主動灌溉階段,灌溉子活動。
- 在達到目標濕度或安全逾時時退出。
- 關機 — 灌溉後暫停狀態,需確認後才能恢復自動化(安全功能)。
- 錯誤 — 故障封鎖狀態,需手動恢復轉換。
5. 設計原理與優勢
- 節水 — 僅在真正需要時才進行灌溉(基於土壤濕度,而非時間)。
- 防止淹水 — 灌溉狀態有兩個退出條件(濕度目標 + 超時)。
- 使用者安全與控制 — 異常停止後需手動確認,可防止潛在問題後自動重新啟動。
- 可擴展性 — 易於新增狀態(例如:偵測到降雨, 電量不足, 冬季模式)或調整閾值。
- 低複雜度 — 在可能的情況下保持扁平結構,僅在邏輯分組能提升清晰度時才使用複合結構(如「灌溉中」)。
此設計在穩健性、安全性與簡潔性之間取得平衡——適合嵌入式微控制器實現(如 Arduino、ESP32 等)。
6. 結論
狀態機狀態機為建模反應式控制系統(如智慧灌溉控制器)提供了優異的形式化方法。透過明確定義狀態、事件、守衛與動作,工程師可在撰寫程式碼前,分析系統行為、邊界情況與錯誤恢復。
上述的 PlantUML 表示同時可作為文件與實作藍圖。透過 PlantUML 工具或線上伺服器渲染後,可產生清晰專業的圖示,適用於需求審查、程式碼生成或教學 UML 概念。
未來的擴展可能包括:
- 天氣 API 整合(若預報有雨,則跳過感測)。
- 多區域設計,各區域可設定獨立的濕度閾值。
- 在超時或錯誤時,透過行動應用程式發送通知。
此案例研究展示了看似簡單的自動化問題如何從結構化的狀態基礎建模中獲益良多。
- 3D列印機狀態機的完整逐步指南:此指南應用狀態機概念於3D列印系統,詳細說明其操作邏輯與自動化路徑。
- 互動式狀態機圖示工具:一種專用的基於網路的工具,用於建立和編輯狀態機圖示,並利用GenAI功能進行即時行為建模。
- 理解UML中的狀態機圖示:此教程提供全面概覽,說明如何使用UML中的狀態機圖示來建模系統行為。
- 結合AI的UML狀態機圖示權威指南:此資源詳細介紹如何使用AI驅動的工具準確地使用UML狀態機圖示來建模物件行為。
- 如何在UML中繪製狀態機圖示?:此教程提供詳細步驟,說明如何建立圖示並命名轉移,以建模實體歷程與事件.
- 使用Visual Paradigm AI掌握狀態圖示:自動化收費系統指南:此指南提供使用AI增強的狀態圖示來建模並自動化收費系統軟體所需的複雜邏輯。
- 狀態機圖示教程:此教程說明符號與語法用於建模單一類別物件、使用案例與整個系統的動態行為所需之項目。
- Visual Paradigm AI套件:智慧建模工具的完整指南: 本概述詳細說明了該平台的AI聊天機器人支援技術建模,包括狀態機及其他行為圖形。
- Visual Paradigm – UML 狀態機器圖形工具: 一款功能豐富的線上工具的概述,專為架構師設計,用於建立、編輯和匯出精確的狀態機模型透過基於雲端的介面。
- 狀態圖快速教程:在數分鐘內掌握 UML 狀態機: 一門適合初學者的教程,用於建立和理解狀態圖,專注於核心概念與實用的建模技巧.











