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
| Component | Quantity | Notes |
|---|---|---|
| Green LED (5mm) | 1 | Indicates full charge |
| Yellow LED (5mm) | 1 | Indicates medium charge |
| Red LED (5mm) | 1 | Indicates low charge (always on if any charge remains) |
| 1 kΩ resistor | 1 | For green LED (highest threshold) |
| 470Ω resistor | 1 | For yellow LED (medium threshold) |
| 220Ω resistor | 1 | For red LED (lowest threshold) |
| Momentary push button | 1 | Optional — prevents continuous battery drain |
| Battery clip or holder | 1 | Match to battery type (9V snap, AA holder, etc.) |
| Breadboard + jumper wires | 1 set | For 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 state | Green | Yellow | Red |
|---|---|---|---|
| Full / good | On (bright) | On | On |
| Getting low | Off or dim | On | On |
| Low / replace soon | Off | Off or dim | On |
| Dead | Off | Off | Off |
Building the circuit (9V battery version)
- 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.
- 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.
- Yellow branch: Same pattern with the 470Ω resistor and yellow LED.
- Red branch: Same pattern with the 220Ω resistor and red LED.
- Connect the battery's negative terminal to the breadboard's ground rail.
- 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.
| Battery | Full voltage | Low voltage | Dead voltage |
|---|---|---|---|
| 9V alkaline | ~9.5V | ~7.5V | below 6V |
| AA/AAA alkaline (1.5V) | ~1.6V | ~1.2V | below 0.9V |
| AA NiMH (1.2V) | ~1.4V | ~1.15V | below 1.0V |
| Li-ion 18650 (3.7V) | ~4.2V | ~3.5V | below 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
| Problem | Cause | Fix |
|---|---|---|
| All LEDs always on | Resistor values too low | Increase resistor values to spread out thresholds |
| Only red LED lights | Resistors for green/yellow too high | Decrease green and yellow resistor values |
| No LEDs light | Battery truly dead, or wiring error | Test battery with multimeter, check connections |
| Hard to tell difference between states | Resistor values too close together | Space 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.