Februari-Agustus, 2022

Monitoring Daya Motor Listrik 3 Phasa Secara Real-Time

sakit

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.

Hardware

Sensor Arus

Wiring Diagram Sensor Arus

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.

Sensor Tegangan

Wiring Diagram Sensor Tegangan

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.

Software

Laman Home Website

Interface Website

Laman Database

Interface Website

Program ArduinoUNO

                
  //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);
  }
                
              

Program NodeMCU ESP8266

                
  #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");
    }

  }
                
              

Hasil Project