The Circuit Maker
Projects9 min read

Battery Tester Circuit: Build a Simple Voltage Indicator with LEDs

Build a battery tester circuit that uses LEDs to show charge level. Uses a voltage divider and LED thresholds to indicate if a battery is full, low, or dead.

·

A battery tester circuit uses LEDs to visually indicate whether a battery is fully charged, low, or dead. It works by exploiting the fact that LEDs require a minimum voltage to turn on, and that different series resistor values set different voltage thresholds. When the battery voltage is high, all LEDs light up. As the voltage drops, LEDs turn off one by one — giving you a simple traffic-light indicator without any microcontroller or programming.

What you need

ComponentQuantityNotes
Green LED (5mm)1Indicates full charge
Yellow LED (5mm)1Indicates medium charge
Red LED (5mm)1Indicates low charge (always on if any charge remains)
1 kΩ resistor1For green LED (highest threshold)
470Ω resistor1For yellow LED (medium threshold)
220Ω resistor1For red LED (lowest threshold)
Momentary push button1Optional — prevents continuous battery drain
Battery clip or holder1Match to battery type (9V snap, AA holder, etc.)
Breadboard + jumper wires1 setFor prototyping

How it works

Each LED is wired in its own branch, in parallel with the others. Each branch has a different series resistor value. The key insight is that a larger resistor requires a higher battery voltage to push enough current through the LED to make it visibly light up.

  • Green LED + 1 kΩ: Only lights when battery voltage is high (strong current despite high resistance). First to go dark as the battery drains.
  • Yellow LED + 470Ω: Lights at medium voltages. Goes dark as the battery gets low.
  • Red LED + 220Ω: Lights even at low voltages because the low resistance allows enough current. Last LED to go dark — if even the red is off, the battery is dead.

The result

Battery stateGreenYellowRed
Full / goodOn (bright)OnOn
Getting lowOff or dimOnOn
Low / replace soonOffOff or dimOn
DeadOffOffOff

Building the circuit (9V battery version)

  1. If using a button: connect one terminal of the push button to the battery's positive terminal. Connect the other terminal to a common row on the breadboard — this is your switched positive rail. If not using a button, connect the battery positive directly.
  2. Green branch: Connect the 1 kΩ resistor from the positive rail to a row. Place the green LED's anode (long leg) in that row and cathode (short leg) in another row. Connect that row to the ground rail.
  3. Yellow branch: Same pattern with the 470Ω resistor and yellow LED.
  4. Red branch: Same pattern with the 220Ω resistor and red LED.
  5. Connect the battery's negative terminal to the breadboard's ground rail.
  6. Press the button (or connect the battery) and observe which LEDs light up.

Adapting for different battery types

The resistor values above are tuned for a 9V battery. For other battery types, you need to adjust the resistors because the voltage range is different. Use our LED resistor calculator to find appropriate values.

BatteryFull voltageLow voltageDead voltage
9V alkaline~9.5V~7.5Vbelow 6V
AA/AAA alkaline (1.5V)~1.6V~1.2Vbelow 0.9V
AA NiMH (1.2V)~1.4V~1.15Vbelow 1.0V
Li-ion 18650 (3.7V)~4.2V~3.5Vbelow 3.0V

For single-cell batteries (AA, AAA), the voltage range is narrow (1.6V down to 0.9V). You may need to use LEDs with lower forward voltage (red LEDs are best at ~1.8V) and very low resistor values to get visible differentiation. This design works best for 9V and multi-cell battery packs where the voltage swing is wider.

Adding precision: the Arduino version

For accurate numerical readings, you can measure battery voltage with an Arduino's analog input. A voltage divider scales the battery voltage to the 0–5V range the Arduino can read:

// Voltage divider: R1 = 10kΩ, R2 = 10kΩ
// Divides input voltage by 2
// Safe for batteries up to 10V on a 5V Arduino

const int BATTERY_PIN = A0;
const float DIVIDER_RATIO = 2.0;

void setup() {
  Serial.begin(9600);
}

void loop() {
  int raw = analogRead(BATTERY_PIN);
  float voltage = (raw / 1023.0) * 5.0 * DIVIDER_RATIO;
  
  Serial.print("Battery voltage: ");
  Serial.print(voltage, 2);
  Serial.println("V");
  
  if (voltage > 8.5) Serial.println("Status: Full");
  else if (voltage > 7.0) Serial.println("Status: OK");
  else if (voltage > 6.0) Serial.println("Status: Low");
  else Serial.println("Status: Replace");
  
  delay(2000);
}

This gives you precise voltage readings over the serial monitor. You could combine this with LEDs on digital pins for a visual display — green, yellow, or red based on the measured voltage.

Design considerations

  • Add a push button. Without a button, the LEDs draw current from the battery continuously, slowly draining it. A momentary button ensures you only test when you press it.
  • LED forward voltage matters. Different colors have different forward voltages — red (~1.8V), yellow (~2.1V), green (~2.2V), blue (~3.3V). The circuit relies on these thresholds, so using the right colors helps differentiation.
  • Calibrate with a multimeter. After building, test batteries with known voltages (measured with a multimeter) and adjust resistor values until the LED transitions match your desired thresholds.

Troubleshooting

ProblemCauseFix
All LEDs always onResistor values too lowIncrease resistor values to spread out thresholds
Only red LED lightsResistors for green/yellow too highDecrease green and yellow resistor values
No LEDs lightBattery truly dead, or wiring errorTest battery with multimeter, check connections
Hard to tell difference between statesResistor values too close togetherSpace out values more (e.g., 220Ω, 680Ω, 2.2kΩ)

Summary

A battery tester circuit uses parallel LED branches with different resistor values to create a traffic-light charge indicator. Higher resistors require more voltage to light their LED, so they go dark first as the battery drains. Use a push button to avoid draining the battery under test. For precise readings, use an Arduino with a voltage divider on an analog input. This project teaches voltage thresholds, parallel circuits, and practical circuit design.