← Kembali ke Beranda

🌾 Sistem Pertanian Pintar Berbasis ESP32

Dokumen ini adalah panduan lengkap untuk membangun sistem pertanian pintar berbasis mikrokontroler ESP32 dengan sensor tanah, kontrol pompa air dan dosing pump NPK, serta integrasi Blynk.

1. Konsep Sistem

Sistem ini dirancang untuk mendeteksi kondisi tanah seperti:

Berdasarkan data sensor, sistem akan:

2. Integrasi dengan Blynk

Blynk digunakan untuk monitoring dan kontrol jarak jauh. Anda bisa memantau data sensor dan mengontrol pompa secara manual dari aplikasi Blynk di smartphone.

Langkah-langkah:

  1. Buat proyek baru di Blynk
  2. Tambahkan widget: Gauge untuk sensor, Button untuk kontrol
  3. Gunakan token auth untuk koneksi ESP32
  4. Upload kode Arduino ke ESP32

Contoh Kode Arduino:


#define BLYNK_PRINT Serial
#include 
#include 

char auth[] = "YOUR_BLYNK_AUTH_TOKEN";
char ssid[] = "WIFI_SSID";
char pass[] = "WIFI_PASSWORD";

int moisturePin = 34;
int phPin = 32;
int npkPin = 35;

int relayPompa = 26;
int relayNPK = 27;

BLYNK_WRITE(V3) {
  digitalWrite(relayPompa, param.asInt() ? LOW : HIGH);
}

BLYNK_WRITE(V4) {
  digitalWrite(relayNPK, param.asInt() ? LOW : HIGH);
}

void setup() {
  pinMode(moisturePin, INPUT);
  pinMode(phPin, INPUT);
  pinMode(npkPin, INPUT);
  pinMode(relayPompa, OUTPUT);
  pinMode(relayNPK, OUTPUT);

  Blynk.begin(auth, ssid, pass);
}

void loop() {
  Blynk.run();

  int moisture = analogRead(moisturePin);
  int ph = analogRead(phPin);
  int npk = analogRead(npkPin);

  Blynk.virtualWrite(V0, moisture);
  Blynk.virtualWrite(V1, ph);
  Blynk.virtualWrite(V2, npk);

  delay(2000);
}

      

3. Daftar Peralatan & Seri Komponen

No. Komponen Seri / Model Rekomendasi
1ESP32 Dev ModuleESP32 DEVKIT V1
2Sensor Kelembaban TanahCapacitive Soil Moisture Sensor V1.2
3Sensor pHDFRobot Gravity Analog pH Sensor
4Sensor NPKSEN0193 / YFS-201
5Relay Module2 Channel Relay Module
6Pompa Air12V Mini Water Pump
7Dosing PumpPeristaltic Dosing Pump 12V
8Voltage RegulatorAMS1117 3.3V
9Kotak ProteksiIP65 Waterproof Box
10Power Supply12V 2A Adaptor

4. Skema Rangkaian

+-----------------------------+
|          ESP32              |
|                             |
| GPIO34 ----> Soil Moisture  |
| GPIO32 ----> pH Sensor      |
| GPIO35 ----> NPK Sensor     |
|                             |
| GPIO26 ----> Relay 1 (Pompa)|
| GPIO27 ----> Relay 2 (NPK)  |
|                             |
| GND  ----> GND Sensor & Relay |
| 3V3  ----> VCC Sensor       |
+-----------------------------+

+-----------------------------+
|    Voltage Regulator        |
|                             |
| 12V In ----> AMS1117 3.3V   |
| OUT ----> VCC Sensor        |
| GND ----> GND                |
+-----------------------------+

+-----------------------------+
|     Relay Module 2 Channel  |
|                             |
| IN1 ----> GPIO26 (Pompa)    |
| IN2 ----> GPIO27 (NPK)      |
| VCC ----> 5V (ESP32)        |
| GND ----> GND               |
| NO ----> Pompa/Dosing Pump  |
| COM ----> 12V Power         |
+-----------------------------+
      

5. Desain PCB (Sederhana)

Dimensi: 60mm x 80mm

Komponen pada PCB:

6. Simulasi Wiring

Langkah Penyusunan:

  1. Sambungkan 12V ke regulator AMS1117 → 3.3V untuk sensor
  2. Sensor ke ESP32:
    • Soil Moisture → GPIO34
    • pH Sensor → GPIO32
    • NPK Sensor → GPIO35
  3. Relay ke ESP32:
    • Relay 1 (IN1) → GPIO26
    • Relay 2 (IN2) → GPIO27
  4. Pompa & Dosing Pump:
    • NO → Pompa/NPK Pump
    • COM → 12V Power
    • GND → GND

7. Simulasi Tinkercad

Anda bisa membuat simulasi di:

Tinkercad Circuits

Komponen yang Digunakan:

Upload Kode:


void setup() {
  pinMode(34, INPUT); // Soil Moisture
  pinMode(32, INPUT); // pH
  pinMode(35, INPUT); // NPK
  pinMode(26, OUTPUT); // Pompa
  pinMode(27, OUTPUT); // NPK
}

void loop() {
  int moisture = analogRead(34);
  int ph = analogRead(32);
  int npk = analogRead(35);

  if (moisture < 2000) {
    digitalWrite(26, LOW);
    delay(3000);
    digitalWrite(26, HIGH);
  }

  if (npk < 1500) {
    digitalWrite(27, LOW);
    delay(2000);
    digitalWrite(27, HIGH);
  }

  delay(5000);
}