Apakah Anda lelah harus menekan tombol setiap kali mengisi gelas? Mari kita tingkatkan kenyamanan di dapur atau kantor Anda dengan membuat Pompa Galon Otomatis yang diaktifkan hanya dengan mendekatkan gelas!
Proyek ini menggunakan sensor jarak ultrasonik (HC-SR04) yang bekerja layaknya “mata” untuk mendeteksi kehadiran gelas. Ketika gelas berada dalam jangkauan tertentu, sistem akan mengaktifkan relay untuk menjalankan motor pompa, mengisi gelas Anda secara otomatis.
1. Alat dan Bahan yang Dibutuhkan
Untuk memulai proyek ini, Anda memerlukan komponen dasar elektronika dan sistem pompa:
- Microcontroller: NodeMCU ESP8266 atau Arduino (Kita akan menggunakan definisi pin ala ESP8266/NodeMCU).
- Sensor Jarak: Sensor Ultrasonik HC-SR04.
- Aktuator: Modul Relay 1 Channel (untuk menghubungkan motor pompa ke microcontroller).
- Pompa: Pompa air mini 5V/12V (sering disebut mini submersible pump) dan selang.
- Sumber Daya: Power supply yang sesuai.
- Kabel Jumper.
2. Prinsip Kerja Sensor HC-SR04
Sensor HC-SR04 bekerja dengan prinsip sonar. Ia mengirimkan gelombang suara ultrasonik (pin Trigger) dan mendengarkan pantulannya (pin Echo).
- Waktu tempuh (durasi) gelombang suara diukur.
- Jarak dihitung menggunakan rumus fisika sederhana:
- Kecepatan suara di udara adalah sekitar atau .
Dalam kode ini, kita menetapkan batas jarak: jika terdeteksi objek (gelas) kurang dari , maka motor pompa harus aktif.
3. Skema Rangkaian Dasar dan Pemasangan Kabel
Membuat rangkaian yang benar sangat penting untuk keberhasilan proyek ini. Gunakan tabel di bawah ini sebagai panduan utama Anda untuk menghubungkan setiap komponen ke Microcontroller (NodeMCU/ESP8266).
| Komponen | Pin Komponen | Terhubung ke Pin NodeMCU | Fungsi Pin |
|---|---|---|---|
| HC-SR04 | VCC | 5V atau 3.3V | Daya Sensor |
| HC-SR04 | GND | GND | Ground |
| HC-SR04 | Trig | D1 (GPIO 5) | Output Pulsa Ultrasonik |
| HC-SR04 | Echo | D2 (GPIO 4) | Input Durasi Pantulan |
| Relay | VCC/V-IN | 5V atau 3.3V | Daya Relay |
| Relay | GND | GND | Ground |
| Relay | IN (Kontrol) | D7 (GPIO 13) | Menerima Perintah ON/OFF |
Koneksi Pompa Motor (Sisi Beban)
Penting: Pin D7 berfungsi sebagai pin kontrol pompa. Saat sensor mendeteksi gelas, D7 akan diberi nilai HIGH untuk mengaktifkan relay dan menyalakan pompa.
- Pompa dihubungkan ke sisi beban (Normally Open/NO dan COM) pada modul Relay. Ketika pin D7 menjadi HIGH (objek dekat), Relay akan menutup rangkaian dan menyalakan motor pompa.
- Pastikan motor pompa memiliki sumber daya independen yang sesuai, karena Microcontroller tidak mampu menyuplai arus besar untuk motor.
4. Kode Program (Arduino C++)
Berikut adalah kode yang harus Anda unggah ke NodeMCU atau Arduino Anda. Pastikan Anda menggunakan pin definisi yang sesuai (dalam contoh ini menggunakan definisi pin NodeMCU/ESP8266).
#include <Arduino.h>
// --- Definisi Pin (Menggunakan notasi NodeMCU/ESP8266) ---
// Note: Pin D7 terhubung ke kontrol Relay (IN)
#define D1 5 // Pin Trigger HC-SR04
#define D2 4 // Pin Echo HC-SR04
#define D7 13 // Pin Kontrol Relay/Motor Pompa
// Definisikan batas jarak dalam centimeter (gelas harus sedekat ini)
const float batasJarak = 4.0;
// --- Setup ---
void setup() {
// Pin D1 (Trigger) sebagai OUTPUT: Mengirim pulsa suara
pinMode(D1, OUTPUT);
// Pin D2 (Echo) sebagai INPUT: Menerima pantulan suara
pinMode(D2, INPUT);
// Pin D7 (Output) sebagai OUTPUT: Mengontrol Relay/Pompa
pinMode(D7, OUTPUT);
// Pastikan pompa mati saat startup (Set D7 ke LOW)
digitalWrite(D7, LOW);
// Inisialisasi komunikasi serial untuk debugging
Serial.begin(115200);
Serial.println("Pompa Galon Otomatis Siap!");
// Bersihkan pin Trigger
digitalWrite(D1, LOW);
}
// --- Loop Utama ---
void loop() {
// 1. Kirim Pulsa Trigger (10 µs)
digitalWrite(D1, LOW);
delayMicroseconds(2);
digitalWrite(D1, HIGH);
delayMicroseconds(10);
digitalWrite(D1, LOW);
// 2. Baca Durasi Pulsa Echo (pulseIn mengembalikan durasi dalam mikrosekon)
long duration = pulseIn(D2, HIGH);
// 3. Hitung Jarak dalam cm
// Kecepatan Suara = 0.0343 cm/µs
float jarakCm = duration * 0.0343 / 2;
// 4. Tampilkan jarak
Serial.print("Jarak: ");
Serial.print(jarakCm);
Serial.println(" cm");
// 5. Logika Kontrol Pompa
if (jarakCm <= batasJarak && jarakCm > 0) {
// Jika jarak kurang dari atau sama dengan batas (Gelas Dekat)
digitalWrite(D7, HIGH); // Aktifkan Relay (Pompa ON)
Serial.println("STATUS D7: HIGH. Pompa ON!");
} else {
// Jika jarak lebih dari batas (Gelas Jauh/Tidak Ada)
digitalWrite(D7, LOW); // Nonaktifkan Relay (Pompa OFF)
Serial.println("STATUS D7: LOW. Pompa OFF.");
}
// Tunda sebelum pengukuran berikutnya
delay(500); // Tunggu 500 ms
}