You are on page 1of 10

#include<LiquidCrystal.

h>

char phone_no[]="09033270692"; //recepient phone number

byte incomingByte;

String readBuffer = "";

unsigned long previousMillis = 0;

unsigned long duration;

long previousWH = 0;

float V = A1; //voltage sensor pin

float refVal=0; //voltage

int L1 = A2;

int L2 = A3;

int L3 = A4;

int led = 13;

float average = 0;

int navg = 1000;

float KWH = 0;

float I = 0;

float UNIT = 0;

LiquidCrystal lcd(12,10,5,4,3,2); //RS , E LCD dsiplay

boolean flagme = true;

void setup()

{
callib(A1);

long timerSec= 0;

Serial.begin(9600);

Serial.println("AT+CMGF=1"); //text mode

pinMode(A0, INPUT); //CURRENT SENSOR

pinMode(A1, INPUT); //VOLTAGE SENSOR

pinMode(A2, OUTPUT); //LOAD 1

pinMode(A3, OUTPUT); //LOAD 2

pinMode(A4, OUTPUT); //LOAD 3

lcd.begin (20,4);

void loop()

Serial.println(getVoltage(A1,1000));

Serial.println(getACcurrent(A0,1000));

if (millis()-previousMillis >= 1000)

previousMillis = millis();
float I = getACcurrent(A0,1000);

float V = (getVoltage(A1,1000));

float P = (V*I*1);

float WH = (0-(P*1)/(60*60*1000)); //converting seconds to hours

KWH = (KWH+WH); // continues summation of energy in KWH

UNIT = (KWH*10); //Energy unit consumed

Serial.print("ENERGY = ");

Serial.print(KWH);

lcd.setCursor(0 , 0);

lcd.print("VOLTAGE = ");

lcd.print(V);

lcd.print("V");
lcd.setCursor(0 , 1);

lcd.print("CURRENT = " );

lcd.print(I);

lcd.print("A");

lcd.setCursor(0 , 2);

lcd.print("ENERGY = " );

lcd.print(KWH);

lcd.print("KWH");

lcd.setCursor(0 , 3);

lcd.print("UNIT = ");

lcd.print(UNIT);

if (UNIT<1)

analogWrite(A2 , 225); // ON LOAD 1

analogWrite(A3 , 255); //ONLOAD 2

analogWrite(A4 , 255); //ON LOAD 3


}

else if (UNIT>=1)

lcd.setCursor(0 , 2);

lcd.print("WARNING!!! LOW UNIT");

analogWrite(A2,225); //LOAD 1

analogWrite(A3, LOW); //LOAD 2

analogWrite(A4,LOW); //LOAD 3

while(flagme)

if (UNIT>1)

Serial.println("AT+CMGF=1");

delay(2000);

Serial.print("AT+CMGS=\"");
Serial.print(phone_no);

Serial.write(0x22);

Serial.write(0x0D);

Serial.write(0x0A);

delay(2000);

Serial.print("AYO GSM TESTING");

delay(500);

Serial.println(char(26));

flagme = false;

while (Serial.available())

Serial.write(incomingByte);

readBuffer += char (incomingByte);

}
if (readBuffer=="0")

analogWrite(A2 , 225); // TURN ON LOAD 1

if (readBuffer=="1")

analogWrite(A2 , 0); //TURN OFF LOAD 1

if (readBuffer=="2")

analogWrite(A3 , 255); //TURN ON LOAD 2

if (readBuffer=="3")

analogWrite(A2 , 0); //TURN OFF LOAD 2

if (readBuffer=="4")

analogWrite(A3 , 255); //TURN ON LOAD 3

}
if (readBuffer=="5")

analogWrite(A2 , 0); //TURN OFF LOAD 3

readBuffer = "";

while(Serial.available())

Serial.write(Serial.read());

//CURRENT SENSOR

float getACcurrent(int pin, int navg)

long acc = 0;

for(int i = 0; i<navg; i++)


{

float adc = analogRead(pin)-509;

acc +=(adc*adc);

delay(1);

return (sqrt(acc/navg)*0.0488758);///average + (0.0488758 * analogRead(pin) - 13.513) / navg;


12661.9*0.0488758;

//VOLTAGE SENSOR

float getVoltage(int pin, int navg)

long acc=0;

for (int i=0; i<navg; i++)

long adc = analogRead(pin)-refVal;

acc += (adc*adc);

delay(1);

return (sqrt(acc/navg)*8.7185);
}

void callib(int pin)

float tcal=0;

for(int i=0;i<1000;i++)

tcal +=analogRead(pin);

refVal=tcal/1000;

Serial.println(refVal);

You might also like