Translate

Membuat Alat Monitor Tegangan dan Arus AC Menggunakan ARDUINO dan notifikasi via SMS GATEWAY

Membuat Alat Monitor Tegangan dan Arus AC Menggunakan ARDUINO dan notifikasi via SMS GATEWAY


        Pada kesempatan kali ini saya akan menjelaskan mengenai sebuah alat yang digunakan untuk monitoring arus dan tegangan AC via Arduino Mega dan juga bisa mengirimkan notifikasi ketika tegangan terukur kurang dari 217 Vrms, jadi jika tegangan diatas 217 Vrms alat tidak akan mengirim SMS namun ketika tegangan turun sampai dibawah 217 maka akan mengirimkan sms notifikasi. alat ini menggunakan sensor ACS712 dan ZMPT101b. modul sms menggunakan SIM900A. untuk lebih jelasnya berikut adalah skema dan programnya.



a. Arduino Mega





b. Sensor Tegangan AC ZMPT101B





c. Sensor Arus AC ACS712





d. SIM900A Module






e. Program Arduino IDE

#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("087810016xxx", "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 - 505.1) / 0.431 ;

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

float p = (vrms * 20)/231;

 sprintf(string,"Daya: %s watt", dtostrf(p, 8, 5, strsms));
 
  lcd.setCursor(0, 0);
  lcd.print("v=");
  lcd.print(vrms,1);
  //lcd.print(vin);
 
  lcd.print(" I=");
  lcd.print(iintot);
  lcd.print("     ");
 
  lcd.setCursor(0, 1);
  lcd.print("P=");
  lcd.print(p,1);
  lcd.print("     ");

if((vrms > 0)&&(vrms < 217)){
if (sms.SendSMS("087810016xxx", string))
 Serial.println("\nSMS sent OK");
 delay(30000);
}

delay(200);

}






f. VIDEO HASILNYA









2 comments:

  1. untuk rangkaian pengkabelannya dari stopkontak yang terhubung kemasing-masing sensor ada gan?
    mohon pencerahannya......

    ReplyDelete