ArduinoVN
Đăng nhập Tham gia

Danh sách linh kiện

CSV
Linh kiện SL Đơn giá Thành tiền Đã có Mua
Tổng chi phí còn lại:

Các bước thực hiện

6 bước

Bước 1: Power budget — tính toán

Mục tiêu: chạy 24/7, qua mưa 3 ngày liên tục, vườn xa không có điện.

Tải:

  • ESP32 deep sleep + wake mỗi 30 phút: trung bình ~5mA × 3.3V = 16mW.
  • Bơm 5V DC 800 L/h: 1A × 5V = 5W khi chạy, 0W khi tắt.
  • Bơm chạy ~2 phút/ngày: 5W × 2/60 giờ = 0.17 Wh/ngày.
  • ESP32: 16mW × 24h = 0.38 Wh/ngày.
  • Tổng: ~0.5 Wh/ngày.

Solar + battery:

  • Solar 20W panel: ngày nắng VN cho ~80–100 Wh.
  • Battery 12.8V 8Ah LiFePO4: 102 Wh.
  • Hệ số an toàn ×5 (mưa 3 ngày + losses): cần ~7.5 Wh → có dư rất nhiều.

Conclusion: 20W panel + 8Ah battery overkill nhưng đủ buffer cho mưa nhiều ngày.

Bước 2: Linh kiện

  • Solar panel 20W 12V (~400k).
  • Solar charge controller PWM 10A 12V (~150k) — không cần MPPT đắt.
  • Battery LiFePO4 12.8V 8Ah (~600k) — bền 2000+ chu kỳ sạc, an toàn cháy nổ hơn Li-ion.
  • Buck converter LM2596 12V → 5V cho ESP32 + bơm.
  • ESP32 DevKit.
  • Bơm chìm DC 5V 800 L/h (~50k).
  • Module relay 5V.
  • 4× cảm biến độ ẩm đất.
  • Hộp kín IP65 chống nước cho điện tử.
  • Ống PE drip + emitter.

Bước 3: Sơ đồ hệ thống

Solar 20W → Charge Controller PWM → Battery 12.8V 8Ah
                                       │
                  ┌────────────────────┴────────────────────┐
                  │                                         │
             Buck 5V                                   12V tải khác (none)
                  │
         ┌────────┴────────┐
         │                 │
      ESP32              Bơm 5V (qua relay)
         │
     Cảm biến đất ×4

Charge controller bảo vệ battery khỏi over-discharge (cut off khi < 11V) và over-charge (cut off khi > 14.4V). Quan trọng cho tuổi thọ LiFePO4.

Bước 4: Code với deep sleep + battery monitoring

Logic:

  1. Wake mỗi 30 phút.
  2. Đọc cảm biến đất.
  3. Nếu khô (< 35%) → bật bơm 60s.
  4. Đọc voltage battery (qua chia áp).
  5. Gửi data lên cloud (nếu trong tầm WiFi gateway LoRa).
  6. Deep sleep.
solar_garden.ino — C++ / Arduino
#include <WiFi.h>
#include <HTTPClient.h>
#include <esp_sleep.h>

const char* SSID = "FarmGateway";
const char* PASS = "farmpass";
const String API_KEY = "YOUR_TS_KEY";

const int PIN_PUMP_RELAY = 26;
const int PIN_SOIL[4] = {34, 35, 36, 39};
const int PIN_VBAT = 33;

const int SOIL_DRY = 35;
const int PUMP_DURATION_MS = 60000;

float readBattery() {
  // Voltage divider: V_bat → R1(100k) → ADC pin → R2(20k) → GND
  // V_adc = V_bat × R2/(R1+R2) = V_bat × 20/120 = V_bat / 6
  int raw = analogRead(PIN_VBAT);
  return raw * (3.3 / 4095) * 6;
}

int readSoil(int pin) {
  long sum = 0;
  for (int i = 0; i < 10; i++) { sum += analogRead(pin); delay(2); }
  float v = sum / 10.0;
  int pct = map(v, 3200, 1400, 0, 100);
  return constrain(pct, 0, 100);
}

void setup() {
  Serial.begin(115200);
  pinMode(PIN_PUMP_RELAY, OUTPUT);
  digitalWrite(PIN_PUMP_RELAY, LOW);

  float vbat = readBattery();
  Serial.printf("Battery: %.2fV\n", vbat);

  // Bao ve: khong tuoi neu pin yeu
  if (vbat < 11.5) {
    Serial.println("Battery yeu — bo qua tuoi");
  } else {
    int soil[4];
    int minSoil = 100;
    for (int i = 0; i < 4; i++) {
      soil[i] = readSoil(PIN_SOIL[i]);
      Serial.printf("Soil %d: %d%%\n", i, soil[i]);
      if (soil[i] < minSoil) minSoil = soil[i];
    }

    if (minSoil < SOIL_DRY) {
      Serial.println("Tuoi cay");
      digitalWrite(PIN_PUMP_RELAY, HIGH);
      delay(PUMP_DURATION_MS);
      digitalWrite(PIN_PUMP_RELAY, LOW);
    }

    // Try upload data (timeout 15s)
    WiFi.begin(SSID, PASS);
    uint32_t start = millis();
    while (WiFi.status() != WL_CONNECTED && millis() - start < 15000) delay(500);
    if (WiFi.status() == WL_CONNECTED) {
      String url = "http://api.thingspeak.com/update?api_key=" + API_KEY +
                   "&field1=" + String(soil[0]) +
                   "&field2=" + String(soil[1]) +
                   "&field3=" + String(soil[2]) +
                   "&field4=" + String(soil[3]) +
                   "&field5=" + String(vbat, 2);
      HTTPClient http;
      http.begin(url);
      http.GET();
      http.end();
    }
  }

  // Deep sleep 30 phut
  esp_sleep_enable_timer_wakeup(30ULL * 60 * 1000000);
  esp_deep_sleep_start();
}

void loop() {}

Bước 5: Lắp đặt outdoor

  • Solar panel: đặt nghiêng 20° hướng nam (VN bán cầu bắc), tránh bóng cây.
  • Battery + electronics: hộp IP65 (~200k), gắn dưới panel.
  • Cảm biến đất: ngập đất 3cm, cách rễ 5cm. Dây thoát hộp qua cable gland chống nước.
  • Bơm chìm: trong bình nước 20L cao hơn cây (gravity assist).
  • Ống drip: emitter 4 L/h tại gốc mỗi cây.

Bước 6: Maintenance và mở rộng

Maintenance:

  • Lau panel mỗi tháng — bụi giảm output 20%.
  • Check connector ăn mòn mỗi 3 tháng.
  • Battery LiFePO4 không cần balance như Li-ion.
  • Bơm chìm hỏng sau 1–2 năm → có dự phòng.

Mở rộng:

  • LoRa thay WiFi → tầm xa hơn (1km), tiêu ít điện.
  • Cảm biến mưa → skip tưới ngày mưa.
  • Predict thời tiết: nếu API báo mưa → skip.
  • Camera ESP32-CAM nhỏ chụp 1 ảnh/ngày khi nắng nhiều.
  • Solar tracker: 2 LDR + servo xoay panel theo mặt trời → tăng power 30%.
  • Tự bơm nước từ giếng/ao nếu bình cạn.

Thảo luận (0)

Đăng nhập để tham gia thảo luận.
Chưa có bình luận nào. Hãy là người đầu tiên!