Knowing your battery’s state of health isn’t just about checking voltage and capacity — Battery Internal Impedance (or internal resistance) is one of the best indicators of how healthy (or worn out) a battery is. If you’re serious about battery packs, DIY solar, UPS, electric vehicles, or just extending your gadgets’ lifespan, you must understand battery impedance.

Working with electricity involves serious risk. Ensure you have the necessary skills and take proper safety precautions before attempting any electrical projects. Proceed at your own risk — the author assumes no responsibility for any damage, injury, or issues resulting from the use or misuse of the information provided.

Advertisements

All content on this website is original and protected by copyright. Please do not copy or reproduce content without permission. While most of the resources shared here are open-source and freely accessible for your learning and benefit, your respect for our intellectual effort is appreciated.

If you find our tutorials helpful, consider supporting us by purchasing related materials or sharing our work — it helps keep the content flowing.

Need help or have questions? Leave a comment below — the author is always happy to assist!

In this practical, beginner-friendly guide, you’ll learn:

  • What battery impedance is & why it matters
  • A simple DIY circuit you can build at home
  • Arduino or ESP32 code to measure it
  • Real-world testing tips
  • What to do with the results

📘 What is Battery Impedance?

Battery Internal Impedance

A battery’s internal impedance is the resistance it offers to the flow of current inside the cell. As batteries age, chemical changes increase this resistance.

Higher impedance = higher voltage drop under load = less usable energy.

Checking impedance is a reliable way to:
✅ Estimate capacity loss
✅ Detect failing cells
✅ Match cells for packs
✅ Diagnose heating issues


⚡️ How Do You Measure It?

Professionals use high-end battery analyzers (like Hioki, Keysight, etc.) that inject a small AC current and measure phase shift. But for DIY, you can use a simple DC load step:

Ohm’s Law:\

R = ΔV / ΔI

  • Apply a small load.
  • Measure voltage drop.
  • Calculate the change in current.
  • Divide to get resistance.

🧰 Parts You’ll Need

  • Arduino UNO or ESP32
  • Known load resistor (e.g., 1Ω 5W or 10W)
  • N-channel MOSFET (e.g., IRF540N)
  • Gate resistor (220–470Ω)
  • Flyback diode (1N5408 or similar for protection)
  • Voltage divider resistors
  • Breadboard & jumper wires
  • Digital multimeter (for calibration)

🔌 How It Works

1️⃣ Measure battery open-circuit voltage (V1)
2️⃣ Switch on the load for a short time (e.g., 1 second)
3️⃣ Measure loaded voltage (V2)
4️⃣ Know your load resistor value (R_Load)
5️⃣ Calculate:

  • I_Load = V2 / R_Load
  • R_Internal = (V1 – V2) / I_Load

⚙️ Simple Circuit Diagram

Main blocks:

  • The battery under test connects to the MOSFET + load resistor.
  • Arduino GPIO drives the MOSFET gate.
  • Arduino analog inputs read voltages before and during load.
[BATTERY +] ---+-----[MOSFET DRAIN]----+----[LOAD RESISTOR]----[BATTERY -]
               |                       |
            [Voltage Divider]       [MOSFET SOURCE to GND]
               |
            [A0] Arduino

Gate: Arduino D2 → 220Ω → Gate

⚡️ Voltage Divider

Most batteries are above 5V. You need a voltage divider.

Example for 12V battery:\

  • R1 = 10kΩ\
  • R2 = 3.3kΩ

This scales 12V down to about 3V — safe for Arduino’s ADC.


🧮 How the MOSFET Works

  • Gate LOW → MOSFET OFF → Open circuit.
  • Gate HIGH → MOSFET ON → Load resistor connected.

🔢 Full Arduino Code Example

Below is a clean, easy-to-read sketch that switches the load, reads voltages, and calculates impedance:

const int mosfetGatePin = 2;
const int voltagePin = A0;

const float R1 = 10000.0; // Top resistor
const float R2 = 3300.0;  // Bottom resistor
const float R_Load = 1.0; // 1 Ohm resistor

void setup() {
  Serial.begin(9600);
  pinMode(mosfetGatePin, OUTPUT);
  digitalWrite(mosfetGatePin, LOW);
}

float readBatteryVoltage() {
  int adcValue = analogRead(voltagePin);
  float v = adcValue * (5.0 / 1023.0);
  float actualV = v * ((R1 + R2) / R2);
  return actualV;
}

void loop() {
  Serial.println("Measuring open circuit voltage...");
  float V1 = readBatteryVoltage();
  Serial.print("Open Circuit Voltage: ");
  Serial.print(V1);
  Serial.println(" V");

  delay(500);

  Serial.println("Applying load...");
  digitalWrite(mosfetGatePin, HIGH);
  delay(1000); // 1 second load
  float V2 = readBatteryVoltage();
  digitalWrite(mosfetGatePin, LOW);

  Serial.print("Loaded Voltage: ");
  Serial.print(V2);
  Serial.println(" V");

  float I_Load = V2 / R_Load;
  float R_Internal = (V1 - V2) / I_Load;

  Serial.print("Load Current: ");
  Serial.print(I_Load);
  Serial.println(" A");

  Serial.print("Internal Resistance: ");
  Serial.print(R_Internal * 1000.0);
  Serial.println(" mOhms");

  Serial.println("---------------------------");

  delay(5000); // Wait before next test
}

📌 Tips for Accuracy

✅ Use a precision resistor for your load.
✅ Use short, thick wires to minimize extra resistance.
✅ Run multiple tests and average the results.
✅ Keep the load duration short to avoid heating the cell.
✅ Calibrate your voltage divider with a multimeter.


🗒️ What’s a Good Value of Battery Internal Impedance?

  • Healthy new Li-ion: 30–80 mOhm
  • Old Li-ion: 150+ mOhm
  • SLA (lead-acid): few mOhms for large batteries
  • NiMH AA: ~100–200 mOhm

As a battery ages, internal resistance rises → it drops voltage faster under load → more heat, less power.


📚 Advanced: Add an OLED Display

Want to see the impedance live on a tiny screen?

Add an SSD1306 I2C OLED, wire SDA/SCL to Arduino A4/A5 or ESP32 default I2C pins.

Use this in your loop:

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

Adafruit_SSD1306 display(128, 64, &Wire, -1);

void setup() {
  ...
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.clearDisplay();
}

void loop() {
  ...
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.print("V1: "); display.print(V1,2);
  display.setCursor(0,10);
  display.print("V2: "); display.print(V2,2);
  display.setCursor(0,20);
  display.print("I: "); display.print(I_Load,2);
  display.setCursor(0,30);
  display.print("R_int: "); display.print(R_Internal*1000,1);
  display.print(" mOhm");
  display.display();
}

🔒 Safety Tips

  • Never short your battery.
  • Start with small loads.
  • Use a fuse for large batteries.
  • Don’t test damaged or swollen Li-ion packs.
  • Never leave the circuit unattended.

🔋 DIY vs Professional Meters

This simple DC load-step method is practical for hobby checks, but for very accurate results, pros use AC impedance spectroscopy. That said, your DIY method is more than enough for comparing healthy vs. worn-out packs!


🚀 Ideas to Expand

✅ Build a dedicated PCB tester
✅ Add Bluetooth to log data to your phone
✅ Test multiple cells automatically
✅ Combine with a capacity tester
✅ Store results to SD card


🎓 What You’ve Learned

👉 How battery impedance works
👉 How to build a simple load test circuit
👉 How to write Arduino code to measure ΔV, I_Load
👉 How to calculate internal resistance
👉 How to make sense of the numbers


Practical Use Cases

  • Spot weak cells in a pack BEFORE they fail.
  • Match cells when building custom battery packs.
  • Test used laptop cells for DIY power banks.
  • Check your car or UPS batteries yearly.

Read more:

🔑 Conclusion

Checking battery impedance is one of the most overlooked skills for DIYers — but it’s easy, fun, and gives you real insights into whether your cells are safe and effective.

Build this project today.
✅ Stay safe.
✅ Keep your batteries healthy!

If you’d like, I can also create a schematic PDF, PCB Gerber, or KiCAD file for this tester. Just say the word and I’ll prepare it for you! ⚡🔋✨

Liked this article? Subscribe to our newsletter:

Loading

or,

Visit LabProjectsBD.com for more inspiring projects and tutorials.

Thank you!


MKDas

Mithun K. Das. B.Sc. in Electrical and Electronic Engineering (EEE) from KUET. Senior Embedded Systems Designer at a leading international company. Welcome to my personal blog! I share articles on various electronics topics, breaking them down into simple and easy-to-understand explanations, especially for beginners. My goal is to make learning electronics accessible and enjoyable for everyone. If you have any questions or need further assistance, feel free to reach out through the Contact Us page. Thank you for visiting, and happy learning!

0 Comments

Leave a Reply

Avatar placeholder

Your email address will not be published. Required fields are marked *