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á 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 hết hạn và can thiệp của người dùng.
Thiết kế sử dụng PlantUMLcú pháp, tương tự như ví dụ quán 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ờthấp năng lượ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 của đấ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ờ (không cần tưới nước).
- Trong khi Đang tưới, liên tục (hoặc định kỳ) theo dõi độ ẩm.
- Dừng tưới và đóng van khi:
- Độ ẩm đạt đến 80% (ngưỡng ẩm điều chỉ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 lỗi.
- Sau khi dừng tưới, chuyển sang Trạng thái tắt trạng thái.
- Trong Trạng thái tắt, chờ xác nhận thủ công (ấn nút hoặc lệnh ứng dụng) trước khi quay lại Chờ — đ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ụ: lỗi cảm biến, 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 (đơn giản hóa ở đây):
- Không tưới trong một số 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: Đang chờ/Chế độ chờ, Phát hiện, Tưới, Tắt, Lỗi.
- Trạng thái hợp thành: Tưới 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 các sự kiện (bộ đếm thời gian, đọc độ ẩm, hết thời gian).
- Được bảo vệ bởi các điều kiện [độ ẩm < 30%], [độ ẩm >= 80%].
- Hành động: /mở_cửa_sửa(), /đóng_cửa_sửa(), /thông_báo_người_dùng(), v.v.
- Trạng thái giả ban đầu / cuối: [*] cho bắt đầu/kết thúc.
- Chuyển tiếp tự thân và vòng lặp 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 /).
plantuml
@startuml
skinparam {
‘ Phong cách tổng thể
‘ Màu sắc
MàuMũiTên #333333
MàuChữMũiTên #333333
MàuNền #FFFFFF
MàuViền #333333
‘ Định dạng trạng thái
Trạng_thái {
MàuViền #005073
MàuNền #E6F5FF
MàuChữ #005073
}
}
[*] –> Chờ sẵn
Chờ sẵn –> Phát hiện : timer_triggers()
Phát hiện –> Tưới nước : độ ẩm đất < 30%
Phát hiện –> Chờ sẵn : độ ẩm đất >= 30%
Tưới nước –> Tắt : độ ẩm đất >= 80% HOẶC safety_timeout()
Tưới nước –> Tắt : safety_timeout() // Bảo vệ thời gian chờ khẩn cấp
Tắt –> Chờ sẵn : user_confirms_reset()
Chờ sẵn –> [*]
@enduml
Giải thích sơ đồ
- Chờ sẵn — 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 hoạt động con 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 — Trạng thái tạm dừng sau khi 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
- Tiết kiệm nước — Chỉ tưới khi thực sự cần thiết (dựa trên độ ẩm đất thay vì thời gian).
- Phòng ngừa ngập úng — Điều kiện thoát kép từ trạng thái tưới nước (mục tiêu độ ẩm + thời gian giới hạn).
- An toàn và kiểm soát của người dùng — Xác nhận thủ công sau khi dừng bất thường ngăn chặn việc khởi động lại tự động sau các sự cố tiềm tàng.
- 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 phức tạp khi nhóm logic giúp làm rõ hơn (tưới nước).
Thiết kế này cân bằng giữa độ bền, an toàn và đơn giản — phù hợp để 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ổ lý tưởng để 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 tiêu 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ò là tài liệu tham khảo vừa là bản vẽ thiết kế cho việc triển khai. Việc 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 trong 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 có 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 nhiều từ mô hình hóa theo trạng thái có cấu trúc.