[ Play Video ]
I have salvaged so many old lap-top batteries ( 18650 ) to reuse them in my solar projects.It is very difficult to identify the good cells in battery pack.Earlier in one of my Power Bank Instructable I have told, how to identify good cells by measuring their voltages, but this method is not at all reliable.So I really wanted a way to measure each cell exact capacity instead of their voltages.

Few week ago, I have started the project from the basics.This version is really simple one,which is based on Ohms Law.The accuracy of the tester won’t be 100% perfect, but it does give reasonable results that can be used and compared with other battery, so you can easily identify good cells in a old battery pack.

During my work I realised, their are lot of things which can be improved.In future I will try to implement those things. But for the time being I am happy with it.I hope this little tester will be useful, so I am sharing it with you all.

Note : Please dispose the bad batteries properly.

Disclaimer: Please note that you are working with Li Ion battery which is highly explosive and dangerous . I cannot be held responsible for any loss of property, damage, or loss of life if it comes to that. This tutorial was written for those who have knowledge on rechargeable lithium ion technology.Please do not attempt this if you are novice. Stay Safe.

Step 1: Parts and Tools Required :

Parts Required :

1. Arduino Nano (Gear Best )

2. 0.96" OLED Display ( Amazon )

3. MOSFET - IRLZ44 ( Amazon )

4.Resistors ( 4 x 10K , 1/4W ) ( Amazon )

5. Power Resistor ( 10R, 10W ) ( Amazon )

6. Screw Terminals ( 3 Nos) ( Amazon )

7.Buzzer ( Amazon )

8.Prototype Board ( Amazon )

9. 18650 Battery Holder ( Amazon )

10. 18650 Battery ( GearBest )

11. Spacers ( Amazon )

Tools Required :

1. Wire Cutter / Stripper ( Gear Best )

2.Soldering Iron ( Amazon )

Instrument Used :

IMAX Balance Charger ( Gearbest )

Infrared Thermometer Gun ( Amazon /Gearbest)

Step 2: Schematic and Working

Schematic :

To understand the schematic easily,I have drawn it on a perforated board also.The positions of the components and wiring are similar to my actual board.The only exception are the buzzer and OLED display. In the actual board they are inside but in the schematic they are lying outside.

The design is very simple which is based on Arduino Nano. An OLED display is used to display the battery parameters.3 screw terminals are used for connecting battery and the load resistance.A buzzer is used for giving different alerts.Two voltage dividers circuit are used to monitor the voltages across the load resistance.The function of the MOSFET is to connect or disconnect the load resistance with the battery.

Working :

Arduino check the battery condition, if the battery is good, gives command to switched ON the MOSFET. It allows current to pass from the positive terminal of the battery, through the resistor, and the MOSFET then completes the path back to the negative terminal. This discharges the battery over a period of time.Arduino measures voltage across the load resistor and then divided by the resistance to find out the discharge current. Multiplied this by the time to obtain the milli amp-hour ( capacity ) value.

Step 3: Voltage,Current and Capacity Measurement

Voltage Measurement

We have to find the voltage across the load resistor.The voltages are measured by using two voltage divider circuits.It consists of two resistors with values 10k each. The out put from the divider is connected to Arduino analog pin A0 and A1.

Arduino analog pin can measured voltage up to 5V, in our case the maximum voltage is 4.2V (fully charged) .Then you may ask, why I am using two divider unnecessarily.The reason is that,my future plan is to use the same tester for multi chemistry battery.So this design can be adapted easily to achieve my goal.

Current Measurement :

Current (I) = Voltage ( V ) - Voltage drop across the MOSFET / Resistance (R)

Note : I am assuming the voltage drop across the MOSFET is negligible.

Here , V = Voltage across the load resistor and R = 10 Ohm

The result obtained is in amperes.Multiply 1000 to convert it into milli amperes.

So maximum discharge current = 4.2 / 10 = 0.42A = 420mA

Capacity Measurement :

Stored Charge ( Q ) = Current ( I ) x Time (T ).

We have already calculated the current,the only unknown in the above equation is time.The millis() function in Arduino can be used to measured the elapsed time.

Step 4: Selecting ​Load Resistor

The selection of load resistor is depend on the amount of discharge current we need.Suppose you want to discharge the battery @ 500mA, then the resistor value is

Resistance ( R ) = Max Battery Voltage / Discharge Current = 4.2 /0.5 = 8.4 Ohm

The resistor needs to dissipate a bit of power, so size does matter in this case.

Heat dissipated = I^2 x R = 0.5^2 x 8.4 =2.1 Watt

By keeping some margin you can choose 5W. If you want to more safety use 10W.

I used 10 Ohm ,10W resistor instead of 8.4 Ohm because , it was in my stock that time.

Step 5: Selecting the MOSFET

Here MOSFET is act like a switch.The digital output from the Arduino pin D2 controls the switch. When 5V (HIGH) signal is fed to the gate of the MOSFET, it allows current to pass from the positive terminal of the battery, through the resistor, and the MOSFET then completes the path back to the negative terminal. This discharges the battery over a period of time.So the MOSFET should be chosen in such a way that it can handle maximum discharge current without overheating.

I used a n-channel logic level power MOSFET-IRLZ44. The L shows that is a logic level MOSFET. A logic level MOSFET means that it is designed to turn on fully from the logic level of a microcontroller. The standard MOSFET (IRF series etc) is designed to run from 10V.

If you use an IRF series MOSFET,then it will not fully turned ON by applying 5V from arduino. I mean the MOSFET will not carry the rated current.To tuned ON these MOSFETs you need an additional circuit to boost the gate voltage.

So I will recommend to use a logic level MOSFET, not necessarily IRLZ44.You can use any other MOSFET also.

Step 6: OLED Display

To display the Battery Voltage,discharge current and capacity, I used a 0.96" OLED display.It has 128x64 resolution and uses I2C bus to communicate with the Arduino. Two pins SCL (A5), SDA (A4) in Arduino Uno are used for communication.

I am using U8glib library to display the parameters.First you have to download the U8glib library .Then installed it.

If you want to get started in to OLED display and Arduino , click here

The connections should be as follows

Arduino --> OLED

5V --->Vcc


A4----> SDA

A5----> SCL

Step 7: Buzzer for Warning

To provide different warning or alert, a piezo buzzer is used.The different alerts are

1. Battery Low Voltage

2.Battery High Voltage

3. No Battery

The buzzer have two terminals, the longer one is positive and the shorter leg is negative.The sticker on the new buzzer have also " + " marked to to indicate the positive terminal.

The connections should be as follows

Arduino --> Buzzer

D9--> Positive terminal

GND--> Negative terminal

In the Arduino Sketch, I have used a separate function beep() which sends the PWM signal to the buzzer, waits for a small delay, then turns it off, then has another small delay. Thus, it beeps once.

Step 8: Making the Circuit

In the previous steps, I have explained the function of each of the components in the circuit. Before jump to make the final board, test the circuit on a bread board first.If the circuit works perfectly on the bread board,then move to solder the components on the protype board.

I used 7cm X 5cm prototype board.

Mounting the Nano : First cut two rows of female header pin with 15 pins in each.I used a diagonal nipper to cut the headers.Then solder the header pins.Be sure the distance between the two rails fits the arduino nano.

Mounting OLED Display : Cut a female header with 4pins. Then solder it as shown in picture.

Mounting the terminals and components : Solder the remaining components as shown in pictures

Wiring : Make the wiring as per schematic.I used colored wires to make the wiring, so that I can identify them easily.

Step 9: Mounting the Standoffs

After soldering and wiring,mount the standoffs at 4 corners.It will provide sufficient clearance to the soldering joints and wires from the ground.

Step 10: Software

The software doing the following tasks

1. Measure voltages

Taking 100 ADC samples , adding them and averaging the result.This is done to reduce the noise.

2. Check the battery condition to give alert or start the discharge cycle


i) Low-V! : If the battery voltage is below the lowest discharge level ( 2.9V for Li Ion )

ii) High-V! : If the battery voltage is above the fully charged condition

iii) No Battery! : If the battery holder is empty

Discharge Cycle

If the battery voltage is within the low voltage ( 2.9V )and high voltag (4.3V),discharge cycle start.Calculate the current and capacity as explained earlier.

3. Display the parameters on the OLED

4. Data logging on serial monitor

Download the Arduino Code attached below.

Step 11: Exporting Serial Data and Plotting on Excel Sheet

To test the circuit, first I charged a good Samsung 18650-26F battery using my IMAX Charger.Then put the battery in to my new tester.To analyse the entire discharge process,I export the serial data to a spread sheet.Then I plotted the discharge curve.The result is really awesome.I used a software named PLX-DAQ to do it. You can download it here.

You can go through this tutorial to learn how to use PLX-DAQ. It is very simple.

Note : It works only in Windows.

Step 12: Conclusion

After few testing I conclude that the tester result is quite reasonable.The result is 50 to 70mAh away from a branded battery capacity tester result.By using a IR temperature Gun, I measured the temperature rise in the load resistor also,the maximum value is 51 deg C.

In this design the discharge current is not constant, it depends on battery voltage.So the discharge curve plotted is not similar to the discharge curve given in the battery manufacture data sheet.It only support a single Li Ion Battery.

So in my future version I will try solve the above short comings in the V1.0.

Credit : I would like to give credit to Adam Welch, whose project on YouTube was inspired me to start this project.You can watch his YouTube video.

Please suggest any improvements.Raise a comments if any mistakes or errors.

Hope my tutorial is helpful.If you like it,don't forget to share :)

Subscribe for more DIY projects. Thank You.

I'm not able to find the code pls help
<p>Can you explain for 12V battery</p><p>what will be resistors values used in that case.</p>
<p>Hi,</p><p>I would like to use a rotary switch to select 400mAh, 1A and 1.5A. I need to change the Arduino code ?</p>
<p>Excellent Instructable. Thank you very much. I constructed mine and it's working perfectly. Just a word to those who may be following the pictorial diagram of the circuit - there seems to be a connection missing between the 10k resistors and ground.</p><p>As you'll see from the photo below, I attached a TP4056 Lithium Cell Charger Module to the 18650. This prevents the battery from discharging beyond its recommended voltage.</p>
<p>I have a job just like yours, but I stopped at the discharge, you found something?</p>
<p>Congrats !</p><p>You are right, I missed the ground connection in the bread board circuit.Thanks for pointing out the error.</p>
<p>hey man i could'nt find the sketch(code) for this project ?where can i get this pls rply soon..! thank you</p>
<p>Hi, can this circuit used also for measuring 12V VRLA Battery from 7ah - 200 ah ,Is it need modifying the circuit.Thanks</p>
<p>Nice work! Works perfectly... I just see an inconsistency from reported Vcc on the OLED vs that of my Multimeter.. need to work out why... Is there some calibration required?</p>
<p>Good idea ! We can bring any battery <a href="http://batteryrecover.com" rel="nofollow">back to life again</a> - really cool method. Thank you Deba168 !</p>
<p>Hi, Thanks for the great project I really enjoyed making it and it will come in very handy for testing all my old batteries, I have attached a photo of my made tester but as you can see there is quite a big difference between the battery voltage and the voltage the arduino is seeing, Im not using the exact mosfet you have listed im using IRLB3034 (have ordered one and just waiting for it to arrive) I was just wondering if there were any other options I could change to get the correct readings. Thanks</p>
Hey dude can i get d skecth n pin diagram ok ardiuno mini.. <br>Rply soon
<p>Sorry but im not using this one anymore, it wasnt accurate enough for me</p>
<p>All the info is in the above project description.....make sure you click &quot;see all steps&quot;</p>
Hey man can i get d skecth...
<p>hi, can this work on other rechargable types of batteries? like Nimh, or nicd? i am thinking that it would need more settings for the high low voltage.</p><p>great instructable, will be building it soon.</p>
<p>Yes it can be modified to work with other battery chemistry.</p>
Mr Deba, i got a question on tis board build ... how to actually read the capacity? &quot;My case: i charge up my battery, did the voltage test and its at 4.16v then i put it in the this board, it sound up at 3.44v with 669mAh&quot;
Thank you! This is really useful
Congratulations!<br>Thanks for sharing the pictures.
<p>No problem! :)<br>I've uploaded a video on my YouTube channel talking about the project. Here's the link:</p><p>https://www.youtube.com/watch?v=wcJTMKbTVf4</p><p>Please correct me if I've messed anything up :D</p><p>Thanks again! :) </p>
One thing I'm finding is once the battery reaches the low voltage point and is discharged, the program does not stop. When the cell voltage recovers, the program will reconnect the load resistor and continue to recycle. If left unattended, it may damage the battery. I would like to see the program disconnect the load and stop.
<p>Hello! Mr. DeBa, this is a good project! I made a discharger with a Nokia 5110 display. I'm just starting to learn Arduino! Can you help with a sketch for nokia 5110? Thank you</p>
Thank you deba! :)
Answered my own question. Moserial for Ubuntu works very well to log data from Arduino.
<p>Is there a way to save the serial data into a file with Ubuntu?</p>
<p>Hi,do you have a design that can only tell the status of the battery....either bad or good.....my battery is 7.2V....so I want to buy a jigs that can measure my battery is GOOD or BAD. </p>
<p>I'm ready to make one. Will be using a Arduino Uno Relay board I designed. Slight mod to the program will be required. With a relay instead of a mosfet, this completely disconnects the battery after discharge. I can even eliminate A1 adc channel, If I can understand how the program works. This will be a fun project.</p>
<p>I like it. Will probably make it soon. I have some 14500 lithiums to test. Are you working on V 2.0 yet?</p>
Glad you like it.<br>Yeah I am working.
<p>Update for my Update: I made it, and got all the bugs worked out on a <br>breadboard. Holey Cow I need more help, or more experience reading electrical<br> schematics, you talk about frustrating, I guess this is something I <br>need to work harder on. All is well now, it works and now just need to <br>transfer the hole thing to a perfboard. P.S. I wish that when there is a<br> mistake or update to the original drawing or code that the original <br>poster would redo the the code or schematics completely and remove the non working ones, so that people like myself don't get confused and maybe abandon the project all together. I know I'm a complete beginner, but if I give up before I get started I'll never learn anything. I love the project and had fun building it now that it's all said and done, Thanks</p>
<p> UPDATE, Used different Oled and it is working. Reads high V, and No Battery, I would think if it is reading high V that it would start capacity test but just keeps beeping?</p>
<p>Sorry my query below relates to your PCB board &amp; block components wiring diagram immediately above the FRITZING Circuit diagram - not to the actual line circuit diagram? Sorry for any confusion. Cheers</p>
<p>Hi, great project - in your Fritzing diagram towards the left hand side of the lower left 10K ohm resistor (two PCB spaces further to the left from this resistor) is a small green horizontal cable spanning two PCB holes which is not shown connected to anything - what is this actually connected to in your diagram or is it just an artifact and is really not meant to be connected to anything?? I can't relate this &quot;small cable&quot; to any connection in your circuit diagram either? Please advise.</p><p>Cheers. </p>
thx mr deba for the guide
<p>Hi, </p><p>Hope Your having a great time building all the utility stuff!! Happy for the projects you build and share out here, so thanks a lot for sharing the sources with us. <br><br>Basically i just want to know that how accurate is this tester? as in terms of build this is very very simple and less complex i almost made the PCB for the same . but here i have another link where there is similar tester made but with a computer software and yes the important thing is that you say we have to change the RL load according to the battery mAh requirements but in the other battery tester like in the link ( <a href="http://www.vwlowen.co.uk/arduino/battery-tester/battery-tester.htm" rel="nofollow"> http://www.vwlowen.co.uk/arduino/battery-tester/b...</a> ) he just made the value setable through the software or through the 10K multi-Turn Knob.. so which one is better ? <br><br>i hope i was clear in my question i wanted to ask ... ! <br>Cheers<br>happy Building <br>Parth Yatin Temkar <br>PYT</p>
<p>Hi,</p><p>In the link you have attached, he is not doing the thing only by software,rather using separate hardware also to get constant current.The result in this case is reliable.So you can go for it.For reference you can watch this video.</p><p><iframe allowfullscreen="" frameborder="0" height="281" src="//www.youtube.com/embed/8xX2SVcItOA" width="500"></iframe></p>
<p>Thanks a lot :)</p>
<p>Thanks for this vid Deba 168 . Simple real projects that work can be made for 1/10 of the cost and will be with you forever. </p>
Glad you like my work.Thanks !
<p>PT-BR - Eu fiz modifica&ccedil;&otilde;es para uso futuro com 3 bot&otilde;es e um medidor de corrente ACS712-5A que n&atilde;o aparecem na imagem pois esta embaixo da placa pois &eacute; SMD al&eacute;m do mosfet que usei de sucata de motherboard e n&atilde;o aparece pois tamb&eacute;m ficou embaixo. Acredito que dever&iacute;amos usar um controle de carga para carga constante para fazer compara&ccedil;&otilde;es com que o fabricante apresenta ex.: ...@500mA....</p><p>EN - I made changes for future use with 3 buttons and a ACS712-5A current meter that does not appear in the image as this under the card as it is SMD beyond the mosfet I used motherboard scrap and will not appear it was also below. I think we should use a load control for constant load to make comparisons with the manufacturer presents ex .: ...discharge continuos @ 500mA ....</p>
<p>Hello- I have a quick question.</p><p>I am trying to make this battery tester with 2x(1.5V AA battery), then what will the code change into? And will the 'power resistor' be necessary? Thanks</p>
<p>Hi, nice instructable. I tried to compile involvement, but someone makes a mistake. My OLED display shows only High-V! or No Baterry! when is baterry out of holder. There is no report Volt:, Curr:, mAh: Which is probably a mistake</p>
<p>If you followed the pictorial diagram of the circuit, you might need to add a connection between the 10k resistors and ground. (The green wire that connects the end of the resistors - this should connect to ground.)</p>
<p>Good instructable! Could I use it to measure the voltage and the current generated by a solar panel rated 5V - 6W. Should I use different load or MOSFET? At the moment I only have a IRF520 from Arduino starter kit. Thank you in advance</p>
<p>Great instructable! Is it also possible to test NiMH batteries? Do you have an idea about the applicable high voltage and cut off voltage levels?</p>
<p>For NiMh battery the fully charged voltage is 1.5V and discharged voltage 0.9V.</p><p>So you can set the high voltage at 1.6V and cut off at 0.9V</p>
<p>Great Instructable, very detailed. I was designing one similar when yours was showcased, but for charging instead of discharging. I've added an instrumentation amplifier so the voltage drop over the Rsense would be negligible for the charge, but enough to be read from the amp, thus avoiding the large power resistor. On this schem, I've changed Rsense place to the regulator output, so the lithium charging curve could be better seen. Its correct connection would be the LDO input, to avoid long charge time. Here a 10mOhm resistor in series with a 2kF capacitor simulate a cell on constant current.</p><p>Moreover, your instructable gave me some insights on circuit measurements and data logging, so thanks :D </p><p>Can I reference your work when I write my instructable?</p><p>Pics of my final assembly will be posted when I finish soldering.</p>
Glad you like my ible.<br>Your design is also very good.<br>I am waiting to see the final Instructables and pictures :)
<p>Yeah, finished my ible just now</p><p><a href="https://www.instructables.com/id/Lithium-Cell-Capacity-Tester/" rel="nofollow">https://www.instructables.com/id/Lithium-Cell-Capac...</a></p><p>I've cited your on the references and thanks page :D</p>

About This Instructable




Bio: I am an Electrical Engineer.I love to harvest Solar Energy and make things by recycling old stuffs. I believe &quot;&quot;IF YOU TRY YOU MIGHT ... More »
More by deba168:Solar Powered WiFi Weather Station  3 Useful Things From an Old Laptop DIY Mobile Boombox 
Add instructable to: