Ukur arus listrik PLN yang dipakai rice cooker, setrika, atau satu jalur rumah tanpa memotong kabel. Sensor SCT-013 dijepitkan melingkari satu kabel, lalu ESP32 menghitung arus (A) dan perkiraan daya (W) dan menampilkannya di Klenik.
SCT-013 adalah trafo arus berbentuk jepitan. Arus bolak-balik di kabel yang dijepit menimbulkan medan magnet, dan kumparan di dalam sensor mengubahnya menjadi tegangan kecil: versi 030 menghasilkan 1V untuk 30A. Jepitan harus melingkari satu kabel saja (fase/L). Kalau melingkari kabel L dan N sekaligus, medan magnetnya saling meniadakan dan hasilnya nol.
Tegangan dari sensor bolak-balik (+ dan −), padahal ESP32 hanya bisa membaca 0-3,3V. Dua resistor 10K membuat titik tengah 1,65V, dan kapasitor 10µF menahan titik tengah itu tetap stabil. Sinyal sensor menumpang di atasnya. ESP32 mengambil 2000 sampel, mencari nilai rata-ratanya (titik tengah), lalu menghitung RMS: akar dari rata-rata kuadrat selisih setiap sampel terhadap titik tengah. Hasilnya dikali 30 menjadi ampere, lalu dikali 220V menjadi perkiraan daya.
Keamanan: sensor ini tidak menyentuh kabel tembaga, tetapi menjepitnya di kabel PLN tetap harus dilakukan dengan listrik mati dan pada kabel yang isolasinya utuh. Jangan membuka panel listrik tanpa pendamping yang paham.
Komponen
| Komponen | Qty | Harga |
|---|---|---|
| ESP32 DOIT DevKit V1 30 pin | 1 | Rp75.000 |
| Sensor Arus AC 30A SCT-013-030 Non Invasive Curr | 1 | Rp68.000 |
| 3.5mm Audio Socket Dual Channel 3 Pin Stereo Plu | 1 | Rp2.500 |
| Resistor Metal Film 10K Ohm 1/4W 1% 10 Pcs Pack isi 10, terpakai 2 | 1 | Rp1.800 |
| (10pcs) 10uF 25V Elco Capacitor Kapasitor 10 uF isi 10, terpakai 1 | 1 | Rp4.750 |
| Breadboard mini 170 titik | 1 | Rp4.875 |
| Kabel jumper male-female 10 cm (isi 10)isi 10, terpakai 3 | 1 | Rp3.500 |
| Kabel micro USB data 30 cmopsional, kalau belum punya kabel micro USB data | 1 | Rp11.700 |
| Total (tanpa opsional) | Rp160.425 |
Langkah 1: Rangkai komponen
Sambungkan kabel sesuai gambar di atas. Kalau gambar dan tabel terlihat berbeda, ikuti tabel.
| Dari | Ke | Kabel | |
|---|---|---|---|
| SCT-013-030 + jack 3.5 mm + bias (2×10K, 10 µF) 3V3 | → | 3V3 | merah |
| SCT-013-030 + jack 3.5 mm + bias (2×10K, 10 µF) OUT | → | D34 GPIO34 | hijau |
| SCT-013-030 + jack 3.5 mm + bias (2×10K, 10 µF) GND | → | GND | hitam |
Langkah 2: Siapkan dashboard Klenik
Cara cepat: unduh p123.json, ganti budi1234 dengan KODE-mu, lalu import di Klenik (menu titik tiga → Export / Import → Import → Ganti total). Langkah lengkapnya ada di Panduan Klenik.
| Widget | Topic | Setting |
|---|---|---|
| Gauge Arus AC | ichibot/KODE/p123/arus | 0–30 A |
| Gauge Perkiraan Daya | ichibot/KODE/p123/daya | 0–3000 W |
| Chart Grafik Daya | ichibot/KODE/p123/daya | 0–3000 W |
Langkah 3: Upload kode
Library: PubSubClient (Nick O'Leary). Board di Arduino IDE: ESP32 Dev 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).
// Proyek 123 - Arus Listrik AC Non-Invasif SCT-013
// Board: ESP32 DOIT DevKit V1 | Dashboard: klenik.ichibot.id
#include <WiFi.h>
#include <PubSubClient.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_ARUS = "ichibot/budi1234/p123/arus";
const char* TOPIK_DAYA = "ichibot/budi1234/p123/daya";
const char* BROKER = "mqtt.ichibot.id";
WiFiClient wifi;
PubSubClient mqtt(wifi);
const int PIN_CT = 34;
const float AMPERE_PER_VOLT = 30.0; // SCT-013-030: 30 A menghasilkan 1 V
const float TEGANGAN_PLN = 220.0;
unsigned long terakhir = 0;
float ukurIrms() { // 2000 sampel ±10 siklus 50 Hz
const int N = 2000;
long jumlah = 0;
static int data[N];
for (int i = 0; i < N; i++) { data[i] = analogReadMilliVolts(PIN_CT); jumlah += data[i]; delayMicroseconds(100); }
float tengah = (float)jumlah / N; // titik bias (±1650 mV)
double kuadrat = 0;
for (int i = 0; i < N; i++) kuadrat += sq(data[i] - tengah);
float vrms = sqrt(kuadrat / N) / 1000.0; // volt RMS dari sensor
return vrms * AMPERE_PER_VOLT;
}
void langganan() {}
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);
sambungWiFi();
mqtt.setServer(BROKER, 1883);
}
void loop() {
if (!mqtt.connected()) sambungMQTT();
mqtt.loop();
if (millis() - terakhir >= 2000) {
terakhir = millis();
float ampere = ukurIrms();
if (ampere < 0.1) ampere = 0; // derau saat tidak ada beban
mqtt.publish(TOPIK_ARUS, String(ampere, 2).c_str());
mqtt.publish(TOPIK_DAYA, String(ampere * TEGANGAN_PLN, 0).c_str());
}
}Langkah 4: Pahami kodenya
- Rata-rata semua sampel adalah titik tengah dari pembagi 10K/10K. Menghitungnya setiap kali lebih akurat daripada menganggapnya selalu 1650 mV.
- RMS (root mean square) adalah cara menghitung "rata-rata" arus bolak-balik yang setara dengan arus searah dalam hal daya.
- Tertulis di badan sensor: 30A/1V. Untuk versi lain (misalnya 100A/50mA) dibutuhkan resistor beban tambahan dan angka berbeda.
- Daya ini perkiraan (daya semu). Untuk alat bermotor, daya sebenarnya sedikit lebih kecil karena faktor daya.