garden_1 ¶
🔄 QUY TRÌNH VẬN HÀNH & BẢO TRÌ HỆ THỐNG TƯỚI RAU TỰ ĐỘNG ¶
Dự án: garden_1 · ESP32 · Tưới + châm dinh dưỡng tự động
Liên quan: vat-tu.md (vật tư) · lap-rap.md (lắp ráp) · simulate-smart-garden.md (bản vẽ)
Nguồn chuẩn: .plan/plan1_final_1_final.md · .project/architecture.md · .project/patterns.md · .project/decisions.md
Mục tiêu tài liệu: hệ thống chạy trơn tru, bền >3–5 năm, điện ~5–6 mAh/ngày (đã gồm push telemetry ThingSpeak), độ tin cậy >98%. Mọi thao tác dưới đây tuân theo 4 trụ cột: tiết kiệm điện · không mòn Flash · không nghẹt béc · chống cúp điện.
1. VÒNG ĐỜI HỆ THỐNG (TỔNG QUAN) ¶
Vận hành tự động ──► Bảo trì định kỳ ──► Phát hiện lỗi ──► Sửa chữa ──► Vận hành lại
▲ │ │
└────────────── Kiểm tra sau sửa ◄──┘ │
└────────────── Nâng cấp Phase 2 (3–6 tháng) ◄─────────────────────┘
- Ngày thường: ngủ Deep Sleep 23.9h → thức 2 lần tưới → ngủ lại.
- Bảo trì: lịch cố định (mục 5) — chủ yếu vệ sinh lọc, bù nước, kiểm tra chai mẹ.
- Sửa chữa: Maintenance Mode ngăn hệ thống tự chạy khi đang sửa.
2. CHU TRÌNH VẬN HÀNH TRONG NGÀY ¶
2.1. Nhịp thức–ngủ (lý do chỉ ~5–6 mAh/ngày) ¶
| Thời điểm | Hoạt động | Năng lượng |
|---|---|---|
| 6h45 | Thức → tưới ca sáng | ~phút hoạt động |
| 17h00 | Thức → tưới ca chiều + push telemetry ThingSpeak | ~phút hoạt động |
| Giữa các ca | Deep Sleep (< 10µA) | ~0 |
| Ngẫu nhiên | Bấm nút GPIO33 → WebServer 3 phút | ~3–5 mAh/lần bấm |
Nguyên lý: ESP32 chỉ "thức" khi có việc (2 ca tưới + khi bấm nút). Toàn bộ thời gian còn lại Deep Sleep. Không có
loop()chạy liên tục — mọi logic nằm trongsetup()rồi ngủ. 📡 Telemetry cloud (ADR-010): trong cửa sổ ca chiều 17h00–17h25, ESP32 đẩy 1 HTTP GET/ngày lên ThingSpeak (~5–10s Wi-Fi trong lần thức đã có sẵn) → tổng tiêu thụ ~5–6 mAh/ngày, vẫn trong thiết kế. Bộ đếm (bootCount, streak lỗi...) sống trong RTC RAM — không ghi NVS thêm (giữ ADR-005 2 lần/ngày). ⚠️ Mỗi lần bấm nút mở WebServer tốn ~3–5 mAh ≈ gần bằng cả ngày ngân sách — hạn chế bấm nút, ưu tiên theo dõi qua Telegram/ThingSpeak.
2.2. Trình tự 1 ca tưới (bất biến — không đổi thứ tự) ¶
Thức dậy (Timer/EXT0)
│
├─ [Giữ nút >5s?] ─► MAINTENANCE MODE (WebServer vĩnh viễn)
│
├─ [EXT0 bấm nút?] ─► WebServer 3 phút (tưới tay / xả ống)
│
└─ [Timer ca tưới] ─► Wi-Fi + NTP
│ lỗi ─► ngủ 15 phút, thử lại (không ngủ vĩnh viễn)
▼
Đọc NVS (lastDay, lastSlot)
│
├─ [Đã tưới ca này hôm nay?] ─► ngủ đến ca sau
│
├─ [Pin < ngưỡng yếu?] ─► Buzzer 5s + Telegram "PIN YẾU" + BỎ ca tưới → ngủ
│ (chỉ khi chạy solar — Phase 2, ADR-009; dùng nguồn lưới bỏ qua)
│
└─ Chưa tưới ─►
1–2. [Option A] Châm phân 8s + Mixing 15s ← BỎ ở Option B (pha tay, ADR-011)
3. Bơm chính 120s (Flush CN: 180s) ← tưới 12 khay
4. GHI NVS (lastDay, lastSlot) ← chống cúp điện
5. Telegram báo kết quả
6. (Ca chiều 17h00–17h25) Push telemetry ThingSpeak 1 lần/ngày ← ADR-010
▼
Tính giây ngủ → Deep Sleep
🔒 Trật tự 2–3 là cứng (chỉ khi chạy Option A châm phân tự động): châm phân → đợi 15 giây → mới bật bơm chính. Rút ngắn 15s = phân chưa tan, khay đầu hứng đậm đặc → cháy rễ (ADR-006). 🪙 Option B (đã chọn, ADR-011): không có bước châm phân tự động — phân pha tay, đổ trực tiếp vào bồn rồi để bơm chính trộn ~1–2 phút (xem §6.2).
2.3. Ca Flush Chủ Nhật ¶
- Sáng Chủ Nhật (
currentDay == 0): bơm chính 180s nước sạch, KHÔNG châm phân. - Mục đích: xả cặn phân bón kết tinh trong ống PE16 + béc → chống nghẹt.
2.4. Các chế độ vận hành ¶
| Chế độ | Kích hoạt | Hành vi | Dùng khi |
|---|---|---|---|
| Tự động | Mặc định | 2 ca tưới + Flush Chủ Nhật | Hằng ngày |
| WebServer 3 phút | Bấm nút GPIO33 (EXT0) | / dashboard · /water tưới 2 phút · /flush xả sạch |
Tưới tay, kiểm tra |
| Maintenance | Giữ nút >5s lúc cắm nguồn | WebServer vĩnh viễn, KHÔNG ngủ, không tự tưới | Sửa chữa, vệ sinh |
| Pin yếu (solar) | Áp pin < ngưỡng 11.6V | Buzzer kêu + Telegram báo + BỎ ca tưới, giữ pin | Cắm pin dự phòng tạm thời |
3. NGUYÊN LÝ BỀN BỈ NHIỀU NĂM (4 TRỤ CỘT) ¶
Trụ 1 — Không mòn Flash: ghi NVS đúng 2 lần/ngày ¶
- Chỉ ghi
lastDay/lastSlotngay sau mỗi ca tưới (2 lần/ngày). - Tính toán: Flash chịu ~100.000 lần ghi → 730 lần/năm → tuổi thọ ~136 năm.
- ⚠️ KHÔNG ghi NVS trong vòng lặp, khi thức ngủ ngắn, hay mỗi lần bấm nút.
RTC_DATA_ATTR(RTC RAM) chỉ dùng cho dữ liệu tạm (bootCount) — KHÔNG dùng cho trạng thái ca tưới (mất khi cúp điện thật).
Trụ 2 — Chống cúp điện 100% ¶
- Trạng thái ca tưới nằm trong NVS Flash → cúp điện giữa ca, bật lại không tưới lặp.
- Phao ngắt cạn cứng nối tiếp +12V bơm chính → cạn nước = ngắt điện bơm ngay, độc lập MCU.
- NTP/Wi-Fi lỗi → ngủ 15 phút rồi thử lại — không ngủ vĩnh viễn, không tưới sai giờ.
Trụ 3 — Chống nghẹt béc (điểm hỏng #1 của hệ thống tưới) ¶
- Lọc 120 mesh chặn cặn/rêu trước khi vào béc.
- Flush Chủ Nhật xả cặn kết tinh trong ống.
- Béc Non-PC (không bù áp) — rẻ, ít điểm hỏng, thay ~1.5k.
- KHÔNG gắn 36 van anti-drain (tốn tiền + 36 điểm nghẹt mới).
Trụ 4 — Chống rêu/muỗi & ăn mòn ¶
- Thùng HDPE/PP tối màu, đậy kín → chặn rêu tảo, lăng quăng.
- Lồng PVC Ø60 đục lỗ bảo vệ phao → chặn rêu/muỗi kẹt cần phao.
- Hộp điện Sino chống nước, đấu nối chắc, gen nhiệt bọc đầu nối ngoài trời.
- Diode flyback + tụ 1000µF → MOSFET không chết sớm do Back-EMF/inrush.
4. DẤU HIỆU HỆ THỐNG HOẠT ĐỘNG ĐÚNG / SAI ¶
| Dấu hiệu | Đúng | Sai |
|---|---|---|
| Telegram mỗi ca | Báo tưới thành công 2×/ngày | Im lặng >1 ngày → lỗi Wi-Fi/nguồn |
| Béc | Nhỏ giọt đều, T3 không yếu | Béc khô/đầy, T3 yếu → nghẹt/van sai |
| Bơm chính | Chạy 120s đúng giờ, êm | Kêu lạ, chạy khan, không dừng |
| Sau khi tắt bơm | Không xả dồn nước T3→T1 | Có xả dồn → anti-siphon hỏng |
| Ngày Chủ Nhật | Flush 180s không phân | Không flush / có châm phân |
| Cúp điện | Bật lại không tưới lặp | Tưới lặp → NVS lỗi |
| ThingSpeak | Data mới mỗi ngày (biểu đồ/status cập nhật) | Không có data >1–2 ngày → lỗi Wi-Fi/API key/nguồn |
| Điện năng | ~5–6 mAh/ngày (đã gồm push telemetry) | Tiêu hao cao → chưa Deep Sleep |
5. LỊCH BẢO TRÌ ĐỊNH KỲ ¶
Hàng ngày (kiểm tra nhanh, ~1 phút) ¶
Hàng tuần ¶
2 tuần/lần ¶
1 tháng/lần ¶
3 tháng/lần (quý) ¶
6 tháng / 1 năm ¶
6. QUY TRÌNH TỪNG HẠNG MỤC BẢO TRÌ ¶
6.1. Vệ sinh lọc 120 mesh (1 tháng) ¶
- Tắt nguồn 220V (hoặc cúp bơm).
- Xoáy mở nắp lọc, lấy lưới ra.
- Xịt nước sạch rửa cặn/rêu cả 2 mặt lưới.
- Lắp lại, xiết kín, mở nguồn, chạy
/flush1 lần kiểm tra.
6.2. Bù nước & duy trì dinh dưỡng ¶
- Bù nước sạch đầy thùng 50L (luôn để nước ngập đầu hút bơm).
- Kiểm tra chai mẹ: còn ~1/3 thì pha lại dung dịch đậm đặc mới.
- Khi bồn bị pha loãng sau nhiều lần bù nước → bù phân tay (Option B): đổ dung dịch mẹ trực tiếp vào bồn theo tỷ lệ đã calibrate (lap-rap §5.2), để bơm chính trộn ~1–2 phút rồi đo EC.
- Duy trì EC 1.2–1.6 mS/cm — chỉnh thời gian châm trong code nếu lệch nhiều.
6.3. Vệ sinh thùng & chống muỗi (3–6 tháng) ¶
- Vào Maintenance Mode (giữ nút >5s lúc cắm nguồn).
- Tắt nguồn, tháo bơm chìm + phao, đổ bớt nước.
- Cọ rửa thành thùng bằng bàn chải mềm (không dùng hóa chất độc hại rau).
- Rửa lồng PVC, kiểm tra phao.
- Lắp lại, đổ nước sạch, bù dinh dưỡng, thoát Maintenance (reset tay).
6.4. Thay béc nghẹt (khi cần) ¶
- Maintenance Mode → tắt nguồn.
- Rút béc Non-PC cũ khỏi ống PE6.
- Cắm béc mới đúng lưu lượng tầng (T1=2L/h, T2=3L/h, T3=4L/h).
- Mở nguồn, chạy
/flushkiểm tra.
7. CHẨN ĐOÁN & SỬA CHỮA SỰ CỐ ¶
Quy trình chung: ① Xác định triệu chứng → ② Cô lập phân đoạn (điện / thủy lực / firmware) → ③ Sửa → ④ Test → ⑤ Vận hành lại.
7.1. Bảng sự cố nhanh ¶
| Triệu chứng | Phân đoạn | Nguyên nhân | Xử lý |
|---|---|---|---|
| Không nhận Telegram | Firmware/nguồn | Mất Wi-Fi, sai token, ESP32 chết | Kiểm tra nguồn 5V Buck, WebServer / xem IP, thử lại token |
| Bơm chính không chạy | Điện | Phao cạn ngắt, MOSFET hỏng, pull-down đứt | Kiểm tra phao (nhấc lên/xuống), đo Gate MOSFET, đo 12V đầu ra |
| Bơm chớp lúc boot | Điện | Thiếu pull-down 10k Gate→GND | Hàn trở 10k |
| ESP32 reset khi bơm bật | Điện | Sụt áp 12V (thiếu tụ 1000µF) | Hàn tụ song song bus 12V |
| Tưới lặp sau cúp điện | Firmware | NVS chưa ghi đúng, lastDay/lastSlot sai |
Kiểm tra prefs.putInt sau ca tưới |
| Béc tầng 3 khô/yếu | Thủy lực | Lọc bẩn, béc sai lưu lượng, van tiết lưu T1/T2 đóng hết | Vệ sinh lọc, kiểm tra béc 4L/h, mở van tiết lưu |
| Nước dồn T1 sau tắt bơm | Thủy lực | Anti-siphon kẹt/bịt | Kiểm tra van đỉnh T3 |
| Bơm chạy nhưng không lên nước | Thủy lực | Mất mồi (van 1 chiều hỏng), lọc nghẹt cứng | Kiểm tra van 1 chiều đầu bơm, xả khí |
| Peristaltic không hút phân | Thủy lực | Ống hút rời, tắc, chai cạn | Kiểm tra ống hút chìm đáy chai, vệ sinh |
| Tiêu hao điện cao | Firmware | Chưa Deep Sleep, ngủ ngắn liên tục | Kiểm tra wakeup cause, tính giây ngủ |
| Không có data mới trên ThingSpeak | Firmware/cloud | Chưa tới 17h00, Wi-Fi fail, sai Write API Key, push fail | Xác minh API key, kiểm tra Telegram/RSSI, xem log [TELEMETRY] qua Serial |
| ESP32 nóng/kêu | Điện | Buck sai áp, MOSFET kẹt ON | Đo 5.0V, đo nhiệt, thay linh kiện |
| Bỏ ca tưới + buzzer kêu | Điện | Pin yếu (ngưỡng 11.6V) | Cắm pin dự phòng tạm thời, kiểm tra solar sạc |
7.2. Quy trình cô lập lỗi nhanh ¶
- Maintenance Mode → có WebServer?
- Không → lỗi nguồn/ESP32 (đo 5.0V Buck, kiểm tra nạp lại code).
- Có → bước 2.
- Mở
/flush→ bơm chính chạy?- Không → lỗi điện bơm (phao/MOSFET/đấu dây).
- Có → bước 3.
- Mở
/water→ peristaltic + bơm chính?- Peristaltic không chạy → lỗi MOSFET #2/GPIO27.
- Chạy nhưng béc không ra → lỗi thủy lực (lọc/van/ống phân phối/béc).
- Kiểm tra Telegram → firmware gửi OK?
7.3. Sửa firmware (lỗi logic) ¶
- Sửa trong
.project/modules/firmware.md+.project/firmware.md+ Master Plan (3 nơi phải đồng bộ, giữ IDENTICAL). - Sau khi sửa: biên dịch → nạp → test 3 chế độ → cúp điện test.
- Thay đổi thông số ca tưới/thời gian → chỉnh
#defineđầu file rồi nạp lại.
7.4. Rollback an toàn ¶
- Giữ bản firmware cũ (git history / bản backup
.bin) trước khi nạp bản mới. - Lỗi phần cứng nặng (bơm/MOSFET chết) → ngắt nguồn 220V → sửa xong mới cấp lại.
8. NÂNG CẤP PHASE 2 (SAU 3–6 THÁNG, TÙY CHỌN) ¶
Nguyên tắc: chỉ thêm khi hệ thống vận hành ổn định. Mỗi cảm biến mới = 1 điểm hỏng tiềm năng (ADR-007). 📊 Dashboard cloud + lịch sử telemetry ĐÃ CÓ từ Phase 1 (ThingSpeak, ADR-010) — không nằm trong danh sách nâng cấp dưới đây.
8.1. Nguồn năng lượng mặt trời + cảnh báo hết pin (ưu tiên #1) ¶
Yêu cầu user: ESP32 chạy bằng năng lượng mặt trời; khi hết pin phải BÁO KÊU để người lắp pin dự phòng tạm thời.
Hạ tầng nguồn (ADR-009):
- Panel 20–50W + mạch sạc CC-CV/MPPT + pin lithium 12V (3S: 11.1V danh định, 12.6V đầy).
- Bơm chính 12V chạy thẳng từ pin. Buck LM2596 12V→5V cấp ESP32 giữ nguyên.
- Buzzer 5V GPIO rời (vd GPIO4/15) — chỉ bật khi cảnh báo.
Luồng bảo vệ pin (đã chốt — phương án A, user duyệt):
- Trước mỗi ca tưới, ESP32 đo áp pin qua ADC (cầu chia áp).
- Pin < ngưỡng yếu (3S ≈ 11.6V) → buzzer kêu ~5s + Telegram "⚠ PIN YẾU — cắm pin dự phòng" + BỎ QUA ca tưới, ngủ tiếp.
- Pin < ngưỡng nguy hiểm (≈ 11.0V) → ngừng mọi hoạt động, ngủ sâu nhất (bảo vệ pin khỏi xả sâu — pin chết hẳn thì không còn gì báo).
- Người lắp pin dự phòng tạm thời → ESP32 thức kế tiếp đo áp đủ → tự phục hồi bình thường.
🔒 Quyết định đã chốt: pin yếu = BỎ ca tưới, không cố tưới hết pin. Rau chịu khô vài ngày, pin chết vĩnh viễn thì hệ thống tê liệt. (ADR-009)
Nhu cầu công suất (rất nhỏ): tưới 2 ca × 120s × 15W ≈ 1 Wh/ngày + ESP32 ~5 mAh → pin 3S 5000mAh (~55Wh) đủ chạy > 30 ngày không nắng. Panel 20W dư sức.
8.2. Bảng ưu tiên nâng cấp ¶
| Ưu tiên | Nâng cấp | Lợi ích | Điều kiện |
|---|---|---|---|
| 1 | Nguồn solar + báo pin yếu | Tự chủ năng lượng, biết khi cần thay pin | Panel/sạc/pin/buzzer + ADC chia áp |
| 2 | Cảm biến mực nước bình | Báo "bình cạn" cho người (khỏi canh lịch 2 tuần) | Điện cực/phao mức + 1 GPIO |
| 3 | DHT22 (nhiệt/ẩm không khí) | Điều chỉnh thời gian tưới theo mùa | Có sẵn chân GPIO |
| 4 | OTA update | Nạp firmware qua Wi-Fi, không tháo hộp | Cần bổ sung thư viện + route |
| 5 | INA219 (dòng) | Phát hiện bơm kẹt/chạy khan | Thêm vào bước đọc trước khi tưới |
| — | Camera / EC-pH | Tuỳ nhu cầu | Để vị trí trống trên kệ (đã chừa trong bản vẽ) |
Trước khi nâng cấp: đối chiếu ADR (
decisions.md) tránh vi phạm quyết định cũ. Sau khi thay đổi: cập nhật.project/+working.md+state.md.
9. AN TOÀN & KHÓA AN TOÀN (TUYỆT ĐỐI KHÔNG BỎ) ¶
- Phao ngắt cạn cứng nối tiếp +12V bơm chính — độc lập 100% MCU. Cạn nước = ngắt điện bơm tức thì.
- Bảo vệ MOSFET: trở 10k pull-down Gate→GND, diode 1N4007 flyback tại cọc bơm, tụ 1000µF/25V bus 12V.
- Bơm châm phân dùng peristaltic — KHÔNG dùng Venturi (đã chứng minh liệt với bơm áp thấp 12V, ADR-003).
- Mixing delay 15s sau châm phân trước khi bật bơm chính — KHÔNG rút ngắn.
- Ghi NVS 2 lần/ngày — KHÔNG ghi nhiều hơn (bảo vệ Flash 136 năm).
- Thao tác điện: ngắt 220V trước khi đụng dây. Đo 5.0V Buck trước khi cắm ESP32.
- Nước + điện: hộp điện kín, đấu nối ngoài trời có gen nhiệt, thùng đậy kín chống rêu/muỗi.
- Bảo vệ pin (solar, Phase 2 — ADR-009): pin yếu = bỏ ca tưới, giữ pin; mạch chống xả sâu cứng. Buzzer báo TRƯỚC ngưỡng chết pin.
Tài liệu vận hành tuân thủ Master Plan v2.0 + ADR-001→012. Mọi thay đổi quy trình/thiết kế phải cập nhật .project/ và đối chiếu ADR.