4-Channel NiMH/Li-Ion Battery Tester

Determine the capacity of your battery stash...useful for battery pack and powerwall construction.

Similar projects worth following
This is an extension and optimization of a 1-channel tester I found at

This tester will discharge any combination of up to four NiMH and Li-Ion cells into a dummy load to determine capacity.  Cell type is determined automatically upon connection.  A pushbutton rotates through the four channels, selecting the results to view.  The display is a 1" OLED; an Arduino Nano is soldered to the board.  The Arduino's USB connector is used for power input and reprogramming.

While the default configuration offers testing of NiMH and Li-Ion cells, the voltage range constants in the software can be adjusted to enable testing of LiFePO4 cells, lead-acid cells, or any other battery chemistry you might want to test.

This project is an evolution of the original design at  In addition to expanding from one channel to four, I also made these changes:

  1. The IRFZ44N is a far larger MOSFET than needed.  The AO3416 should be more than sufficient, with power dissipation in this application of only a few milliwatts.
  2. Replacing the 10Ω load resistors with 4.7Ω resistors provides a reasonable discharge current (around 200-250 mA) for NiMH, while not being excessively high for Li-Ion (closer to 700-800 mA).  Mount them with a gap between the board to improve cooling.  They will get hot to the touch when discharging Li-Ion cells; 800 mA into 4.7Ω works out to 3 W.
  3. The software was cleaned up a bit to better manage transitions between different states: idle (no battery), discharging, discharged, and error (voltage too low or high)
  4. The speaker beeps on startup, and beeps when a cell is discharged.  It plays a lower tone on error.
  5. SPI is used to communicate with the OLED, instead of I2C.  The particular display board Amazon sent me uses the SSD1306 controller, so that needed changing as well.

The software was imported into PlatformIO on VSCodium for enhancement.  If desired, you could rename software.cpp to software.ino, remove the Arduino.h #include, and build under the Arduino IDE.

  • Working pretty well, for the most part

    Scott Alfter07/10/2020 at 20:18 0 comments

    I've spent the past couple of days testing my stash of NiMH AAs.  It behaves pretty well if you load up cells with the tester off, then plug it in.  Sometimes it doesn't always start right if you add cells with the tester on; maybe I need to tweak the state management code a bit.  I have a bunch of cells that test around 90% or so of stated capacity, but there were others testing as low as 1/3 of capacity. :-|

    The load resistors only get a little warm with NiMH, but they definitely get hot with Li-ion cells.  At no more than 60% of rated wattage, though, they should be OK.  Also, the tiny MOSFETs are doing their job without issue.

  • The case is now printing

    Scott Alfter07/10/2020 at 17:45 0 comments

    I knocked this together in OpenSCAD fairly quickly.  It's now printing:

    It leaves the load resistors exposed for cooling.  Another approach might be to cover them up and add ventilation slots so that fans can blow over them, but  that would require tapping power from somewhere...probably the 5V pin on the Arduino.

View all 2 project logs

Enjoy this project?



Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates