Tutorial Belanja komponen

Tutorial › Listrik & Daya

Arus AC Modul ZMCT103C

ESP32-WROOM-32D23D22TX0RX0D21D19D18D5TX2RX2D4D2D15GND3V3ENVPVND34D35D32D33D25D26D27D14D12D13GNDVINVCCGNDOUTModul arus AC ZMCT103C

Alternatif SCT-013 yang lebih ringkas: modul ZMCT103C sudah berisi trafo arus dan penguat. Kabel beban dilewatkan menembus lubang trafo, lalu ESP32 menghitung arus dan daya. Proyek ini juga mengajarkan cara mengkalibrasi sensor dari dashboard.

ZMCT103C bekerja seperti SCT-013, tetapi bentuknya trafo kecil berlubang di atas modul. Rangkaian bias dan penguat op-amp sudah ada di modul, jadi keluarannya langsung berupa gelombang yang menumpang di tengah tegangan suplai, siap dibaca ESP32. Perhitungan RMS-nya sama dengan proyek 123.

Penguatan modul bisa diatur dengan trimpot dan setiap modul sedikit berbeda, jadi angka ampere per volt harus dikalibrasi. Nyalakan alat yang arusnya diketahui (dari tang ampere, atau daya di label dibagi 220), lalu ketik arusnya di widget Kalibrasi. ESP32 menghitung angka KALIBRASI yang baru dan mengirimkannya ke Text Log. Tulis angka itu di kode supaya tidak hilang saat restart.

Keamanan: kabel beban 220V melewati modul ini. Rakit di dalam kotak tertutup dan jangan menyentuh modul saat beban menyala.

Komponen

KomponenQtyHarga
ESP32 DOIT DevKit V1 30 pin1Rp75.000
Sensor Arus 5A AC Single Phase Current Transform1Rp15.000
Kabel jumper female-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)Rp93.500
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 arus AC ZMCT103C VCC→3V3merah
Modul arus AC ZMCT103C GND→GNDhitam
Modul arus AC ZMCT103C OUT→D34 GPIO34hijau

Langkah 2: Siapkan dashboard Klenik

Arus ACichibot/budi1234/p125/arus
051.82 A
0 detik lalu
Perkiraan Dayaichibot/budi1234/p125/daya
0 – 1100400 W
0 detik lalu
Kalibrasi (arus sebenarnya, A)ichibot/budi1234/p125/kalibrasi
1.8
Belum pernah dikirim
Catatanichibot/budi1234/p125/log
Kalibrasi baru: 9.47 A/V. Tulis angka ini di kode.
0 detik lalu

Cara cepat: unduh p125.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/p125/arus0–5 A
Gauge
Perkiraan Daya
ichibot/KODE/p125/daya0–1100 W
TEXT_INPUT
Kalibrasi (arus sebenarnya, A)
ichibot/KODE/p125/kalibrasiteks bebas
Text Log
Catatan
ichibot/KODE/p125/logmenampilkan teks masuk

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).

p125.inoUnduh .ino
// Proyek 125 - Arus AC Modul ZMCT103C
// 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_LOG       = "ichibot/budi1234/p125/log";
const char* TOPIK_KALIBRASI = "ichibot/budi1234/p125/kalibrasi";
const char* TOPIK_ARUS      = "ichibot/budi1234/p125/arus";
const char* TOPIK_DAYA      = "ichibot/budi1234/p125/daya";
float KALIBRASI = 10.0;               // ampere per volt, isi setelah kalibrasi (lihat penjelasan)

const char* BROKER = "mqtt.ichibot.id";
WiFiClient wifi;
PubSubClient mqtt(wifi);
const int PIN_ARUS = 34;
unsigned long terakhir = 0;

float ukurVrms() {
  const int N = 2000;
  static int data[N];
  long jumlah = 0;
  for (int i = 0; i < N; i++) { data[i] = analogReadMilliVolts(PIN_ARUS); jumlah += data[i]; delayMicroseconds(100); }
  float tengah = (float)jumlah / N;
  double kuadrat = 0;
  for (int i = 0; i < N; i++) kuadrat += sq(data[i] - tengah);
  return sqrt(kuadrat / N) / 1000.0;
}

void pesanMasuk(char* t, byte* isi, unsigned int panjang) {
  // kirim arus sebenarnya (dari tang ampere/label alat) untuk kalibrasi, misalnya "1.8"
  String p;
  for (unsigned int i = 0; i < panjang; i++) p += (char)isi[i];
  float sebenarnya = p.toFloat();
  float v = ukurVrms();
  if (sebenarnya > 0 && v > 0.005) {
    KALIBRASI = sebenarnya / v;
    mqtt.publish(TOPIK_LOG, ("Kalibrasi baru: " + String(KALIBRASI, 2) + " A/V. Tulis angka ini di kode.").c_str());
  }
}

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

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); mqtt.setCallback(pesanMasuk); } void loop() { if (!mqtt.connected()) sambungMQTT(); mqtt.loop(); if (millis() - terakhir >= 2000) { terakhir = millis(); float v = ukurVrms(); float ampere = v * KALIBRASI; if (ampere < 0.05) ampere = 0; Serial.printf("Vrms %.4f V -> %.2f A\n", v, ampere); mqtt.publish(TOPIK_ARUS, String(ampere, 2).c_str()); mqtt.publish(TOPIK_DAYA, String(ampere * 220, 0).c_str()); } }

Langkah 4: Pahami kodenya

  1. Kalibrasi satu titik: kalau beban 1,8A menghasilkan 0,19V, berarti 1V setara 9,47A.
  2. Bukan const, karena angkanya bisa diubah dari dashboard selama ESP32 menyala.
  3. Sama dengan proyek 123: ambil 2000 sampel, cari titik tengah, lalu hitung RMS.