Nghiên cứu trường hợp: Thiết kế máy trạng thái cho bộ điều khiển tưới thông minh cho vườn cây

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 /).

plantuml
@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.