๐️ OGOH-OGOH REMOTE CONTROL
๐ DAFTAR ISI
๐ 1. PENDAHULUAN
Proyek ini dibuat untuk mengontrol mata Ogoh-Ogoh Sembayat Barat RT 3 secara wireless menggunakan smartphone. Sistem menggunakan ESP8266 sebagai otak, 2 servo MG996R untuk gerakan mata (kiri-kanan & atas-bawah), dan relay untuk efek kedip mata natural.
Spesifikasi:
- Microcontroller: ESP8266 NodeMCU
- Komunikasi: WiFi 2.4GHz (Access Point / Hotspot)
- Servo: 2x MG996R (Metal Gear, High Torque)
- Range Gerak: Customizable (default ±45° horizontal, ±40° vertikal)
- Blink System: Relay dengan timing natural (tutup 80ms, buka 300ms)
- Record & Playback: Disimpan di ESP8266 (maks 500 frame)
- Loop Mode: Pengulangan otomatis
- Power: 6V/5A eksternal untuk servo
๐ 2. DAFTAR KOMPONEN
| No | Komponen | Jumlah | Estimasi Harga | Keterangan |
|---|---|---|---|---|
| 1 | ESP8266 NodeMCU | 1 | Rp 25.000 | Board utama |
| 2 | Servo MG996R | 2 | Rp 60.000 | Metal gear, high torque |
| 3 | Relay 1 Channel 5V | 1 | Rp 12.000 | Untuk kedip mata |
| 4 | Power Supply 6V/5A | 1 | Rp 45.000 | Eksternal untuk servo |
| 5 | Powerbank 5V | 1 | Rp 50.000 | Untuk ESP8266 |
| 6 | Kabel Jumper | 10 | Rp 10.000 | Male to Female |
| 7 | Kapasitor 1000ยตF/16V | 1 | Rp 3.000 | Anti noise servo |
| TOTAL ESTIMASI | Rp 205.000 | |||
๐ 3. WIRING DIAGRAM
3.1 Skema Lengkap
3.2 Tabel Pin
| Komponen | Kabel | ESP8266 |
|---|---|---|
| Servo 1 (Kiri-Kanan) | Coklat, Merah, Oranye | GND, 6V Ext, D5 |
| Servo 2 (Atas-Bawah) | Coklat, Merah, Oranye | GND, 6V Ext, D6 |
| Relay (Kedip) | GND, VCC, IN | GND, VIN(5V), D7 |
⚡ 4. SKEMA TEGANGAN
4.1 Perhitungan Power
| Komponen | Tegangan | Arus | Daya |
|---|---|---|---|
| ESP8266 | 5V | ~80mA | 0.4W |
| Servo MG996R (2x) | 6V | ~2.5A peak | 15W |
| Relay | 5V | ~75mA | 0.4W |
| TOTAL | ~16W |
4.2 Opsi Power Supply
| Opsi | Komponen | Cocok Untuk |
|---|---|---|
| 1 | Adaptor 6V/5A | Indoor / Permanen |
| 2 | Baterai Lipo 2S 7.4V + UBEC 6V | Outdoor / Portable |
| 3 | Powerbank 5V + Boost Converter 6V | Darurat |
๐ป 5. KODE PROGRAM ESP8266
5.1 Kode Arduino (ESP8266)
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <Servo.h>
const char* ssid = "shereen";
const char* password = "87654321";
ESP8266WebServer server(80);
Servo servo1;
Servo servo2;
const int servoPin1 = 14; // D5 - Mata Kiri-Kanan
const int servoPin2 = 12; // D6 - Mata Atas-Bawah
const int relayPin = 13; // D7 - Relay Kedip
int angle1Max = 45; // Max derajat horizontal
int angle2Max = 40; // Max derajat vertikal
// Record & Playback
#define MAX_FRAMES 500
int record1[MAX_FRAMES];
int record2[MAX_FRAMES];
int recordCount = 0;
bool isPlayingESP = false;
int playIndexESP = 0;
unsigned long lastPlayTime = 0;
int playSpeed = 50;
bool loopModeESP = false;
// Blink
bool blinkMode = false;
unsigned long lastBlink = 0;
int blinkPhase = 0;
void setup() {
Serial.begin(115200);
servo1.attach(servoPin1);
servo2.attach(servoPin2);
pinMode(relayPin, OUTPUT);
digitalWrite(relayPin, LOW);
servo1.write(90);
servo2.write(90);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) delay(500);
Serial.println(WiFi.localIP());
// Web server code (HTML/CSS/JS di sini)
// ... (lengkap di kode full)
server.begin();
}
void loop() {
server.handleClient();
// Playback di ESP8266 (tetap jalan meski HP mati)
if (isPlayingESP && recordCount > 0) {
if (millis() - lastPlayTime >= playSpeed) {
lastPlayTime = millis();
servo1.write(constrain(record1[playIndexESP], 90-angle1Max, 90+angle1Max));
servo2.write(constrain(record2[playIndexESP], 90-angle2Max, 90+angle2Max));
playIndexESP++;
if (playIndexESP >= recordCount) {
if (loopModeESP) playIndexESP = 0;
else { isPlayingESP = false; playIndexESP = 0; }
}
}
}
// Blink natural (tutup 80ms, buka 300ms)
if (blinkPhase == 1) { digitalWrite(relayPin, HIGH); if (millis()-lastBlink>80) { blinkPhase=2; lastBlink=millis(); } }
if (blinkPhase == 2) { digitalWrite(relayPin, LOW); if (millis()-lastBlink>300) { blinkPhase=0; lastBlink=millis(); } }
delay(2);
}
๐ฎ 6. FITUR LENGKAP
| Fitur | Deskripsi | Range |
|---|---|---|
| ๐ฏ Joystick Horizontal | Mata kiri-kanan | Custom (±45° default) |
| ๐ฏ Joystick Vertikal | Mata atas-bawah | Custom (±40° default) |
| ⚙️ Konfigurasi Derajat | Input max derajat custom | 5° - 90° |
| ๐ด Record | Rekam gerakan | Maks 500 frame |
| ▶ Play | Putar rekaman (di ESP8266) | Tetap jalan saat HP mati |
| ๐ Loop | Ulangi playback terus | ON/OFF |
| ๐ Blink Natural | Kedip mata realistik | Tutup 80ms, Buka 300ms |
| ๐ Auto Blink | Kedip otomatis | Interval 1-10 detik |
| ๐️ Single Blink | Kedip sekali | Manual |
| ๐ฑ Responsive UI | Tampilan mobile-friendly | Dark theme + glow effect |
๐ฑ 7. CARA PENGGUNAAN
7.1 Setup Awal
- Upload kode ke ESP8266 menggunakan Arduino IDE / Arduino CLI
- Pasang wiring sesuai diagram
- Nyalakan hotspot HP dengan SSID
shereenpassword87654321 - Nyalakan ESP8266 (colok powerbank)
- Buka Serial Monitor (115200 baud) untuk melihat IP Address
- Buka IP tersebut di browser HP
7.2 Record & Playback
- Tekan ๐ด REC → Gerakin joystick → Tekan ๐ด REC lagi
- Tekan ▶ PLAY → Gerakan diulang otomatis
- Aktifkan ๐ Loop untuk pengulangan terus menerus
- Layar HP boleh dimatikan → Playback tetap jalan!
7.3 Konfigurasi Derajat
- Input max derajat di kolom Max
- Klik ๐พ untuk menyimpan
- Range otomatis simetris (kiri & kanan sama)
๐ง 8. TROUBLESHOOTING
8.1 Servo Tidak Bergerak
| Penyebab | Solusi |
|---|---|
| Power tidak cukup | Gunakan power supply 6V/5A eksternal. Jangan langsung ke 5V ESP8266! |
| Kabel longgar | Cek semua koneksi: Coklat=GND, Merah=6V, Oranye=Signal |
| Pin salah | Pastikan D5 (GPIO14) untuk servo 1, D6 (GPIO12) untuk servo 2 |
| Servo rusak | Coba servo satu per satu dengan kode test sederhana |
| GND tidak tersambung | GND power servo WAJIB tersambung ke GND ESP8266! |
8.2 Tidak Bisa Konek WiFi
| Penyebab | Solusi |
|---|---|
| SSID/Password salah | Cek ulang: SSID="shereen", Pass="87654321" |
| Hotspot belum nyala | Nyalakan hotspot HP dulu, baru ESP8266 |
| Jarak terlalu jauh | Dekatkan ESP8266 ke HP (max 5 meter) |
| WiFi 5GHz | ESP8266 hanya support 2.4GHz! |
8.3 Playback Berhenti Saat Layar Mati
| Penyebab | Solusi |
|---|---|
| Browser menghentikan JavaScript | ✅ SUDAH DIATASI! Playback berjalan di ESP8266, bukan di HP |
| Data tidak terkirim | Pastikan klik PLAY setelah REC, data akan disimpan di ESP8266 |
8.4 Kedip Mata Tidak Natural
| Penyebab | Solusi |
|---|---|
| Timing tidak pas | Default: Tutup 80ms, Buka 300ms (rasio 1:3.75 seperti manusia) |
| Relay tidak merespon | Cek kabel relay: GND→GND, VCC→VIN, IN→D7 |
| Lampu/LED tidak sesuai | Gunakan lampu 12V dengan relay COM-NO |
8.5 Arduino IDE Error Upload
| Error | Solusi |
|---|---|
ledcSetup not declared | Gunakan ledcAttach(pin, freq, res) untuk ESP8266 |
esptool not found | Install esptool: pip3 install esptool==4.5.1 |
port busy | Tutup Serial Monitor & Arduino IDE, lalu upload ulang |
Board unknown | Install board: arduino-cli core install esp8266:esp8266 |
❓ 9. FAQ
Q: Bisa pakai ESP32?
A: Bisa! Ganti pin dan library. ESP32 lebih powerful tapi lebih mahal.
Q: Berapa jarak maksimal WiFi?
A: ±30 meter (terbuka), ±10 meter (dalam ruangan).
Q: Bisa kontrol lewat internet?
A: Bisa dengan port forwarding atau Ngrok, tapi tidak direkomendasikan untuk latency.
Q: Servo cepat panas?
A: Beri jeda setiap 10 menit. Tambah heatsink kecil. Jangan paksa gerak mentok.
Q: Bisa ganti nama WiFi?
A: Edit ssid dan password di kode, lalu upload ulang.
Q: Bisa tambah servo ketiga?
A: Bisa! Tambah servo di pin kosong (D0, D1, D2, dll) dan duplikat logika kontrol.
๐ก 10. TIPS & TRIK
๐ Bookmark IP
Simpan IP ESP8266 di bookmark HP untuk akses cepat tanpa cek Serial Monitor.
๐ Power Management
Gunakan powerbank 20000mAh untuk pemakaian seharian outdoor. Baterai Lipo 2S lebih ringan.
๐ฆ Housing
Masukkan ESP8266 ke kotak plastik waterproof. Bungkus servo dengan plastik untuk outdoor.
๐จ Kustomisasi CSS
Edit bagian <style> di kode HTML untuk ganti warna, font, atau layout.
๐ Auto Connect
ESP8266 akan auto-connect ke WiFi yang sudah disimpan saat dinyalakan.
๐ Monitoring
Buka Serial Monitor (115200 baud) untuk debug real-time dan lihat IP address.





