Tutorial Belanja komponen

Tutorial › Listrik & Daya

Arus Listrik AC Non-Invasif SCT-013

ESP32-WROOM-32D23D22TX0RX0D21D19D18D5TX2RX2D4D2D15GND3V3ENVPVND34D35D32D33D25D26D27D14D12D13GNDVIN10K10K10µFjack1 kabel L3V3OUTGNDSCT-013-030 + jack 3.5 mm + bias (2×10K, 10 µF)

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

KomponenQtyHarga
ESP32 DOIT DevKit V1 30 pin1Rp75.000
Sensor Arus AC 30A SCT-013-030 Non Invasive Curr1Rp68.000
3.5mm Audio Socket Dual Channel 3 Pin Stereo Plu1Rp2.500
Resistor Metal Film 10K Ohm 1/4W 1% 10 Pcs Pack isi 10, terpakai 21Rp1.800
(10pcs) 10uF 25V Elco Capacitor Kapasitor 10 uF isi 10, terpakai 11Rp4.750
Breadboard mini 170 titik1Rp4.875
Kabel jumper male-female 10 cm (isi 10)isi 10, terpakai 31Rp3.500
Kabel micro USB data 30 cmopsional, kalau belum punya kabel micro USB data1Rp11.700
Total (tanpa opsional)Rp160.425
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
SCT-013-030 + jack 3.5 mm + bias (2×10K, 10 µF) 3V3→3V3merah
SCT-013-030 + jack 3.5 mm + bias (2×10K, 10 µF) OUT→D34 GPIO34hijau
SCT-013-030 + jack 3.5 mm + bias (2×10K, 10 µF) GND→GNDhitam

Langkah 2: Siapkan dashboard Klenik

Arus ACichibot/budi1234/p123/arus
0302.84 A
0 detik lalu
Perkiraan Dayaichibot/budi1234/p123/daya
0 – 3000625 W
0 detik lalu
Grafik Dayaichibot/budi1234/p123/daya
0 W
0.0 W10 titik3000.0 W
0 detik lalu

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.

WidgetTopicSetting
Gauge
Arus AC
ichibot/KODE/p123/arus0–30 A
Gauge
Perkiraan Daya
ichibot/KODE/p123/daya0–3000 W
Chart
Grafik Daya
ichibot/KODE/p123/daya0–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).

p123.inoUnduh .ino
// 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

  1. Rata-rata semua sampel adalah titik tengah dari pembagi 10K/10K. Menghitungnya setiap kali lebih akurat daripada menganggapnya selalu 1650 mV.
  2. RMS (root mean square) adalah cara menghitung "rata-rata" arus bolak-balik yang setara dengan arus searah dalam hal daya.
  3. Tertulis di badan sensor: 30A/1V. Untuk versi lain (misalnya 100A/50mA) dibutuhkan resistor beban tambahan dan angka berbeda.
  4. Daya ini perkiraan (daya semu). Untuk alat bermotor, daya sebenarnya sedikit lebih kecil karena faktor daya.