1. Apa Itu Sensor Kelembapan Tanah Kapasitif
Sensor ini berguna untuk mengukur kadar air dalam tanah dengan membaca perubahan kapasitansi (kapasitor) antara dua elektroda yang berada di probe.
Berbeda dari sensor resistif, sensor kapasitif tidak terjadi arus langsung lewat tanah, jadi tidak cepat korosi dan lebih awet dipakai di tanah bertahun-tahun.
Output: tegangan analog yang bervariasi tergantung kelembapan tanah
Pin: biasanya 3 pin: VCC, GND, AOUT (output analog)
2. Prinsip Kerja Singkat
- Di dalam sensor ada struktur yang berperan seperti kapasitor virtual (dua pola PCB).
- Ketika tanah lebih basah, kandungan air meningkatkan kapasitansi → ini memengaruhi charging kapasitor dan tegangan output analognya akan berubah.
- Arduino membaca tegangan pada pin analog (mis. A0) → nilai ADC kemudian diolah menjadi level kelembapan.
3. Spesifikasi Umum Sensor Kapasitif
| Fitur | Nilai / Keterangan |
|---|---|
| Tegangan kerja | 3.3-5V DC (umumnya 5V saat pakai Arduino) |
| Output | Analog (tegangan berubah sebanding dengan kelembapan) |
| Tipe interface | Analog output → Arduino analog input (A0 …) |
| Konsumsi arus | < 5 mA |
| Posisi selam | Jangan sekali-kali seluruh board (chip) masuk tanah/air — hanya probe bawah saja |
Kelebihan
- Tidak korosi: Elektroda tidak langsung kontak arus lewat tanah → tahan lama dibanding sensor resistif.
- Mudah dibaca Arduino: Cukup analogRead saja.
- Cocok untuk monitoring moisture tanaman, smart watering/Irrigation otomatis, dll.
Kekurangan
- Nilai analognya relatif → perlu dikalibrasi ke kondisi tanah di lokasi kamu.
- Tidak cocok untuk air kolam / air murni pakai resistif bukan untuk capacitive.
5. Wiring dengan Arduino Uno

| Sensor Kapasitif | Arduino |
|---|---|
| VCC | 5V |
| GND | GND |
| AOUT | A0 (atau A1/A2) |
Kalibrasi Manual (batas wet/dry real)
- Pasang sensor di tanah yang kering.
- Upload kode yang membaca nilai sensor (lihat contoh bawah).
- Lihat nilai analog di Serial Monitor. Catat nilai ini → ini bakal jadi nilai kering (Dry).
- Sirami tanah dengan air perlahan, biarkan sensor tetap di tanah.
- Lihat kembali nilai di Serial Monitor ketika tanah mulai terasa lembab. Catat → ini jadi nilai basah (Wet).
- Gunakan nilai-nilai itu sebagai threshold di programmu untuk menentukan kondisi tanah.
const int sensorPin = A0; // sensor keluar ke A0
void setup() {
Serial.begin(9600);
pinMode(sensorPin, INPUT);
}
void loop() {
int sensorValue = analogRead(sensorPin); // baca nilai analog (0–1023)
Serial.print("Nilai mentah: ");
Serial.println(sensorValue);
delay(1000);
}
Output akan berada sekitar 0–1023
Nilai tinggi bisa berarti tanah lebih kering, nilai rendah bisa berarti tanah lebih basah (tergantung jenis sensor & kalibrasi)
7. Membuat Persentase Kelembapan
Kalau mau lebih visual (mis. dalam %):
const int sensorPin = A0;
int dryValue = 600; // hasil baca saat tanah benar-benar kering
int wetValue = 300; // hasil baca saat tanah sangat basah
void setup() {
Serial.begin(9600);
}
void loop() {
int raw = analogRead(sensorPin);
int percent = map(raw, dryValue, wetValue, 0, 100);
percent = constrain(percent, 0, 100);
Serial.print("Kelembapan: ");
Serial.print(percent);
Serial.println("%");
delay(1000);
}
Kalibrasi nilai dryValue & wetValue sesuai tanah kamu supaya persentase akurat.
8. Contoh Penerapan
1. Smart Irrigation System:
• Jika kelembapan dibawah threshold → hidupkan pompa/solenoid watering.
• Jika kelembapan normal → matikan watering.
2. Monitoring Kelembapan Tanah di Rumah/Garden:
• Tampilkan data di Serial Monitor, LCD, atau sistem IoT.
3. Integrasi Dashboard IoT:
• Kirim data ke Blynk/MQTT/Thingspeak untuk monitor jarak jauh.
Wiring Sensor ke Arduino Mega

| Pin Sensor | Pin Arduino Mega | Keterangan |
|---|---|---|
| VCC (merah) | 5V | Power sensor |
| GND (hitam) | GND | Ground bersama |
| AOUT / SIG (kuning) | Analog A0–A15 (mis. A0) | Baca nilai kelembapan |
Pada Arduino Mega, kamu bebas pakai pin analog A0–A15 untuk baca sensor.
Pastikan sensor tetap diberi 5 V dan ground Arduino terhubung juga ke sensor.
Membaca Nilai Mentah Sensor (Analog)
Upload kode ini dulu supaya kamu melihat langsung nilai ADC sensor saat di tanah kering, lembab, dan basah:
const int sensorPin = A0;
void setup() {
Serial.begin(9600);
}
void loop() {
int sensorValue = analogRead(sensorPin);
Serial.print("Nilai sensor mentah: ");
Serial.println(sensorValue);
delay(1000);
}
Saat sensor ditancapkan di tanah kering → catat nilainya.
Siram tanah, biarkan sensor di tanah basah → catat nilainya.
Nilai inilah yang akan kita pakai buat kalibrasi (set threshold basah & kering).
Kalibrasi Manual Sensor
Mengapa Perlu Kalibrasi?
Nilai analog mentah berbeda tergantung jenis tanah, kadar air, dan pemasangan sensor, jadi kita perlu menentukan nilai baseline sendiri supaya persentase kelembapannya lebih akurat.
Cara Kalibrasi
- Letakkan sensor di tanah kosong/atau tanah kering.
Catat angkanya → ini jadi nilai kering (dryValue). - Tempatkan sensor di tanah yang sangat basah (banyak air).
Catat angkanya → ini jadi nilai basah (wetValue). - Gunakan nilai itu untuk mapping ke persentase (0–100 %).
Kode Arduino Mega dengan Kalibrasi (%)
Ganti nilai dryValue dan wetValue dengan hasil pengukurannya:
const int sensorPin = A0;
// Ganti dengan nilai hasil kalibrasi
int dryValue = 800; // contoh nilai saat tanah sangat kering
int wetValue = 300; // contoh nilai saat tanah sangat basah
void setup() {
Serial.begin(9600);
}
void loop() {
int raw = analogRead(sensorPin);
// Peta dari nilai mentah ke % kelembapan
int moisturePercent = map(raw, dryValue, wetValue, 0, 100);
// Batasi range
moisturePercent = constrain(moisturePercent, 0, 100);
Serial.print("Raw: ");
Serial.print(raw);
Serial.print(" | Kelembapan: ");
Serial.print(moisturePercent);
Serial.println("%");
delay(1000);
}
map() mengubah rentang ADC (misalnya 800–300) jadi skala 0–100 %.
constrain() memastikan nilainya tetap dalam 0–100.
Wiring (Koneksi ESP32 ↔ Sensor)

| Pin Sensor Kapasitif | Pin ESP32 | Fungsi / Keterangan |
|---|---|---|
| VCC | 3.3V atau 5V | Power sensor (3.3V lebih aman untuk ESP32 ADC) |
| GND | GND | Ground bersama sistem |
| AOUT / SIG (kuning) | GPIO ADC (mis. 36 / 34 / 32 / 33) | Output analog kelembapan di-baca lewat ADC |
Bagian kabel PCB atas sensor jangan ditanam tanah/air ya — cuma probe bawahnya yang boleh masuk tanah, agar PCB sensor tidak rusak.
Rekomendasi pin ADC stabil di ESP32: GPIO36, GPIO39, GPIO32, GPIO33 (hindari pin ADC yang dipakai Wi-Fi bersamaan).
#define MOISTURE_PIN 34 // misal GPIO34
void setup() {
Serial.begin(9600);
analogSetPinAttenuation(MOISTURE_PIN, ADC_11db); // Lebar range ADC penuh
}
void loop() {
int sensorValue = analogRead(MOISTURE_PIN);
Serial.print("Nilai kelembapan (ADC): ");
Serial.println(sensorValue);
delay(500);
}
Fungsi analogSetPinAttenuation()/analogSetAttenuation(ADC_11db) memastikan ESP32 membaca range tegangan sensor secara maksimal sebelum dibaca ADC.
Kalibrasi Sensor (Biar Akurat)
Kenapa Kalibrasi?
Nilai ADC tergantung tanah jenis, sensor, dan lingkungan, sehingga butuh nilai batas basah & kering yang sesuai lokasimu.
Langkah Kalibrasi
- Tanah kering: Masukkan sensor ke tanah kering, lihat nilai di Serial Monitor → catat sebagai
dryValue. - Tanah basah: Siram tanah sampai lembap/tertanam air, lihat nilai di Serial Monitor → catat sebagai
wetValue. - Gunakan
dryValue&wetValueitu di program berikut.
Konversi Jadi Persentase (%)
Setelah kalibrasi, kamu bisa ubah hasil pembacaan jadi persentase kelembapan seperti ini:
#define MOISTURE_PIN 34
int dryValue = 3300; // ganti dengan nilai tanah kering
int wetValue = 1500; // ganti dengan nilai tanah basah
void setup() {
Serial.begin(9600);
analogSetPinAttenuation(MOISTURE_PIN, ADC_11db);
}
void loop() {
int raw = analogRead(MOISTURE_PIN);
// Map dari range ADC ke 0–100%
int percent = map(raw, wetValue, dryValue, 100, 0);
percent = constrain(percent, 0, 100);
Serial.print("Kelembapan tanah: ");
Serial.print(percent);
Serial.println("%");
delay(1000);
}
map() ubah nilai ADC ke %
constrain() memastikan angka tetap di rentang 0–100 %
Menentukan Tanah Basah atau Kering
Kalau kamu cuma mau cek status tanah:
#define MOISTURE_PIN 34
#define THRESHOLD 2000 // ganti sesuai hasil kalibrasi
void setup() {
Serial.begin(9600);
analogSetPinAttenuation(MOISTURE_PIN, ADC_11db);
}
void loop() {
int value = analogRead(MOISTURE_PIN);
if (value > THRESHOLD) {
Serial.println("Tanah KERING");
} else {
Serial.println("Tanah BASAH");
}
Serial.print("Nilai: ");
Serial.println(value);
delay(500);
}
Jika ADC di atas threshold → dianggap kering
Di bawah threshold → dianggap basah
sensor kelembaban tanah merupakan komponen penting dalam sistem pemantauan dan otomatisasi pertanian modern. Dengan kemampuannya mendeteksi kadar air di dalam tanah secara akurat, sensor ini membantu menjaga kondisi tanah tetap optimal bagi pertumbuhan tanaman, sekaligus mencegah pemborosan air. Penggunaan sensor kelembaban tanah tidak hanya meningkatkan efisiensi penyiraman, tetapi juga mendukung praktik pertanian yang lebih cerdas, hemat energi, dan ramah lingkungan.
