1. Giới thiệu
Trồng trọt và nông nghiệp hiện đại ngày càng phụ thuộc vào tự động hóa để tối ưu hóa việc sử dụng tài nguyên, đặc biệt là nước – một tài nguyên khan hiếm ở nhiều khu vực. Một bộ điều khiển tưới thông minhtự động hóa việc tưới nước dựa trên điều kiện đất thực tế thay vì đồng hồ hẹn giờ cố định, giảm lãng phí, ngăn ngừa tưới quá mức hoặc thiếu nước, và hỗ trợ sự phát triển khỏe mạnh của cây trồng.
Nghiên cứu trường hợp này tập trung vào mô hình hóa hành vi của hệ thống như vậy bằng cách sử dụng một sơ đồ máy trạng thái UML (cũng được gọi là sơ đồ trạng thái). Sơ đồ này ghi lại vòng đời của hệ thống, các điểm ra quyết định và phản ứng với các sự kiện như đọc độ ẩm, thời gian chờ hết hạn, và can thiệp của người dùng.
Thiết kế sử dụng PlantUMLngữ pháp, tương tự như ví dụ cửa hàng cà phê được cung cấp, mô hình hóa một cách tinh tế các trạng thái hợp thành, điều kiện bảo vệ, hành động và các đường dẫn lỗi/phục hồi.
2. Phát biểu vấn đề và yêu cầu
Một bộ điều khiển tưới tự động cho vườn nhà hoặc nhà kính nhỏ phải:

- Bắt đầu ở chế độ Chờ đợichế độ tiêu thụ ít điện năng phần lớn thời gian.
- Thức dậy định kỳ theo một lịch trình (kích hoạt bởi bộ hẹn giờ) để kiểm tra điều kiện.
- Chuyển sang trạng thái Cảm biếnđể đọc mức độ ẩm đất (thông qua cảm biến điện dung hoặc điện trở).
- Nếu độ ẩm < 30% (ngưỡng khô có thể cấu hình), bắt đầu Tưới nướcbằng cách mở van điện từ hoặc kích hoạt bơm.
- Nếu độ ẩm ≥ 30%, quay lại Chờ sẵn (không cần tưới nước).
- Trong khi Đang tưới nước, liên tục (hoặc định kỳ) theo dõi độ ẩm.
- Dừng tưới nước và đóng van khi:
- Độ ẩm đạt đến 80% (ngưỡng ẩm cấu hình được) → mục tiêu đạt được.
- Một Thời gian chờ an toàn hết hạn (ví dụ: 30 phút) → ngăn ngừa ngập lụt, vỡ ống hoặc sự cố điện nếu cảm biến hỏng.
- Sau khi dừng tưới nước, chuyển sang trạng thái Tắt máy trạng thái.
- Trong Tắt máy, chờ xác nhận thủ công (nhấn nút hoặc lệnh ứng dụng) trước khi quay lại Chờ sẵn — điều này cho phép người dùng kiểm tra hệ thống hoặc ghi đè nếu cần.
- Xử lý sự cố một cách trơn tru (ví dụ: cảm biến hỏng, van kẹt) bằng cách chuyển sang trạng thái Lỗi trạng thái với các tùy chọn khôi phục.
Các hành vi mong muốn bổ sung (được giữ đơn giản ở đây):
- Không tưới nước trong một số khung giờ nhất định (được xử lý bởi lịch trình/timer).
- Ghi nhật ký hoặc thông báo nằm ngoài phạm vi của máy trạng thái cốt lõi này.
3. Các khái niệm máy trạng thái chính được sử dụng
- Trạng thái: Ngưng hoạt động/Dừng chờ, Phát hiện, Tưới nước, Tắt máy, Lỗi.
- Trạng thái hợp thành: Tưới nước bao gồm logic giám sát nội bộ (mặc dù được giữ ở dạng phẳng ở đây để đơn giản hóa).
- Chuyển tiếp:
- Kích hoạt bởi sự kiện (bộ đếm thời gian, đọc độ ẩm, hết thời gian).
- Được bảo vệ bởi điều kiện [độ ẩm < 30%], [độ ẩm >= 80%].
- Hành động: /mở_cửa_lưu, /đóng_cửa_lưu, /thông_báo_người_dùng, v.v.
- Trạng thái giả ban đầu / cuối cùng: [*] cho bắt đầu/kết thúc.
- Chuyển tiếp tự thân và vòng phục hồi.
4. Sơ đồ trạng thái trong PlantUML
Dưới đây là mã PlantUML hoàn chỉnh triển khai hành vi được mô tả. Nó tuân theo các quy ước từ ví dụ quán cà phê (kiểu dáng skinparam, trạng thái hợp thành khi phù hợp, điều kiện bảo vệ trong [], hành động với dấu /).
@startuml
skinparam {
' Kiểu tổng thể
' Màu sắc
ArrowColor #333333
ArrowFontColor #333333
BackgroundColor #FFFFFF
BorderColor #333333
' Định dạng trạng thái
State {
BorderColor #005073
BackgroundColor #E6F5FF
FontColor #005073
}
}
[*] --> Dừng chờ
Dừng chờ --> Phát hiện : timer_triggers()
Phát hiện --> Tưới nước : độ_ẩm_đất < 30%
Phát hiện --> Dừng chờ : độ_ẩm_đất >= 30%
Tưới nước --> Tắt máy : độ_ẩm_đất >= 80% HOẶC an_toàn_hết_thời_gian()
Tưới nước --> Tắt máy : an_toàn_hết_thời_gian() // Bảo vệ dự phòng khi hết thời gian
Tắt máy --> Dừng chờ : người_dùng_xác_nhận_reset()
Dừng chờ --> [*]
@enduml 
Giải thích sơ đồ
- Dừng chờ — Trạng thái mặc định tiết kiệm năng lượng/dừng hoạt động.
- Phát hiện — Kiểm tra nhanh được kích hoạt bởi bộ đếm thời gian; tránh tưới nước không cần thiết.
- Tưới nước (hợp thành) — Giai đoạn tưới nước hoạt động với nội bộ Tưới nước hoạt động con.
- Thoát ra khi đạt độ ẩm mục tiêu hoặc hết thời gian an toàn.
- Tắt máy — Trạng thái tạm dừng sau tưới, yêu cầu xác nhận để tiếp tục tự động hóa (tính năng an toàn).
- Lỗi — Trạng thái cách ly lỗi với chuyển tiếp khôi phục thủ công.
5. Lý do thiết kế và lợi ích
- Bảo tồn nước — Chỉ tưới khi thực sự cần thiết (dựa trên độ ẩm đất thay vì theo thời gian).
- Phòng chống ngập lụt — Điều kiện thoát kép từ trạng thái Tưới (mục tiêu độ ẩm + thời gian giới hạn).
- An toàn và kiểm soát người dùng — Xác nhận thủ công sau khi dừng bất thường ngăn việc khởi động lại tự động sau các sự cố tiềm ẩn.
- Khả năng mở rộng — Dễ dàng thêm trạng thái (ví dụ như Phát hiện mưa, Pin yếu, Chế độ mùa đông) hoặc điều chỉnh ngưỡng.
- Độ phức tạp thấp — Dẹt ở mức có thể, chỉ kết hợp khi nhóm logic mang lại sự rõ ràng (Tưới).
Thiết kế này cân bằng độ bền, an toàn và đơn giản — phù hợp với triển khai trên vi điều khiển nhúng (Arduino, ESP32, v.v.).
6. Kết luận
Máy trạng tháiCác máy trạng thái cung cấp một khuôn khổ tuyệt vời để mô hình hóa các hệ thống điều khiển phản ứng như bộ điều khiển tưới thông minh. Bằng cách xác định rõ ràng các trạng thái, sự kiện, điều kiện bảo vệ và hành động, các kỹ sư có thể suy luận về hành vi hệ thống, các trường hợp biên và phục hồi lỗi trước khi viết mã.
Biểu diễn PlantUML ở trên vừa đóng vai trò tài liệu tham khảo vừa là bản vẽ thiết kế cho triển khai. Hiển thị nó (thông qua công cụ PlantUML hoặc máy chủ trực tuyến) sẽ tạo ra một sơ đồ sạch sẽ, chuyên nghiệp, sẵn sàng cho việc xem xét yêu cầu, sinh mã hoặc giảng dạy các khái niệm UML.
Các mở rộng tương lai có thể bao gồm:
- Tích hợp API thời tiết (bỏ qua cảm biến nếu dự báo mưa).
- Nhiều khu vực với ngưỡng độ ẩm riêng cho từng khu vực.
- Thông báo ứng dụng di động khi hết thời gian hoặc lỗi.
Nghiên cứu trường hợp này minh họa cách một vấn đề tự động hóa tưởng chừng đơn giản lại được hưởng lợi rất lớn từ mô hình hóa dựa trên trạng thái có cấu trúc.
- Hướng dẫn toàn diện từng bước về Máy trạng thái máy in 3D: Hướng dẫn này áp dụngcác khái niệm máy trạng thái vào các hệ thống in 3D, chi tiết về logic hoạt động và các con đường tự động hóa của chúng.
- Công cụ biểu đồ máy trạng thái tương tác: Một công cụ web chuyên dụng để tạo và chỉnh sửa biểu đồ máy trạng thái, tận dụngkhả năng GenAIđể mô hình hóa hành vi theo thời gian thực.
- Hiểu về biểu đồ máy trạng thái trong UML: Bài hướng dẫn này cung cấp mộttổng quan toàn diệnvề việc mô hình hóa hành vi hệ thống bằng biểu đồ máy trạng thái trong UML.
- Hướng dẫn toàn diện về biểu đồ máy trạng thái UML với AI: Tài nguyên này cung cấp cái nhìn chi tiết về việc sử dụngcác công cụ được hỗ trợ bởi AIđể mô hình hóa chính xác hành vi đối tượng bằng biểu đồ máy trạng thái UML.
- Làm thế nào để vẽ biểu đồ máy trạng thái trong UML?: Bài hướng dẫn này cung cấp hướng dẫn chi tiết về việc tạo biểu đồ và đặt tên cho các chuyển tiếp để mô hình hóalịch sử và sự kiện của thực thể.
- Thành thạo biểu đồ trạng thái với Visual Paradigm AI: Hướng dẫn cho các hệ thống thu phí tự động: Hướng dẫn này cung cấp hướng dẫn từng bước về việc sử dụngbiểu đồ trạng thái được tăng cường bởi AIđể mô hình hóa và tự động hóa logic phức tạp cần thiết cho phần mềm hệ thống thu phí.
- Bài hướng dẫn biểu đồ máy trạng thái: Bài hướng dẫn này giải thích cácký hiệu và cú phápcần thiết để mô hình hóa hành vi động của các đối tượng lớp riêng lẻ, các trường hợp sử dụng và toàn bộ hệ thống.
- Bộ công cụ Visual Paradigm AI: Hướng dẫn toàn diện về các công cụ mô hình hóa thông minh: Bản tổng quan này mô tả cách nền tảng hỗ trợ mô hình hóa kỹ thuậtTrợ lý chatbot AI hỗ trợ mô hình hóa kỹ thuật, bao gồm máy trạng thái và các sơ đồ hành vi khác.
- Visual Paradigm – Công cụ sơ đồ máy trạng thái UML: Bản tổng quan về một công cụ trực tuyến đầy đủ tính năng được thiết kế cho các kiến trúc sư đểxây dựng, chỉnh sửa và xuất các mô hình máy trạng thái chính xác sử dụng giao diện dựa trên đám mây.
- Hướng dẫn nhanh sơ đồ trạng thái: Thành thạo máy trạng thái UML trong vài phút: Hướng dẫn thân thiện với người mới về việc tạo và hiểu sơ đồ trạng thái, tập trung vàonhững khái niệm cốt lõi và các kỹ thuật mô hình hóa thực tiễn.











