Power Factor Calulation of R & RL Load
Power Factor Calulation of R & RL Load
#define ADCI_PIN A2
#include <modbus.h>
#include <modbusDevice.h>
#include <modbusRegBank.h>
#include <modbusSlave.h>
modbusDevice regBank;
modbusSlave slave;
#define RS485TxEnablePin 2
float Ianalog=0,adc_max,adc_min,adc_vpp,vout,value,prev;
float Iinst,Vinst;
double Isq,Vsq;
double Iavg,Vavg;
double Irms,Vrms;
double Prms,Pinst,PF;
double b = 0;
float VoltLevel = 3.72;
void setup()
regBank.setId(1);
Serial.begin(9600);
Serial1.begin(9600);
regBank.add(30001);
regBank.add(30002);
regBank.add(30003);
regBank.add(30004);
regBank.add(30005);
regBank.add(30006);
regBank.add(30007);
regBank.add(30008);
regBank.add(30009);
regBank.add(30010);
regBank.add(30011);
regBank.add(30012);
regBank.add(30013);
//Add Analog Output registers to the register bank
regBank.add(40001);
regBank.add(40002);
slave._device = ®Bank;
slave.setBaud(&Serial1,RS485Baud,RS485Format,RS485TxEnablePin);
void loop()
int a = 0;
adc_max=0;
adc_min=1024;
for(int cnt=0;cnt<SAMPLING;cnt++)
Ianalog = analogRead(A2);
adc_max = Ianalog;
{
adc_min = Ianalog;
Iinst = abs((((adc_max-adc_min)/10023))*20*7.727-0.04);
Pinst += ((5.0/1023.0)*analogRead(A0)*(220/VoltLevel))*Iinst;
vout = (5.0/1023.0)*analogRead(A0);
Vinst = (vout*220)/VoltLevel;
Vsq += sq(Vinst);
Iavg = Isq/SAMPLING;
Irms = sqrt(Iavg);
Vavg = Vsq/SAMPLING;
Vrms = sqrt(Vavg);
Prms = Vrms*Irms;
Pinst = Pinst/SAMPLING;
PF=0;
Prms = 0;
Pinst = 0;
else
PF = Pinst/Prms;
if(PF == 1)
PF = 0;
if (b>2)
{
Serial.println();
Serial.println("Energy Analyzer");
Serial.println("---------------");
Serial.println();
Serial.println();
b=0;
double Intiger=0,fract=0;
double Intiger1=0,fract1=0;
double Intiger2=0,fract2=0;
double Intiger3=0,fract3=0;
//fract = 0;Intiger=0;
//fract = fract*100;
fract = fract*100;
fract2 = fract2*100;
fract3 = fract3*100;
b++;
Iavg=0;
prev=0;
Vsq = 0;
Isq = 0;
Pinst = 0;
slave.run();
delay(100);
/*
* abs(((((adc_max-adc_min)/2)*(20*1.74))/1023)-0.05);
* /2 = mean
* *20/1023 = 0.01955
* -0.05 = callibration
*/