Tutorial Belanja komponen

Tutorial › Tanaman & Air

Detektor Hujan Angkat Jemuran

ESP-12ED0D1D2D3D43VGD5D6D7D8RXTXG3VA0GVUS3S2S1SCS0SKG3VENRSTGVINVCCGNDDOAOModul sensor hujan (papan hujan ke 2 pin ujung)+S+−Modul buzzer aktif KY-012

Papan sensor hujan dipasang di dekat jemuran. Begitu tetes hujan pertama jatuh, buzzer di dalam rumah berbunyi dan Klenik mencatat jam mulai hujan. Kamu sempat mengangkat jemuran sebelum basah semua.

Papan hujan berisi jalur tembaga yang saling berselang-seling. Saat kering, kedua jalur tidak tersambung. Tetesan air menjembatani jalur itu sehingga tegangan di AO turun. Makin banyak air, makin rendah angkanya. NodeMCU membaca AO di pin A0 (0-1024) dan mengubahnya menjadi persen basah.

Status HUJAN menyala kalau basah melewati batas, lalu buzzer berbunyi 6 detik dan jamnya dicatat dari internet (NTP). Status baru padam kalau papan sudah turun di bawah setengah batas, supaya sisa tetesan di papan tidak membuat status berganti-ganti.

Komponen

KomponenQtyHarga
NodeMCU ESP8266 V3 (Lolin)1Rp42.000
Rain Drop Sensor Pendeteksi Hujan Tetesan Air Ar1Rp11.640
Modul buzzer aktif KY-0121Rp7.500
Kabel jumper female-female 10 cm (isi 10)isi 10, terpakai 61Rp3.500
Kabel micro USB data 30 cmopsional, kalau belum punya kabel micro USB data1Rp11.700
Total (tanpa opsional)Rp64.640
Daftar komponen proyek ini otomatis masuk ke pesan. Hapus yang sudah kamu punya sebelum dikirim.

Langkah 1: Rangkai komponen

Sambungkan kabel sesuai gambar di atas. Kalau gambar dan tabel terlihat berbeda, ikuti tabel.

DariKeKabel
Modul sensor hujan (papan hujan ke 2 pin ujung) AO→A0hijau
Modul sensor hujan (papan hujan ke 2 pin ujung) VCC→3Vmerah
Modul sensor hujan (papan hujan ke 2 pin ujung) GND→Ghitam
Modul buzzer aktif KY-012 S→D2 GPIO4kuning
Modul buzzer aktif KY-012 +→3Vmerah
Modul buzzer aktif KY-012 −→Ghitam

Langkah 2: Siapkan dashboard Klenik

Cuacaichibot/budi1234/p063/hujan
HUJAN!
0 detik lalu
Papan Basahichibot/budi1234/p063/basah
0 – 1008%
0 detik lalu
Batas Hujanichibot/budi1234/p063/batas
20%20 of 80%
0 detik lalu
Catatan Hujanichibot/budi1234/p063/log
Hujan mulai 14:32. Angkat jemuran!
Papan kering lagi 16:05
0 detik lalu

Cara cepat: unduh p063.json, ganti budi1234 dengan KODE-mu, lalu import di Klenik (menu titik tiga → Export / Import → Import → Ganti total). Langkah lengkapnya ada di Panduan Klenik.

WidgetTopicSetting
Indikator Boolean
Cuaca
ichibot/KODE/p063/hujanON = 1 “HUJAN!”, OFF = 0
Gauge
Papan Basah
ichibot/KODE/p063/basah0–100 %
Slider Output
Batas Hujan
ichibot/KODE/p063/batas5–80 %
Text Log
Catatan Hujan
ichibot/KODE/p063/logmenampilkan teks masuk

Langkah 3: Upload kode

Library: PubSubClient (Nick O'Leary). Board di Arduino IDE: NodeMCU 1.0 (ESP-12E Module). Isi dulu nama WiFi dan password di bagian ISI DULU, lalu ganti budi1234 di baris topic dengan KODE-mu, lalu upload dan buka Serial Monitor (115200).

p063.inoUnduh .ino
// Proyek 063 - Detektor Hujan Angkat Jemuran
// Board: NodeMCU ESP8266 V3 | Dashboard: klenik.ichibot.id
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <time.h>

// ===== ISI DULU =====
const char* WIFI_NAMA = "nama-wifi-kamu";
const char* WIFI_PASS = "password-wifi-kamu";

// topic MQTT: ganti budi1234 dengan KODE-mu (sama dengan di dashboard Klenik)
const char* TOPIK_BATAS = "ichibot/budi1234/p063/batas";
const char* TOPIK_BASAH = "ichibot/budi1234/p063/basah";
const char* TOPIK_LOG   = "ichibot/budi1234/p063/log";
const char* TOPIK_HUJAN = "ichibot/budi1234/p063/hujan";

const char* BROKER = "mqtt.ichibot.id";
WiFiClient wifi;
PubSubClient mqtt(wifi);
const int BUZZER = D2;
const int NILAI_KERING = 1024;        // A0 saat papan kering
const int NILAI_BASAH  = 300;         // A0 saat papan disiram air
int batas = 20;                       // % basah yang dianggap hujan
bool hujan = false;
unsigned long kirimTerakhir = 0, bunyiSampai = 0;

String jamSekarang() {
  time_t t = time(nullptr);
  char buf[6];
  strftime(buf, sizeof(buf), "%H:%M", localtime(&t));
  return String(buf);
}

void pesanMasuk(char* t, byte* isi, unsigned int panjang) {
  String p;
  for (unsigned int i = 0; i < panjang; i++) p += (char)isi[i];
  batas = p.toInt();
}

void langganan() {
  mqtt.subscribe(TOPIK_BATAS);
}

sambungWiFi() dan sambungMQTT(): sama di semua proyek (klik untuk lihat)void sambungWiFi() { WiFi.begin(WIFI_NAMA, WIFI_PASS); Serial.print("WiFi"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(" OK, IP " + WiFi.localIP().toString()); } void sambungMQTT() { while (!mqtt.connected()) { if (mqtt.connect(WiFi.macAddress().c_str())) { Serial.println("Terhubung ke Klenik"); langganan(); } else { Serial.println("Broker gagal, coba lagi 3 detik"); delay(3000); } } }
void setup() { Serial.begin(115200); pinMode(BUZZER, OUTPUT); sambungWiFi(); configTime(7 * 3600, 0, "pool.ntp.org"); mqtt.setServer(BROKER, 1883); mqtt.setCallback(pesanMasuk); } void loop() { if (!mqtt.connected()) sambungMQTT(); mqtt.loop(); if (millis() - kirimTerakhir >= 2000) { kirimTerakhir = millis(); int mentah = analogRead(A0); int basah = constrain(map(mentah, NILAI_KERING, NILAI_BASAH, 0, 100), 0, 100); Serial.printf("A0 %d -> basah %d%%\n", mentah, basah); mqtt.publish(TOPIK_BASAH, String(basah).c_str()); if (!hujan && basah > batas) { hujan = true; bunyiSampai = millis() + 6000; mqtt.publish(TOPIK_LOG, ("Hujan mulai " + jamSekarang() + ". Angkat jemuran!").c_str()); } else if (hujan && basah < batas / 2) { hujan = false; mqtt.publish(TOPIK_LOG, ("Papan kering lagi " + jamSekarang()).c_str()); } mqtt.publish(TOPIK_HUJAN, hujan ? "1" : "0", true); } if (bunyiSampai) { digitalWrite(BUZZER, (millis() / 300) % 2); // tiit-tiit 6 detik if ((long)(millis() - bunyiSampai) >= 0) { bunyiSampai = 0; digitalWrite(BUZZER, LOW); } } }

Langkah 4: Pahami kodenya

  1. Kalibrasi: lihat angka A0 di Serial Monitor saat papan kering dan saat papan disiram air, lalu isi di sini.
  2. NodeMCU hanya punya satu pin analog, A0. Pin DO di modul (keluaran digital dengan ambang dari trimpot) tidak dipakai, karena batasnya sudah diatur dari slider.
  3. Status HUJAN baru padam setelah papan cukup kering. Sisa tetesan bisa bertahan lama, dan histeresis ini mencegah buzzer berbunyi lagi saat gerimis kecil.
  4. Retained: kalau kamu membuka dashboard setelah hujan mulai, indikator langsung menampilkan HUJAN!