Translate

ARDUINO Monitoring Daya, Tegangan AC 220v zmpt101b dan Arus AC TRAFO CT ARUS VIA SMS GATEWAY SIM800L

ARDUINO Monitoring Daya, Tegangan AC 220v zmpt101b dan Arus AC TRAFO CT ARUS VIA SMS GATEWAY SIM800L


        Pada pembahasan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang digunakan untuk me-monitoring daya yaitu tegangan dan arus AC 220v 50Hz dengan menggunakan Arduino dan sensor yang digunakan adalah zmpt101b dan trafo arus CT 60/5 kemudian modul sms gateway yang digunakan adalah SIM800L. jadi alat ini bisa mengirimkan informasi terkait daya yang sedang di-sensing oleh sensor saat kita kirimkan sms "Monitor" ke alat maka akan dibalas dengan "DAYA = xxxxx watt" seperti itu gambarannya. yang perlu diperhatikan yaitu cara kalibrasi kedua sensor tersebut agar didapatkan nilai yang tepat. untuk lebih jelasnya berikut adalah program dan skemanya.




a. Arduino Mega





b. Sensor Tegangan AC ZMPT101B





c. Sensor Arus Trafo CT 60/5







d. Modul SMS Gateway SIM800L + Buck Converter








e. Program Arduino IDE

//supply SIM800L adalah 4v
//RX-TX Arduino Mega untuk sim800l adalah pin 50 dan 51
//rubah library SIM800l pada GSM.cpp ganti ke pin 50 dan 51


#include "SIM900.h"
#include <SoftwareSerial.h>

//#include <stdlib.h>
#include "sms.h"
SMSGSM sms;


#include <Wire.h>  // i2C Conection Library
#include <LiquidCrystal_I2C.h>  //i2C LCD Library

// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x3F, 16, 2);

char string[160];
int numdata;
boolean started=false;
char smsbuffer[160];
char n[20];
char strsms[5];

unsigned long start_times[300];
unsigned long stop_times[300];
unsigned long values[300];

// Define various ADC prescaler
const unsigned char PS_16 = (1 << ADPS2);
const unsigned char PS_32 = (1 << ADPS2) | (1 << ADPS0);
const unsigned char PS_64 = (1 << ADPS2) | (1 << ADPS1);
const unsigned char PS_128 = (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);

int a = 0;
int zero = 1;
int vin = 0;
int iin = 0;



void setup() {

  lcd.begin();
  lcd.clear();
  lcd.noCursor();

  Serial.begin(9600);

  // set up the ADC
  ADCSRA &= ~PS_128;  // remove bits set by Arduino library

  // you can choose a prescaler from above.
  // PS_16, PS_32, PS_64 or PS_128
  ADCSRA |= PS_128;    // set our own prescaler to 64

  Serial.println("GSM Shield testing.");

  if (gsm.begin(2400)){
    Serial.println("\nstatus=READY");
    started=true;
  }
  else Serial.println("\nstatus=IDLE");


if(started) {
          //Enable this two lines if you want to send an SMS.
          if (sms.SendSMS("085604457904", "Ready"))
          Serial.println("\nSMS sent OK");
     }


}


void loop() {

  unsigned int i;
  unsigned int z;
  z = 0;
  
  // capture the values to memory
  for(i=0;i<300;i++) {
    start_times[i] = micros();
    values[i] = analogRead(A0);            

  if (values[i] >= z) {
  z = values[i];
  }
    stop_times[i] = micros();
  }

   int vin = z ;

  z = 0;

  //================================
  // capture the values to memory
  for(i=0;i<300;i++) {
    start_times[i] = micros();
    values[i] = analogRead(A1);            

  if (values[i] >= z) {
  z = values[i];
  }
    stop_times[i] = micros();
  }
     float v1 = z * (5.0/1023.0);
     float iin = (v1-2.5)/0.1 ;

z = 0;

  // capture the values to memory
  for(i=0;i<300;i++) {
    start_times[i] = micros();
    values[i] = analogRead(A1);            

  if (values[i] >= z) {
  z = values[i];
  }
    stop_times[i] = micros();
  }
     float v1x = z * (5.0/1023.0);
     float iinx = (v1x-2.5)/0.1 ;

float iintot = (iin + iinx) / 2;

if (iintot < 0) {
iintot = 0;
}

 z = 0;

float vrms = (vin - 559.9) / 0.413 ;

if (vrms < 0) {
vrms = 0;
}

float p = vrms * iin;

 sprintf(string,"Daya: %s watt", dtostrf(p, 8, 5, strsms));

 if(gsm.begin(9600)){
  started=true;
 }
 int pos=0;
 if(started){
  pos=sms.IsSMSPresent(SMS_ALL);
  if(pos){
    sms.GetSMS(pos,n,smsbuffer,100);
  
    if(!strcmp(smsbuffer,"monitor")){
      sms.SendSMS(n,string);
    }
    if(!strcmp(smsbuffer,"Monitor")){
      sms.SendSMS(n,string);
    }
 
    delsms();
  }
 }

  lcd.setCursor(0, 0);
  lcd.print("v=");
  lcd.print(vrms,1);
 
  lcd.print(" I=");
  lcd.print(iintot);
  lcd.print("     ");
 
  lcd.setCursor(0, 1);
  lcd.print("P=");
  lcd.print(p,1);
  lcd.print("     ");

delay(200);

}

void delsms()
{
  for (int i=0; i<10; i++)
  {
      int pos=sms.IsSMSPresent(SMS_ALL);
      if (pos!=0)
      {
        if (sms.DeleteSMS(pos)==1){}else{}
      }
  }
}





f. VIDEO HASILNYA








No comments:

Post a Comment