There are a lot of fuel gauges and battery chargers available for 3.7V lithium batteries, but when it comes to lower 1.5-1.2V batteries, there are very limited circuits and dedicated ICs. I came across using alkaline batteries somehow which is a small battery-powered project. And I wonder about the battery a lot; this may be clear to you if you see my page. I want to estimate the battery life, but how is it possible with these non-rechargeable batteries? Is there any technique to measure the State of Charge (SoC)? Unlike Li-ion batteries, alkaline batteries have a pretty flat voltage curve that depends on the load. Cell-to-cell variations are also a major drawback in these small batteries. The best possible and simplest one is estimation through voltage. And certainly, we're gonna use this approach, but in combination with a load. I will let you know the details. I’ll walk through a practical SoC estimation method that works well on low-cost microcontrollers without using a dedicated fuel-gauge IC.

The two-step SOC measurement approach:

● Voltage-based SoC (for long-term reference)

● ΔI (current difference) under two loads (for accuracy)

This approach is very low-cost and easy to implement. And suitable for all kinds of 1.5V alkaline batteries. But as we know, the cell-to-cell chemistry is not in our hands, so there may be an accuracy of 90-92% only.

Typical Error in Measurement with differnt methods:

  • Voltage only: ±20–30>#/span###
  • ΔI only: ±5–8>#/span###
  • Voltage + ΔI: ±3–6>#/span###

The two-step voltage SOC verification is required because fresh alkaline cells can read anywhere from 1.55–1.65 V. Mid-life cells still sit around 1.3–1.4 V. Under load, voltage droops heavily and recovers slowly. Temperature and internal resistance dominate the reading. With only voltage measurement, we can reach up to an accuracy of ±70–80%. So, we need more information than measuring voltage alone.

mini_IMG_0033.jpg

That is where a ΔI measurement comes into the picture; instead of directly computing internal resistance, we can observe how current collapses under different loads. I also tried the internal resistance method, but it needs very huge setup, which most hobbyists do not want to purchase. And with DC measurement, I certainly reach a saturation level where the internal resistance stops responding to measurements.

mini_IMG_0032.jpg

The idea is to use two known load resistors, Load 1 with 22 Ω and Load 2 with 9.7 Ω (2*4.7 Ω + offset. The values are not random, but at full swing, change should produce ΔI = I{9.7} - I{22} greater than 80 mA for better resolution over the range. What happens at the cell level is:

● Fresh battery → high current difference

● Weak battery → currents converge → ΔI collapses

Problem with this setup + Scope of improvement:

Because in the last step we are mapping values to a real datasheet, there might be some changes due to slope errors, which you can correct with proper calibration. The second error chance in the ΔI measurement is because, as the cell voltage decreases, the current through both resistors changes, and that change should be compensated or linearized based on the chemistry of the battery. That’s how I have implemented the indirect internal resistance in the code.

A better approach can be used with the use of a constant current load, but it comes with additional BOM and cost. However, it will make the measurements too easy. I will share one example in the end. This will drive the MOSFET into the saturation region, so when two constant currents flow, it will compute the voltage drop.

Components Required:

mini_IMG_0025.jpg

  • P-channel MOSFET
  • Arduino Nano
  • 2* 1.5V battery (one discharged to 50%)
  • 9.7 Ω and 22 Ω resistors
  • Power source

Circuit Diagram:

Screenshot_2026_01_25-15.png

Here is the circuit diagram. Just with 4 components, you can build this circuit. Now all the computations are done with the help of the MCU. Q1 is turned on in the linear...

Read more »