---
title: garden_1-van-hanh.md
url: https://share.jotbird.com/cosmic-spirited-mirage
updated_at: 2026-08-17T03:07:35.833877+00:00
---

# 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](vat-tu.md) (vật tư) · [lap-rap.md](lap-rap.md) (lắp ráp) · [simulate-smart-garden.md](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)

```text
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 trong `setup()` 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ự)

```text
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`/`lastSlot` **ngay 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)
- [ ] Nhận đủ 2 Telegram? (sáng + chiều)
- [ ] *(Nếu dùng dashboard)* Mở ThingSpeak: biểu đồ có điểm mới hôm nay?
- [ ] Khay đất còn ẩm nhẹ giữa 2 ca (không khô trắng, không đọng nước).

### Hàng tuần
- [ ] Sáng Chủ Nhật: hệ thống tự Flush 3 phút — quan sát ống có xả cặn không.
- [ ] Soi 3–4 béc đại diện (1 khay/tầng): nhỏ giọt đều không?

### 2 tuần/lần
- [ ] **Bù nước** đầy thùng 50L (mực nước hao do tưới + bốc hơi).
- [ ] Kiểm tra **chai mẹ**: còn dung dịch? bơm peristaltic còn hút được?
- [ ] *(Tùy chọn)* Xuất **CSV từ ThingSpeak** để giữ lịch sử vĩnh viễn (free tier giữ ~30 ngày).

### 1 tháng/lần
- [ ] **Vệ sinh lọc 120 mesh**: xoáy nắp ra, xịt rửa sạch cặn/rêu trên lưới → lắp lại.
- [ ] Kiểm tra miệng xả peristaltic vào thùng không bị cặn bít.
- [ ] Đo nồng độ bồn bằng bút TDS/EC → duy trì **EC 1.2–1.6 mS/cm (700–1000 ppm)** (cộng dồn theo lịch bù phân).

### 3 tháng/lần (quý)
- [ ] Kiểm tra phao ngắt cạn: nhấc phao lên → bơm chính phải ngắt ngay (test cạn khô).
- [ ] Rửa lồng PVC bảo vệ phao (rêu bám bên trong).
- [ ] Kiểm tra van anti-siphon đỉnh T3 mở/đóng nhẹ, không kẹt.
- [ ] Kiểm tra đấu nối hộp điện: vít nối xiết lại, không nước lọt vào hộp.

### 6 tháng / 1 năm
- [ ] Vệ sinh toàn bộ ống: chạy Flush liên tục 2–3 lần hoặc tháo béc xả ống bằng nước áp lực.
- [ ] Kiểm tra mòn dây/mối hàn, thay gen nhiệt nếu nứt.
- [ ] Kiểm tra ESP32: điện áp 5.0V đầu Buck còn chuẩn? MOSFET nguội khi chạy?
- [ ] *(Phase 2)* Cân nhắc nâng cấp: DHT22, OTA, INA219 (xem mục 8).

---

## 6. QUY TRÌNH TỪNG HẠNG MỤC BẢO TRÌ

### 6.1. Vệ sinh lọc 120 mesh (1 tháng)
1. Tắt nguồn 220V (hoặc cúp bơm).
2. Xoáy mở nắp lọc, lấy lưới ra.
3. Xịt nước sạch rửa cặn/rêu cả 2 mặt lưới.
4. Lắp lại, xiết kín, mở nguồn, chạy `/flush` 1 lần kiểm tra.

### 6.2. Bù nước & duy trì dinh dưỡng
1. Bù nước sạch đầy thùng 50L (luôn để nước ngập đầu hút bơm).
2. Kiểm tra chai mẹ: còn ~1/3 thì pha lại dung dịch đậm đặc mới.
3. 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.
4. 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)
1. Vào Maintenance Mode (giữ nút >5s lúc cắm nguồn).
2. Tắt nguồn, tháo bơm chìm + phao, đổ bớt nước.
3. 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).
4. Rửa lồng PVC, kiểm tra phao.
5. 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)
1. Maintenance Mode → tắt nguồn.
2. Rút béc Non-PC cũ khỏi ống PE6.
3. Cắm béc mới đúng lưu lượng tầng (T1=2L/h, T2=3L/h, T3=4L/h).
4. Mở nguồn, chạy `/flush` kiể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
1. **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.
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.
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).
4. 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):**
1. Trước mỗi ca tưới, ESP32 **đo áp pin** qua ADC (cầu chia áp).
2. 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.
3. 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).
4. 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Ỏ)

1. **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ì.
2. **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.
3. **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).
4. **Mixing delay 15s** sau châm phân trước khi bật bơm chính — KHÔNG rút ngắn.
5. **Ghi NVS 2 lần/ngày** — KHÔNG ghi nhiều hơn (bảo vệ Flash 136 năm).
6. **Thao tác điện:** ngắt 220V trước khi đụng dây. Đo 5.0V Buck trước khi cắm ESP32.
7. **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.
8. **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.*
