Info page · no simulation · Arduino and electronics
Underground Cable Fault Locator (Learning Model)
How the distance to a short-circuit in a cable is found from its resistance, with an Arduino model that uses resistors as cable sections.
This topic cannot be run safely or meaningfully in the simulator, so this page explains it with diagrams, calculations and sample code instead. Everything here is original.
What you will learn
- Why the resistance of a cable tells you the distance
- How a voltage divider and the analog pin measure it
- What real utilities use to find faults
In short
A copper cable has a fixed resistance for every kilometre. If the cable is shorted to ground at some point, a measurement from the test end sees only the resistance up to the fault. The longer that stretch, the higher the resistance. The Arduino reads this with a voltage divider and works out the distance. The model uses resistors for the kilometres and switches for the faults.
Try this next
- Add an LCD that shows the fault distance in kilometres.
- Add a buzzer that sounds if the voltage is below 0.1 V (short at the test end).
- Use 10 Ohm sections and a constant current source for a better result.
The model
The 5 V supply drives Rref (1 kilo-ohm) and then the cable sections in series, 1 kilo-ohm for each kilometre. A fault switch to ground after section n makes the cable resistance n kilo-ohm. The voltage at A0 is the divider voltage.
| Case | Result with Rref = 1 k |
|---|---|
| Fault after 1 km | R = 1 k, A0 = 2.50 V |
| Fault after 2 km | R = 2 k, A0 = 3.33 V |
| Fault after 3 km | R = 3 k, A0 = 3.75 V |
| Fault after 4 km | R = 4 k, A0 = 4.00 V |
| No fault (open end) | A0 = 5 V |
The maths
- Divider: V = 5 x R / (Rref + R).
- Solve for R: R = Rref x V / (5 - V).
- Distance (km) = R / resistance per km.
- Example: A0 = 3.33 V gives R = 1 k x 3.33 / 1.67 = 2 k, so the fault is 2 km away.
const float R_REF = 1000.0; // ohm
const float R_PER_KM = 1000.0; // ohm per kilometre in this model
void setup() { Serial.begin(9600); }
void loop() {
float v = analogRead(A0) * 5.0 / 1023.0;
if (v > 4.9) {
Serial.println("No fault: cable is open at the far end");
} else {
float r = R_REF * v / (5.0 - v);
Serial.print("Fault distance: ");
Serial.print(r / R_PER_KM, 1);
Serial.println(" km");
}
delay(1000);
}How real utilities find faults
- Murray loop test: the faulty cable is joined at the far end to a healthy cable. A bridge is balanced. The distance is x = 2L x Ra / (Ra + Rb), where L is the cable length, Ra is the bridge arm on the faulty cable side and Rb the other arm.
- Time domain reflectometry (TDR): a pulse is sent down the cable. The echo from the fault comes back, and the distance comes from the time and the pulse speed.
- Surge (thumper) and acoustic method: a high-voltage pulse makes the fault spark, and a listener on the ground hears the thump at the exact spot.
Warning: real cables carry 11 kV or more. Fault finding on live or charged cables must only be done by trained staff with permits. Our model uses 5 V only.
Parts list
| Part | What to look for |
|---|---|
| Arduino Uno | Analog pin A0 |
| Resistors 1 k, 1/4 W, 5 pieces | 4 for sections, 1 for Rref |
| Push switches or jumper wires, 4 | Fault switches to GND |
| Breadboard and wires | For the ladder |