Transmission line fault Detection arduino code

#include <SoftwareSerial.h>
#include <ArduinoJson.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
SoftwareSerial nodemcu(9, 10);
int mVperAmp = 100;
float I1 = 0.00;
float I2 = 0.00;
float I3 = 0.00;
int FT = 1;
int MAP = 0;
double pickup_current = 0.55;
double fault_current = 0;
double Voltage1 = 0;
double Voltage2 = 0;
double Voltage3 = 0;
double Voltage4 = 0;
double VRMS1 = 0;
double VRMS2 = 0;
double VRMS3 = 0;
double VRMS4 = 0;
double AmpsRMS1 = 0;
double AmpsRMS2 = 0;
double AmpsRMS3 = 0;
double AmpsRMS4 = 0;
void setup(){
pinMode (7, OUTPUT);
pinMode (6, INPUT);
lcd.begin(16, 2);
Serial.begin(9600);
Serial.begin(9600);
nodemcu.begin(115200);
delay(1000);
Serial.println("Program started");
lcd.print(" TRANSMISSION ");
lcd.setCursor (0, 1);
lcd.print(" LINE ");
delay(800);
lcd.clear();
lcd.print("FAULT DECTECTION");
lcd.setCursor (0, 1);
lcd.print(" SYSTEM");
delay(800);
}

void loop(){
sendStatus();
Voltage1 = getVPP1();
VRMS1 = (Voltage1/2.0) *0.707;
AmpsRMS1 = (VRMS1 * 1000)/mVperAmp;
Serial.print(AmpsRMS1);
Serial.println(" Neutral RMS");
Voltage2 = getVPP2();
VRMS2 = (Voltage2/2.0) *0.707;
AmpsRMS2 = (VRMS2 * 1000)/mVperAmp;
Serial.print(AmpsRMS2);
Serial.println(" Red RMS");
Voltage3 = getVPP3();
VRMS3 = (Voltage3/2.0) 0.707;
AmpsRMS3 = (VRMS3 * 1000)/mVperAmp;
AmpsRMS3 = (AmpsRMS3+(AmpsRMS3
(0.40)));
Serial.print(AmpsRMS3);
Serial.println(" Green RMS");
Voltage4 = getVPP4();
VRMS4 = (Voltage4/2.0) *0.707;
AmpsRMS4 = (VRMS4 * 1000)/mVperAmp;
Serial.print(AmpsRMS4);
Serial.println(" Blue RMS");
if (((AmpsRMS2 > pickup_current) && (AmpsRMS1 >= 0.37)) || ((AmpsRMS3 > pickup_current) && (AmpsRMS1 >= 0.37)) || ((AmpsRMS4 > pickup_current) && (AmpsRMS1 >= 0.37)) || ((AmpsRMS2 > pickup_current) && (AmpsRMS3 > pickup_current)) || ((AmpsRMS3 > pickup_current) && (AmpsRMS4 > pickup_current)) || ((AmpsRMS4 > pickup_current) && (AmpsRMS2 > pickup_current))){
lcd.clear();
digitalWrite (7, HIGH);
while (digitalRead(6) == LOW){
Serial.print(AmpsRMS1);
Serial.println(" Neutral RMS");
Serial.print(AmpsRMS2);
Serial.println(" RED RMS");
Serial.print(AmpsRMS3);
Serial.println(" GREEN RMS");
Serial.print(AmpsRMS4);
Serial.println(" BLUE RMS");
lcd.clear();
if ((AmpsRMS2 > pickup_current) && (AmpsRMS3 > pickup_current) && (AmpsRMS4 > pickup_current) && (AmpsRMS1 < 0.40)){
tone (13, 1000);
lcd.print ("Three Phase");
lcd.setCursor (0, 1);
lcd.print("fault");
FT = 2;
}
else if ((AmpsRMS2 > pickup_current) || (AmpsRMS3 > pickup_current) || (AmpsRMS4 > pickup_current)){
if ((AmpsRMS2 > pickup_current) && (AmpsRMS3 > pickup_current)|| (AmpsRMS3 > pickup_current) && (AmpsRMS4 > pickup_current)|| (AmpsRMS4 > pickup_current) && (AmpsRMS2 > pickup_current)){
tone (13, 1000);
if (AmpsRMS1 >= 0.38){
lcd.clear();
lcd.print ("Double line to");
lcd.setCursor (0, 1);
lcd.print("Ground fault");
FT = 3;
}
else{
lcd.print ("line to line");
lcd.setCursor (0, 1);
lcd.print("fault");
FT = 4;
}
}
else {
tone (13, 1000);
lcd.print ("Single line to");
lcd.setCursor (0, 1);
lcd.print("Ground fault");
FT = 5;
}
}
delay(1000);
lcd.clear();

if ((AmpsRMS2 > pickup_current) && (AmpsRMS1 >= 0.37))
{
fault_current = AmpsRMS2;
lcd.clear();
lcd.setCursor (0, 0);
lcd.print("RED");
lcd.setCursor (0, 1);
lcd.print("GROUND");

}
if ((AmpsRMS3 > pickup_current) && (AmpsRMS1 >= 0.37))
{
fault_current = AmpsRMS3;
lcd.clear();
lcd.setCursor (0, 0);
lcd.print("GREEN");
lcd.setCursor (0, 1);
lcd.print("GROUND");

}
if ((AmpsRMS4 > pickup_current) && (AmpsRMS1 >= 0.37))
{
fault_current = AmpsRMS4;
lcd.clear();
lcd.setCursor (0, 0);
lcd.print("BLUE");
lcd.setCursor (0, 1);
lcd.print("GROUND");

}
if ((AmpsRMS2 > pickup_current) && (AmpsRMS3 > pickup_current))
{
fault_current = AmpsRMS3;
lcd.clear();
lcd.setCursor (0, 0);
lcd.print("RED");
lcd.setCursor (0, 1);
lcd.print("GREEN");

}
else if ((AmpsRMS3 > pickup_current) && (AmpsRMS4 > pickup_current))
{
fault_current = AmpsRMS3;
lcd.clear();
lcd.setCursor (0, 0);
lcd.print("GREEN");
lcd.setCursor (0, 1);
lcd.print("BLUE");

}
else if ((AmpsRMS4 > pickup_current) && (AmpsRMS2 > pickup_current))
{
fault_current = AmpsRMS2;
lcd.clear();
lcd.setCursor (0, 0);
lcd.print("BLUE");
lcd.setCursor (0, 1);
lcd.print("RED");

}

if (fault_current >= 1.10){
MAP = 2;
lcd.setCursor(8, 0);
lcd.print("2 KM");
lcd.setCursor(8, 1);
lcd.print("2 KM");
if ((AmpsRMS2 > pickup_current) && (AmpsRMS3 > pickup_current) && (AmpsRMS4 > pickup_current)){
delay(1500);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("BLUE");
lcd.setCursor(8, 0);
lcd.print("2 KM");
}
}
if ((fault_current >= 0.83) && (fault_current < 1.10)){
MAP = 4;
lcd.setCursor(8, 0);
lcd.print("4 KM");
lcd.setCursor(8, 1);
lcd.print("4 KM");
if ((AmpsRMS2 > pickup_current) && (AmpsRMS3 > pickup_current) && (AmpsRMS4 > pickup_current)){
delay(1500);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("BLUE");
lcd.setCursor(8, 0);
lcd.print("4 KM");
}
}
if ((fault_current >= 0.72) && (fault_current < 0.83)){
MAP = 6;
lcd.setCursor(8, 0);
lcd.print("6 KM");
lcd.setCursor(8, 1);
lcd.print("6 KM");
if ((AmpsRMS2 > pickup_current) && (AmpsRMS3 > pickup_current) && (AmpsRMS4 > pickup_current)){
delay(1500);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("BLUE");
lcd.setCursor(8, 0);
lcd.print("6 KM");
}
}
if ((fault_current >= pickup_current) && (fault_current < 0.72)){
MAP = 8;
lcd.setCursor(8, 0);
lcd.print("8 KM");
lcd.setCursor(8, 1);
lcd.print("8 KM");
if ((AmpsRMS2 > pickup_current) && (AmpsRMS3 > pickup_current) && (AmpsRMS4 > pickup_current)){
delay(1500);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("BLUE");
lcd.setCursor(8, 0);
lcd.print("8 KM");
}
}
delay(1000);

}
}
else {
digitalWrite (7, LOW);
noTone(13);
lcd.clear();
lcd.print(" NO FAULT ");
FT = 1;
}
}
}
void sendStatus(){
StaticJsonBuffer<1000> jsonBuffer;
JsonObject& data = jsonBuffer.createObject();
I1 = AmpsRMS1;
I2 = AmpsRMS2;
I3 = AmpsRMS3;
data["FT"] = FT;
data["MAP"] = MAP;
data["I1"] = I1;
data["I2"] = I2;
data["I3"] = I3;
data.printTo(nodemcu);
jsonBuffer.clear();

}
float getVPP1()
{
lcd.clear();
lcd.print("FAULT DETECTING");
lcd.setCursor (0, 1);
lcd.print("----------");
float result1;
int readValue1; //value read from the sensor
int maxValue1 = 0; // store max value here
int minValue1 = 1024; // store min value here

uint32_t start_time = millis();
while((millis()-start_time) < 1000) //sample for 1 Sec
{
readValue1 = analogRead(A0);
// see if you have a new maxValue
if (readValue1 > maxValue1)
{
/record the maximum sensor value/
maxValue1 = readValue1;
}
if (readValue1 < minValue1)
{
/record the minimum sensor value/
minValue1 = readValue1;
}
}

// Subtract min from max
result1 = ((maxValue1 - minValue1) * 5.0)/1024.0;

return result1;

}
float getVPP2()
{
lcd.setCursor (0, 1);
lcd.print("------------");
float result2;
int readValue2; //value read from the sensor
int maxValue2 = 0; // store max value here
int minValue2 = 1024; // store min value here

uint32_t start_time = millis();
while((millis()-start_time) < 1000) //sample for 1 Sec
{
readValue2 = analogRead(A1);
// see if you have a new maxValue
if (readValue2 > maxValue2)
{
/record the maximum sensor value/
maxValue2 = readValue2;
}
if (readValue2 < minValue2)
{
/record the minimum sensor value/
minValue2 = readValue2;
}
}

// Subtract min from max
result2 = ((maxValue2 - minValue2) * 5.0)/1024.0;

return result2;

}

float getVPP3()
{
lcd.setCursor (0, 1);
lcd.print("--------------");
float result3;
int readValue3; //value read from the sensor
int maxValue3 = 0; // store max value here
int minValue3 = 1024; // store min value here

uint32_t start_time = millis();
while((millis()-start_time) < 1000) //sample for 1 Sec
{
readValue3 = analogRead(A2);
// see if you have a new maxValue
if (readValue3 > maxValue3)
{
/record the maximum sensor value/
maxValue3 = readValue3;
}
if (readValue3 < minValue3)
{
/record the minimum sensor value/
minValue3 = readValue3;
}
}

// Subtract min from max
result3 = ((maxValue3 - minValue3) * 5.0)/1024.0;

return result3;

}
float getVPP4()
{
lcd.setCursor (0, 1);
lcd.print("----------------");
float result4;
int readValue4; //value read from the sensor
int maxValue4 = 0; // store max value here
int minValue4 = 1024; // store min value here

uint32_t start_time = millis();
while((millis()-start_time) < 1000) //sample for 1 Sec
{
readValue4 = analogRead(A3);
// see if you have a new maxValue
if (readValue4 > maxValue4)
{
/record the maximum sensor value/
maxValue4 = readValue4;
}
if (readValue4 < minValue4)
{
/record the minimum sensor value/
minValue4 = readValue4;
}
}

// Subtract min from max
result4 = ((maxValue4 - minValue4) * 5.0)/1024.0;

return result4;

}

I moved your topic to an appropriate forum category @subha129.

In the future, please take some time to pick the forum category that best suits the subject of your topic. There is an "About the _____ category" topic at the top of each category that explains its purpose.

This is an important part of responsible forum usage, as explained in the "How to get the best out of this forum" guide. The guide contains a lot of other useful information. Please read it.

Thanks in advance for your cooperation.

1 Like

Thanks for the code. Is there a schematic and description to accompany it?

How to make a schematic you can post. - Using Arduino / Introductory Tutorials - Arduino Forum

Help us help you.

this is a wrong code pls correct and send it if possible

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.