You are on page 1of 16

Underground cable fault detection without GSM

ABSTRACT
The objective of this project is to determine the distance of underground cable fault from thebase
station in kilometers and displayed over the internet. Underground cable system is a common
practice followed in major urban areas. While a fault occurs for some reason, at that time the
repairing process related to that particular cable is difficult due to exactunknown location of the
fault in the cable. Proposed system is used to find out the exact location of the fault and to send
data in graphical format to a dedicated website together with on board LCD display using a
GSM module.
The project uses the standardtheory of Ohms law, i.e., when a low DC voltage is applied
at the feeder end through a series resistor(Cable lines),then the current would vary depending
upon the locationof the fault in the cable as the resistance is proportional to the distance. In case
there is a short circuit (Line to Ground), the voltage across series resistorschanges according to
the resistance that changes with distance .This is then fed to an ADC to develop precise digital
data which the programmed microcontrollerof the 8051 family displaysin kilometers.
The project is assembled with a set of resistors representing the cable length in km and the fault
creation is made by a set of switches at every known km to cross check the accuracy of the same.
The fault occurring at a particular distance,therespective phase along with the distance is
displayed on the LCD. The same information is alsosent to a dedicated website overinternet
activated SIM with GSM, interfacedto the microcontroller. Furthermore, this project can be
enhanced by using capacitor in an AC circuit to measure the impedance which can even locate
the open circuited cable, unlike the short circuited fault that uses only resistors in DC circuit as
followed in the above proposed project.

2. SCHEMATIC DIAGRAM

FIG 6: SCHEMATIC DIAGRAM

CONNECTIONS

The output of the power supply which is 5v is given to the 40rth pin of microcontroller
and GND is connected to its 20th pin. Port 1.0 to 1.3 of microcontroller are given to 18 to 15 pin
of ADC0804. Relays 1,2,&3 are given to pins 1B,2B&3B of ULN2003A and port0.0 to 0.2 of
microcontroller. Port 3.0 to 3.5 of microcontroller are given to pin 2,3,5 of ADC0804. Pins
16,15,14 of ULN2003A are given to relays RL1,RL2,RL3 which drives set of resistors
(R17,R16,R15,R14), (R21,R20,R19,R18) and (R25,R24,R23,R22).

WORKING
The project uses a set of resistances in series i.e. R10,R11,R12,R13 and
R17,R16,R14,R21, R20,R19,R18,R25,R22 as shown in the circuit diagram, one set for each
phase. Each series resistors represents the resistance of the underground cable for a specific
distance thus 4 such resistances in series represent 1-4kms. 3 relays are used to common point of
their contacts are grounded while the NO points are connected to the input of the R17, R21 &
R25 being the 3 phase cable input. R10 is fed with a series resistor R1 to 5v supply. The common
point of R10 & R1 is given to input pin of 6 of ADC0804 duely wired as explained above.

OPERATING PROCEDURE

While any of the 12switches are operated they impose conditions like LG, LL, 3L fault as
per the switch operation. The program while executed continuously scans by operating the
3relays in sequence of 1sec interval. Thus any NO point while driven to GND through the
common contact point of the relay develops a current flow through R1, R10 & any other switch
depending on the created fault. Thus the voltage drop at the ADC pin varies depending on the
current flow which is inversely proportional to the resistance value representing the length of
cable in kilometres. This varying voltage passes through the ADC to develop a 8 bit data to the
microcontroller port1 that while executed displays an output in the LCD display the fault

occurring km. In a fault situation it displays R=3km if the 3kms switch is made ON.
Accordingly all other faults are indicated.

7. LAYOUT DIAGRAM

RESISTORS
1

R1

330R

22

R2-R23

1K

R24

2.2K

R25-R27

10K

CAPACITORS
1

C1

470UF

C2,C3

10UF

C4,C5

33PF

C6

56PF

U1

7805

U2

AT89S52

U3

ADC0804

U4

ULN2003A

IC'S

IC BASE
1

40-PIN

20-PIN

16-PIN

DIODES
4

D1-D4

IN4007

Miscellaneous
1

X1

11.0592MHz CRYSTAL

RV1

1K POT

RV2

10K POT

LED1-LED4

LED-RED

RELAY1-RELAY3

12V

LCD

16X2

TRANSFORMER

0-12V

S1

PUSH BUTTON

12

S2-S13

TOGLE SWITCHES

FEMALE BURGE

16-PIN

MALE BURGE

16-PIN

MALE BURGE

2-PIN

FEMALE BURGE

2-PIN

HEAT SINK

PCB CONNECTORS

2-PIN

9.2 SOURCE CODE


#include<at89x52.h>

#define LCDDATA P2
#define ADCDATA P1
#define MINIMUM 5

sbit BUSY = P2^7;


sbit RS = P2^0;
sbit RW = P2^1;
sbit EN = P2^2;

sbit OE = P1^3; //RD pin


sbit SC = P1^4;

// WR is active LOW pin

sbit EOC = P1^5; //INTR is active LOW pin

sbit RELAY1 = P1^0;


sbit RELAY2 = P1^1;
sbit RELAY3 = P1^2;

unsigned char Buff[3] = 0;

void ISR_T0() interrupt 1

{
TH0 = 0x4B;
TL0 = 0xFF;

TF0 = 0;
}

void Delay(unsigned int time)


{
unsigned int i = 0;
for(i=0;i<time;i++);
}

unsigned char Read_ADC()


{
unsigned char temp = 0;

SC = 1;

// Make WR pin low

Delay(150); // wait for a while


SC = 0;

// Make WR pin High

while(EOC == 1); // wait till INTR pin goes low


while(EOC == 0); // wait till INTR pin goes High
Delay(150);
OE = 0;
temp = ADCDATA;

// Make RD pin LOW

OE = 1;

// MAKE RD Pin HIGH

return temp;

/*Function to check status of LCD*/


void BusyCheck()
{
BUSY = 1;
RS = 0;

// RS =0 FOR COMMAND

RW = 1;

// RW = 1 FOR READING

while(BUSY)
{
EN = 0;

// ENABL EIS LOW

EN = 1;

// ENABLE IS HIGH

}
}

/*Function to Send Command to LCD*/


void LCDCMD(unsigned char CMD)
{
BusyCheck();
LCDDATA = CMD;
RS = 0;

// RS =0 FOR COMMAND

RW = 0;

// RW = 0 FOR WRITING

EN = 1;

// ENABLE IS HIGH

EN = 0;

// ENABL EIS LOW

/*Function to Send Data to LCD*/


void LCDData(unsigned char Data)
{
BusyCheck();
LCDDATA = Data;
RS = 1;

// RS =1 FOR DATA

RW = 0;

// RW = 0 FOR WRITING

EN = 1;

// ENABLE IS HIGH

EN = 0;

// ENABL EIS LOW

void LCDString(unsigned char *str)


{
while(*str)
{
LCDData(*str);
str++;
}

void Init_T0()
{
TMOD = 0x01;

// SET THE TIMER0 IN MODE 1 MODE

TH0 = 0x4B;

// LOAD THE TH0 VALUE

TL0 = 0xFF;

// LOAD THE TL0 VALUE

ET0 = 1;

// ENABLE THE TIMER0 INTERRUPT

EA = 1;
TR0 = 1;

// ENABLE ALL INTERRUPT


// START THE TIMER

/*Function to Initalize LCD*/


void Init_LCD()
{
/*Command to Select 2 line , 5x7 matrix mode of LCD */
LCDCMD(0x38);

/*Command to shift the cursor to next position when Data is send in LCD */
LCDCMD(0x06);

/*Command to ON Display, OFF the Cursor in LCD */


LCDCMD(0x0C);

/*Return cursor home */


LCDCMD(0x02);
}

void Display(unsigned char Data)


{
switch(Data)
{
case 170:
LCDString("1KM");
break;
case 204:
LCDString("2KM");
break;
case 219:
LCDString("3KM");
break;
case 227:
LCDString("4KM");
break;
case 255:
LCDString("NF ");
break;
default:
break;
}
}

void main()
{

P0 = 0x0F;
Buff[0] = 0xFF;
Init_T0();
Init_LCD();

while(1)
{
P0 = 0x01;
LCDCMD(0x80);
LCDString("R: ");
Display(Read_ADC());
LCDCMD(0x87);
LCDString("B: ");
Display(Read_ADC());

P0 = 0x02;
LCDCMD(0xC0);
LCDString("Y: ");
Display(Read_ADC());

P0 = 0x04;
LCDCMD(0xC7);
LCDString("N: ");
Display(Read_ADC());

}
}

You might also like