By | 20/12/2018

hello sahabat anak kendali

pada kesempatan kali ini saya akan berbagi pengalaman tentang Cara Membuat Alat Monitoring Arus dan Tegangan AC, dengan menggunakan Sensor ZMPT101B dan SCT-013-100. data Arus dan Tegangan AC akan di simpan pada memori SD CARD, dengan mencantumkan Waktu penyimpananya, yang dibantu dengan modul RTC DS3231, alat Monitoring ini juga saya buat dengan menambahkan LCD 16×2 dan Driver I2c nya supaya lebih mudah melihat hasil saat pengambilan datanya.

Keyword :

Cara Mengakses Sensor ZMPT101B Arduino
Cara Mengakses Sensor SCT013-100 Arduino

saya mengambil data dari Panel kampus, yang terdapat 3 fase RST, jadi menggunakan 3 sensor untuk Tegangan ( ZMPT101B )dan 3 sensor untuk Arus (SCT-013), namun sebenarnya satu sensor arusnya menggunakan tipe SCT-019,

baiklah langsung menuju cara saya membuat alat ini. jadi begini urutanya dari mulai merangkai, sampai melakukan kalibrasi.

Rangkaian Sensor Tegangan ZMPT101B

Arduino, Cara Membuat Datalogger, Arus dan Tegangan AC, Sensor zmpt101b, sct-013-100

untuk mengakses sensor ZMPT101B, lumayan memakan waktu agi arduino, karena saya membuat pembacaan berulang2 sampai 300 kali,, kemudian supaya hasilnya stabil saya rata ratakan juga sampai 300 kali, angka ini bisa kalian rubah2 sendiri, sampai hasilnya memebuhi kriteria kalian,

yang ingin saya jelaskan sensor ZMPT101B, Output adc nya berisolasi (Naik Turun, tetapi polanya sama) saat ada tegangan Input AC, pada saat tidak ada tegangan yang masuk, nilai adc nya sekitar 512.
nah karena itu saya mencari nilai Max dan Min saat ada tegangan AC yang masuk, kemudian hasilnya = nilai max – nilai min,

misalkan dibaca selama 300 kali ini menghasilkan nilai min = 390 dan nilai max = 580, maka Z = 580-330 = 250.

nah saat hasilnya 250 ini kita sedang mengukur tegangan 220V kan? maka dari itu saya gunakan saja fungsi MAP arduino, dengan referensi 220V.

semua programnya akan saya tampilkan di bawah artikel ini. sekarang lanjut dulu.

Rangkaian Sensor Arus SCT-013-100

Arduino, Cara Membuat Datalogger, Arus dan Tegangan AC, Sensor zmpt101b, sct-013-100

sensor SCT-103 ini lebih sulit dibandingkan sensor ZMPT101B cara mengaksesnya, hanya saja sangat presisi outputnya, terdapat Resistor 100 Ohm, sebagai resistor beban. jadi ceritanya begini,
saat tidak ada resistor beban, dan di kalungkan ke Arus sekitar 1.8A outputnya berisolasi (tegangan AC), antara 1023 dan 700, ketika arusnya sekitar 0.8A outputnya sekitar antara 1023 dan 600, nah tentunya,, untuk ngukur arus yang lebih besar ga mungkin sanggup kan kalo begini, misal untuk ngukur Arus yang sebesar 3A dan 6A, pasti outputnya berisolasi antara 1023 dan 0,,, maka dari itu saya kecilkan amplitude output adc nya dengan resistor 100 ohm,, tapi menurut perhitungan saya, harusnya 20 Ohm supaya bisa sampai pembacaan 100A, tapi karena tidak menemukan resistor 20 Ohm, saya gunakan 100 OHM, setidaknya sudah bisa membaca Arus sampai 50A, karena sekitar segitu Arus Panel kampus berdasarkan beban pada gedung.

sesuai judulnya, saya membuat alat untuk data logger monitoring Arus dan Tegangan AC, jadi saya menggunakan dua buah Arduino Nano, yang satu untuk membaca Sensor, dan yang satunya untuk menampilkan pada LCD, mengakses RTC dan juga SDCARD, bukan karena kekurangan pin, tapi karena kerja untuk mengakses 6 buah sensor saja sudah berat, maka dari itu saya bagi pekerjaan arduino nya,

untuk rangkaian arduino yang satu laginya seperti berikut

Arduino, Cara Membuat Datalogger, Arus dan Tegangan AC, Sensor zmpt101b, sct-013-100

13 —- SCK Sd card
12 —- MISO Sd card
11 —- MOSI Sd card
10 —- CS Sd card

A4 — SDA RTC / LCD
A5 — SCL RTC / LCD
karena ada dua arduino, berarti kita akan menentukan komunikasi apa yang digunakan, dan disini saya menggunakan komunikasi SERIAL TX RX, yang bisa di pelajari pada artikel berikut :

Cara dua Arduino Berkomunikasi dengan Serial
Contoh Aplikasi Komunikasi Serial dua Arduino

nah berikut adalah program untuk Arduino sensor nya

#include <SoftwareSerial.h>
SoftwareSerial serial (2,3);
#define sampling 300
#define sampling1 200
float arus1, arus2, arus3;
float banyak_data1, banyak_data2, banyak_data3;
int rata_R, rata_S, rata_T;
int rata_AR, rata_AS, rata_AT;
void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
serial.begin(9600);
}
void loop() {
  // put your main code here, to run repeatedly:
for (int i =0; i<=sampling; i++){
float R = map(read_teg1(), 3,270, 0, 220);
float S = map(read_teg2(), 3,270, 0, 220);
float T = map(read_teg3(), 3,270, 0, 220);

banyak_data1 += R;
banyak_data2 += S;
banyak_data3 += T;
}
rata_R = banyak_data1 / sampling;
rata_S = banyak_data2 / sampling;
rata_T = banyak_data3 / sampling;
baca_arus1();
baca_arus2();
baca_arus3();
float IR = (arus1*0.0585) + 0.021;
float IS = (arus2*0.0585) + 0.021;
float IT = (arus3*0.1529) + 0.2579;
serial.print(":");
serial.print(rata_R);
serial.print(":");
serial.print(rata_S);
serial.print(":");
serial.print(rata_T);
serial.print(":");
serial.print(IR);
serial.print(":");
serial.print(IS);
serial.print(":");
serial.print(IT);
Serial.print("VR :");
Serial.print(rata_R);
Serial.print(" | ");
Serial.print("VS :");
Serial.print(rata_S);
Serial.print(" | ");
Serial.print("VT :");
Serial.print(rata_T);
Serial.print("t");
Serial.print("IR=");
Serial.print(IR);
Serial.print("|");
Serial.print("IS=");
Serial.print(IS);
Serial.print("|");
Serial.print("IT=");
Serial.println(IT);
banyak_data1=0;
banyak_data2=0;
banyak_data3=0;
}
float read_teg1(){
  int val_min = 1024;
  int val_max = 0;
for (int i=0; i<=sampling; i++){
  int val = analogRead(A0);
   if (val < val_min ){
    val_min = val;
   }
   if (val > val_max ){
    val_max = val;
   }
}
   return val_max - val_min;
}
float read_teg2(){
  int val_min = 1024;
  int val_max = 0;
for (int i=0; i<=sampling; i++){
  int val = analogRead(A1);
   if (val < val_min ){
    val_min = val;
   }
   if (val > val_max ){
    val_max = val;
   }
}
   return val_max - val_min;
}
float read_teg3(){
  int val_min = 1024;
  int val_max = 0;
for (int i=0; i<=sampling; i++){
  int val = analogRead(A2);
   if (val < val_min ){
    val_min = val;
   }
   if (val > val_max ){
    val_max = val;
   }
}
   return val_max - val_min;
}
void baca_arus1(){
  int data_max=0;
  int data_min=1024;
  for (int i=0; i<=sampling1; i++){
  int data=analogRead(A3);
  if (data < data_min){
    data_min = data;
  }
  if (data > data_max){
    data_max = data;
  }
}
arus1 = data_max-data_min;
}
void baca_arus2(){
  int data_max=0;
  int data_min=1024;
  for (int i=0; i<=sampling1; i++){
  int data=analogRead(A4);
  if (data < data_min){
    data_min = data;
  }
  if (data > data_max){
    data_max = data;
  }
}
arus2 = data_max-data_min;
}
void baca_arus3(){
  int data_max=0;
  int data_min=1024;
  for (int i=0; i<=sampling1; i++){
  int data=analogRead(A5);
  if (data < data_min){
    data_min = data;
  }
  if (data > data_max){
    data_max = data;
  }
}
arus3 = data_max-data_min;
}

dan berikut untuk program Arduino LCD 16×2, RTC, dan SD CARD

#include <SoftwareSerial.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include "RTClib.h"
#include <SPI.h>
#include <SD.h>
const int chipSelect = 10;

String data;
String VR, VS, VT, IR, IS, IT;
byte state=0;
int satu,dua,tiga,empat, lima, enam, tujuh;
SoftwareSerial serial (2,3);
#define tahun now.year(), DEC
#define bulan now.month(), DEC
#define hari now.day(), DEC
#define tanggal daysOfTheWeek[now.dayOfTheWeek()]
#define jam now.hour(), DEC
#define menit now.minute(), DEC
#define detik now.second(), DEC
unsigned long waktuLampau=0;
RTC_DS3231 rtc;
//char daysOfTheWeek[7][12] = {"Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jum'at", "Sabtu"};
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup()
{
  lcd.begin();
serial.begin(9600);
Serial.begin(9600);
if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    while (1);
  }
  if (rtc.lostPower()) {
    Serial.println("RTC lost power, lets set the time!");
    // following line sets the RTC to the date & time this sketch was compiled
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    // This line sets the RTC with an explicit date & time, for example to set
    // January 21, 2014 at 3am you would call:
    // rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
  }
  if (!SD.begin(chipSelect)) {
    Serial.println("Card failed, or not present");
    // don't do anything more:
    return;
  }
  Serial.println("card initialized.");

}
void loop()
{
  DateTime now = rtc.now();
 while (serial.available()>0){
  delay(10);
  char c = serial.read();
  data+=c;
 }
 if (data.length()>0){
  satu = data.indexOf(':');
  dua = data.indexOf(':', satu+1);
  tiga = data.indexOf(':', dua+1);
  empat = data.indexOf(':', tiga+1);
  lima = data.indexOf(':', empat+1);
  enam = data.indexOf(':', lima+1);
  tujuh = data.indexOf(':', enam+1);
  VR = data.substring(satu+1, dua);
  VS = data.substring(dua+1, tiga);
  VT = data.substring(tiga+1, empat);
  IR = data.substring(empat+1, lima);
  IS = data.substring(lima+1, enam);
  IT = data.substring(enam+1, tujuh);
  String kirimdata = VR;
  kirimdata+=",";
  kirimdata+=VS;
  kirimdata+=",";
  kirimdata+=VT;
  kirimdata+="R:";
  kirimdata+=IR;
  kirimdata+="S:";
  kirimdata+=IS;
  kirimdata+="T:";
  kirimdata+=IT;
  kirimdata+="      ";
  kirimdata+="Waktu :";
  kirimdata+=jam;
  kirimdata+="/";
  kirimdata+=menit;
  kirimdata+="/";
  kirimdata+=detik;
  kirimdata+="  ";
  kirimdata+=hari;
  kirimdata+="/";
  kirimdata+=bulan;
  kirimdata+=":";
  kirimdata+=tahun;
  File dataFile = SD.open("dimaslog.txt", FILE_WRITE);
  if (dataFile) {
    dataFile.println(kirimdata);
    dataFile.close();
    // print to the serial port too:
    Serial.println(kirimdata);
  }
  else {
    Serial.println("error");
  }
  data="";
 }
 if (millis() - waktuLampau >= 2000){
  waktuLampau = millis();
  if (state==0){
    state=1;
  }
  else if (state==1){
    state=2;
  }
  else if (state==2){
    state=0;
  }
tampilVAC();
 }
}
void tampilVAC(){
  switch (state){
      case 0:
  lcd.clear();
  lcd.setCursor(1,0);
  lcd.print("VR");
  lcd.setCursor(6,0);
  lcd.print("VS");
  lcd.setCursor(11,0);
  lcd.print("VT");
  lcd.setCursor(1,1);
  lcd.print(VR);
  lcd.setCursor(6,1);
  lcd.print(VS);
  lcd.setCursor(11,1);
  lcd.print(VT);
  break;
      case 1:
  lcd.clear();
  lcd.setCursor(1,0);
  lcd.print("IR");
  lcd.setCursor(6,0);
  lcd.print("IS");
  lcd.setCursor(11,0);
  lcd.print("IT");
  lcd.setCursor(1,1);
  lcd.print(IR);
  lcd.setCursor(6,1);
  lcd.print(IS);
  lcd.setCursor(11,1);
  lcd.print(IT);
  break;
      case 2:
  lcd.clear();
//  lcd.setCursor(1,0);
//  lcd.print(");
//  lcd.setCursor(6,0);
//  lcd.print("IS");
//  lcd.setCursor(11,0);
//  lcd.print("IT");
//  lcd.setCursor(2,1);
//  lcd.print(IR);
//  lcd.setCursor(7,1);
//  lcd.print(IS);
//  lcd.setCursor(12,1);
//  lcd.print(IT);
  break;
  }
}

Mungkin cukup sekian dulu apa yang bisa saya tuliskan kali ini, semoga bermanfaat, dan semoga kita bisa mendalami semua hal tentang Arduino, jika ada yang ingin ditanyakan silahkan Berkomentar di bawah atau Chat langsung di WA, dengan menekan tombol Wa di pojok Kiri bawah Halaman ini.

2 Replies to “Arduino, Cara Membuat Datalogger, Arus dan Tegangan AC, Sensor zmpt101b, sct-013-100”

  1. Agsom

    Cara gabung nya gimna jika saya hanya pakai 1 arduino

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *