DIY Li-ion Capacity Tester !





Introduction: DIY Li-ion Capacity Tester !

About: Hi, I'm Nemeen, Electronics Enthusiast! I have seen a huge decline in electronics hobbyist in past few years. I started this channel in order to inspire you to create. Hopefully, you will find something tha...

When it comes to building the battery packs, Li-ion cells are one of the best choices without the doubt. But if you get them from old laptop batteries then you might want to do a capacity test before building the battery pack.

So today I will show you how to make a Li-ion capacity tester using an Arduino.

So let's get Started!

Step 1: Watch the Video !

If you don't want to read all the stuff you can watch my video!

Step 2: Everything We Need

Step 3: What Is Capacity !

Before building the capacity tester we must know what is capacity. Unit for capacity is mAh or Ah. If you take a look at any Li-ion cell they will mention its capacity on it as one shown mentions 2600 mAh on it. Basically what this means is that, if we connect a load across it which draws 2.6A then this battery would last for an hour. Similarly, if I have a 1000 mAh battery and load draws 2A then it would last for 30 min, And this is what an Ah or mAh means.

Step 4: Practically Not Possible

But calculating in this way is practically not possible because we all know V=IR. Initially, our battery voltage will be 4.2V if we keep the resistance constant there will be some current flowing through the load. But over the time battery voltage will decrease and so does our current. This will make our calculations much difficult than expected because we will need to measure the current and the time for every instance.

Now to perform all calculations it is not practically possible so here we will use an Arduino which will measure the current time and the voltage, process the information and in the end give us the capacity.

Step 5: Schematic, Code & Gerber Files


I had an SPI OLED lying around so converted it to I2C and used it. If you want to learn how to convert SPI to OLED look at my previous tutorial -

Here is the link to my Project if you want to make changes to PCB and Schematic

Step 6: Working !

And here is how this circuit works, first Arduino measures the voltage drop created by the 10 ohm resistor if it is higher than 4.3v then it will turn off the MOSFET display high voltage, if it is less than 2.9v it will display low voltage and turn off MOSFET and if it is between 4.3v and 2.9v it will turn on the MOSFET and the battery will start discharging through the resistor and measure the current using ohms law. And it also uses the millis function to measure the time and product of current and time gives us the capacity.

Step 7: Soldering !

Then I started the soldering process on the PCBs which I ordered online. I recommend using Female headers as if you want to remove OLED or Arduino for another project later on.

After the soldering when I connect the power sometimes it does not work as expected. Maybe because I forgot to add Pull Up resistors at I2C BUS interface so went back to the code and used Arduinos Built-in Pull Up resistors. After which it works perfectly

Step 8: Thank You !

It works! If you like my work

Feel free to check out my YouTube channel for more awesome stuff:

You can also follow me on Facebook, Twitter etc for upcoming projects

Check out JLCPCB
$2 PCB Prototype (10pcs,10*10cm):



  • Oil Contest

    Oil Contest
  • Water Contest

    Water Contest
  • Creative Misuse Contest

    Creative Misuse Contest

20 Discussions

To what voltage and current does it work? Or was it only intended for single cells? I ride e-bikes and my present one is 36 volt at 10 amps....

Great project though, many thanks,


2 more answers

It works with one cell at time. The currents depends on the resistor load you choose.

Many thanks,

I wanted to not have to take the battery apart, I already have a cell tester, it takes too long to test each cell and rebuild the battery...

Many thanks for your time



Question 11 days ago

Hi. This is a cool project and i want to build it. But i haven't a 10 ohm resistor. Can i use a 3 ohm resistor when i change the variable Res_Value in the ino file? Greets.

3 more answers

A 3 ohm resistor would let more current passing through it. It would result in a faster discharge and a hot resistor. Assure that it is anyways at least 5watts and change the resistor value in the code.

That will let too much current flow through the resistor and damage it, may also damage your battery if it can't handle the current 4.2/3 = 1.4Amps

yes it will work, just make sure you are using right wattage resistor

The code file it's in this istructable!

How you can measure the current using ohms law? If you turn on the mos Q1 hou have a very lov voltage on measure point. V=IxR where R is RDS(on) of mos around 17mOhm.


Question 12 days ago

I've got a lot of old cells lying here and there, this is why I find this tool pretty usefull. The instructable is quite complete as well. Did you test without the 2nd resistor bridge ? I mean the Mosfet impedance is quasi null and measuring between two 10k cannot give a precise result even with precision resistors which isn't the case here. I will make this tester, maybe with a heatsink on the resistor, and an integration of the measures during a given time. Thanks again for this inspiring work.

2 more answers

2nd bridge is not mandatory you can remove it

Do you really need those voltage dividers? The Lion cells are up to 4.2V and Arduino measures 5V max - so just measure with one Analog input the + of the cell.

I actually did that in the pas but I found that the MOSFET you used is not very good in switching and I had to use another smaller one to switch it at full.

I got pretty good results and mine batterymeter as I call it actually,had to measure 4 cells at a time - however using some of the mosfets to trigger the 44 one happen to be burned in the making so as a result only 3 was working.

The time factor is in the count here :

If using big resistance you will measure for many hours - so waiting a lot like 10 hours or so, if you use small like 3 Ohms or 1 Ohm the resistance has to be very powerful and the cell has to be able to make that Ampers to be able to measure.

However I was thinking of making Instructable for that because it is hard to buy such device - there are some chargers that has discharging and capacitance measure but are expensive like a lot.

So nice instructable and 10x for sharing.

PS: Perhaps you are using the voltage devider on the mosfet to measure that problem with the not fully switched transistor - I was not thinking this way.

I simply load any cell to test by using a dmm on the 10a setting. good AA or 18650 will read say 2.7a.

About 25 years ago I was involved in competitive 1/10 scale RC dirt oval racing and I developed A PC based system for creating packs of ni-cads where the 6 or 7 cells were matched based on runtime under a constant current load. There are specification sheets you can get on how the factory tests individual cells. A quick check for a 2600 mah lion shows they test with .52A load. The idea when building high performance packs is to have cells that can all discharge at the same rate and duration. Damage to individual cells occurs when they discharge early and the remaining cells then basically expend energy beating the weak cell up. Your project caught my eye and I naturally found it quite interesting. I have not messed with packs much since then and am not familiar with lion but the same principles should apply. Sub-c ni-cads were rated to be tested at 5A so that naturally created heat on the .1 ohm load resistors. We eventually ended up testing at 30A constant load to better match what the packs endured in a 4 minute race. When our packs were discharged it was almost like a switch turning off. Great project, just wanted to share past experience with cell testing and creating matched packs.

It's like you're reading my mind! I just built my first 21700 lithium cell small pack today, testing the cells for the eventual 4kwh pack for my electric scooter here in Thailand. What I really want is something close to this, a bottom-balancing board that will take multiple cells in the pack down to 2.9V. I had in mind all of your major components, this gives me a great headstart on the final design. Thanks!

R5 should be shown as 8 Ohm for your suggested part or 10 Ohm not 10E ?

I don't want to register anywhere so how much is your PCB ?

1 reply

Good-looking and simple desing. Good job mate!

1 reply