Februari-Agustus, 2022
Diagram blok terbagi dalam tiga tahapan, masukan, proses, dan keluaran. Current Transformer dan Potential Transformer yang dihubungkan langsung dengan motor listrik selanjutnya keluarannya masing-masing akan diteruskan ke rangkaian pengondisian sinyal CT dan PT. Rangkaian pengkondisian sinyal pada PT menggunakan supply tegangan 12VDC, dan rangkaian pengkondisian sinyal pada CT menggunakan supply tegangan 5VDC, selanjutnya keluaran dari rangkaian pengkondisian sinyal ini diteruskan ke mikrokontroler Arduino UNO, melalui komunikasi serial antara mikrokontroler Arduino UNO dengan NodeMCU ESP8266, sinyal dari rangkaian pengkondisian sinyal akan di proses oleh Arduino UNO untuk selanjutnya diteruskan oleh NodeMCU ESP8266 menggunakan koneksi wifi, hingga data sampai ke database sistem monitoring. Perubahan pada database akan ditampilkan pada laman interface sistem monitoring.
Rangkaian penstabil tegangan ini bertujuan untuk menurunkan masukan tegangan 5 volt dan mengatur nilai keluarannya secara konstan. Sehingga ketika masukan tegangan berubah-ubah atau tidak
tepat 5 volt maka tegangan keluaran yang dihasilkan dari rangkaian penstabil tegangan ini tetap 1,25 volt. Tujuan dari penggunaan rangkaian penstabil tegangan adalah agar mendapatkan
keluaran tegangan yang konstan, hal ini dikarenakan tegangan keluaran penstabil ini akan membawa tegangan sekunder CT .
Tegangan sekunder CT akan berubah ubah seiring perubahan pada arus yang melaluinya. Sehingga penambahan tegangan yang dihasilkan pada rangakaian pengkondisi sinyal ini dapat diperhitungkan
dengan menguranginya dengan nilai penstabil tegangan yang tetap yang akan dilakukan dalam program. Keluaran tegangan dari rangkaian penstabil tegangan ini dirangkai seri dengan keluaran
tegangan sekunder Transformer arus. Keluaran trafo ini masih dalam bentuk arus AC. Tujuan diserikan adalah untuk menambahkan nilai tegangan dari belitan sekunder trafo dengan tegangan 1,25
volt. Hal ini dikarenakan keluaran tegangan sekunder hanya sekitar 0,4 VAC. Sehingga jika disearahkan langsung melalui dioda, nilai tersebut akan habis oleh cut off dioda yaitu 0,7 volt.
Setelah ditambahkan dengan tegangan 1,25 volt barulah dapat dilewatkan melalui dioda untuk disearahkan.
Tujuan dari rangkaian ini selain untuk penyearahan adalah membawa tegangan keluaran CT yang tidak mampu menembus tegangan cut off dioda. Sehingga nilai keluaran tegangan dari rangkaian
pengkondisi sinyal akan berubah seiring beratambahnya arus yang melewati CT.
Rangkaian pengkondisian sinyal ini menggunakan trafo step down untuk menurunkan tegangan 220V ke 3.5V lalu melewati dioda untuk disearahkan capasitor difungsikan untuk memperbaiki bentuk gelombang keluaran, ic lm358 adalah ic op-amp untuk memperkuat gelombang sinyal agar dapat dibaca oleh Arduino UNO.
//inisialisasi pin sensor
#define arus1 A0
#define arus2 A1
#define arus3 A2
#define tegangan1 A3
#define tegangan2 A4
#define tegangan3 A5
float I1 = 0;
float I2 = 0;
float I3 = 0;
void setup() {
Serial.begin (9600);
pinMode (arus1, INPUT);
pinMode (arus2, INPUT);
pinMode (arus3, INPUT);
pinMode (tegangan1, INPUT);
pinMode (tegangan2, INPUT);
pinMode (tegangan3, INPUT);
}
void loop() {
//baca permintaan dari nodeMCU
String minta = "";
//baca permintaan nodeMCU
while(Serial.available()>0){
minta += char(Serial.read());
}
//buang spasi yang diterima
minta.trim();
//uji variabel minta
if(minta == "Ya"){
//kirim data
kirimData();
}
//kosongkan variabel minta
minta = "";
delay (1000);
}
void kirimData(){
//baca nilai sensor
//FASA R
float ar1 = analogRead (arus1);
if (ar1 >=0 && ar1<=204 ){
I1 = 0;
}
else if (ar1 >=204 && ar1<=235 ){
I1 = (ar1/147.56);
}
else if (ar1 >=235 && ar1<=250 ){
I1 = (ar1/147.56);
}
else if (ar1 >=250 && ar1<=330 ){
I1 = (ar1/139.56);
}
else if (ar1 >=330 && ar1<=350 ){
I1 = (ar1/129.7);
}
else if (ar1 >=350 && ar1<=460 ){
I1 = (ar1/132.56);
}
else if (ar1 >=460 && ar1<=480 ){
I1 = (ar1/122.4);
}
else if (ar1 >=480 && ar1<=520 ){
I1 = (ar1/109);
}
else if (ar1 >=520 && ar1<=550 ){
I1 = (ar1/111);
}
else if (ar1 >=520 && ar1<=550 ){
I1 = (ar1/94.56);
}
//FASA S
float ar2 = analogRead (arus2);
if (ar2 >=0 && ar2<=204 ){
I2 = 0;
}
else if (ar2 >=204 && ar2<=235){
I2 = (ar2/136.29);
}
else if (ar2 >=235 && ar2<=250){
I2 = (ar2/162);
}
else if (ar2 >=250 && ar2<=320){
I2 = (ar2/136.29);
}
else if (ar2 >=320 && ar2<=345){
I2 = (ar2/127);
}
else if (ar2 >=345 && ar2<=425){
I2 = (ar2/136.29);
}
else if (ar2 >=425 && ar2<=445){
I2 = (ar2/112.8);
}
else if (ar2 >=445 && ar2<=485){
I2 = (ar2/126.29);
}
else if (ar2 >=485 && ar2<=510){
I2 = (ar2/101.8);
}
else if (ar2 >=510 && ar2<=1023){
I2 = (ar2/136.29);
}
//FASA T
float ar3 = analogRead (arus3);
if (ar3 >=0 && ar3<=204 ){
I3 = 0;
}
else if (ar3 >=204 && ar3 >=230){
I3 = (ar3/144.80);
}
else if (ar3 >=230 && ar3 >=255){
I3 = (ar3/156.9);
}
else if (ar3 >=255 && ar3 >=310){
I3 = (ar3/144.80);
}
else if (ar3 >=310 && ar3 >=335){
I3 = (ar3/121.03);
}
else if (ar3 >=335 && ar3 >=420){
I3 = (ar3/124.80);
}
else if (ar3 >=420 && ar3 >=445){
I3 = (ar3/111);
}
else if (ar3 >=445 && ar3 >=460){
I3 = (ar3/104.80);
}
else if (ar3 >=460 && ar3 >=485){
I3 = (ar3/93.84);
}
else if (ar3 >=485 && ar3 >=1023){
I3 = (ar3/94.80);
}
//TEGANGAN
float teg1 = analogRead (tegangan1);
float V1 = (teg1/4.5);
float teg2 = analogRead (tegangan2);
float V2 = (teg2/4.5);
float teg3 = analogRead (tegangan2);
float V3 = (teg3/4.5);
float Itot=(I1+I2+I3)/3;
float Vtot=(V1+V2+V3)/3*1.732050808;
int P= Itot*Vtot*1.732050808;
//sediakan variabel penampung data yang akan dikirim
//data kirim = "1.24#1.76#1.45#230.7#230.4#220.3"
String dataKirim = String(I1) + "#" + String(I2) + "#" + String(I3) + "#" + String(V1) + "#" + String(V2) + "#" + String (V3)+ "#" + String (P);
//kirimdata
Serial.println (dataKirim);
}
#include
#include
#include
//buat variabel software serial (rx,tx)
SoftwareSerial DataSerial (12, 13);
//millis sebagai pengganti delay
unsigned long waktuSebelum = 0;
const long interval = 3600000;
//variabel array untuk data parsing
String arrData[6]; //jumlah sensor
//inisialisasi wifi
#ifndef STASSID
#define STASSID "GalaxyTabA"
#define STAPSK "tvpd6938"
#endif
const char* ssid = STASSID;
const char* password = STAPSK;
const char* host = "192.168.43.240";
//memasukkan data kiriman dari arduino ke nodeMCU
float arus1;
float arus2;
float arus3;
float tegangan1;
float tegangan2;
float tegangan3;
int daya;
void setup() {
Serial.begin (9600);
DataSerial.begin (9600);
pinMode (LED_BUILTIN, OUTPUT);
//koneksi ke wifi
WiFi.begin(ssid, password);
Serial.println ("Connecting...");
while (WiFi.status() != WL_CONNECTED)
{
delay (500);
digitalWrite (LED_BUILTIN, HIGH);
}
//apabila berhasil terkoneksi
digitalWrite (LED_BUILTIN, LOW);
}
void loop() {
//kirim data ke server
WiFiClient client;
//inisialisasi port web server
const int httpPort = 80;
if ( !client.connect (host, httpPort) )
{
return;
}
//konfigurasi millis
unsigned long waktuSekarang = millis(); //baca waktu millis saat ini
if (waktuSekarang - waktuSebelum >= interval) {
//update previousMillis
waktuSebelum = waktuSekarang;
//prioritaskan pembacaan data dari arduinoUno(hasil kiriman data)
//baca data serial
String data = "";
while (DataSerial.available() > 0) {
data += char(DataSerial.read());
}
//buang spasi data
data.trim();
//uji data
if (data != "") {
//format data "23#124#543" = array (setelah parsing)
//parsing data(pecah data)
int index = 0;
for (int i = 0; i <= data.length(); i++) {
char delimiter = '#';
if (data[i] != delimiter)
arrData[index] += data[i];
else
index++; //variabel index bertambah 1
}
//pastikan bahwa data yang dikirim lengkap
//urutan index 0,1,2
if (index == 6) {
//tampilkan nilai sensor ke serial monitor
Serial.println ("arus1 : " + arrData[0]); //A0
Serial.println ("arus2 : " + arrData[1]); //A1
Serial.println ("arus3 : " + arrData[2]); //A2
Serial.println ("tegangan1 : " + arrData[3]); //A3
Serial.println ("tegangan2 : " + arrData[4]); //A4
Serial.println ("tegangan3 : " + arrData [5]); //A5
Serial.println ("daya : " + arrData [6]);
}
//isi variabel yang akan dikirim
arus1 = arrData[0].toFloat();
arus2 = arrData[1].toFloat();
arus3 = arrData[2].toFloat();
tegangan1 = arrData[3].toFloat();
tegangan2 = arrData[4].toFloat();
tegangan3 = arrData[5].toFloat();
daya = arrData[6].toInt();
//kondisi pasti terkoneksi
//kirim data sensor ke database/web
String Link;
HTTPClient http;
Link = "http://" + String (host) + "/monitoringdaya/kirimdata.php?tegangan1=" + String (tegangan1) + "&arus1=" + String (arus1) + "&daya=" + String (daya)+ "&tegangan2=" + String (tegangan2)+ "&arus2=" + String (arus2)+ "&tegangan3=" + String (tegangan3)+ "&arus3=" + String (arus3);
//eksekusi alamat link
http.begin (client, Link);
http.GET();
http.end ();
arrData[0] = "";
arrData[1] = "";
arrData[2] = "";
arrData[3] = "";
arrData[4] = "";
arrData[5] = "";
arrData[6] = "";
}
//minta data ke arduino uno
DataSerial.println ("Ya");
}
}