3 X 18650 Battery Capacity Tester

Introduction: 3 X 18650 Battery Capacity Tester

There are many instructions how to build arduino based capacity testers over the internet. The thing is, that it's rather a long process to test battery capacity. Let's say you want to discharge 2000mAh battery with ~0.5A current. It will take forever (precisely: 4 hours). I've tried to find much faster way to indicate many cells capacity. Increasing discharge current isn't a safe thing, especially when your load is simple resistor. Lower resistance = higher load = more power (heat) to be dissipated.

Basically we are discharging cells in order to achieve two different goals:

  • capacity indication
  • discharging to ~40% of total capacity, to provide safe torage for cells being unused for rather long time

To fulfill above mentioned, I decided to create multiple cells discharge station. There are two modes and simple menu, able to be handled by just one button. Additional feature is internal resistance (Rw) calculation.

I'm not an expert in this matter, so you are doing everything AT YOUR OWN RISK. Suggestions and feedback are welcomed.

Inspiration and basics comes from two projects that I've found:

https://www.instructables.com/id/DIY-Arduino-Batte...

https://arduinowpraktyce.blogspot.com/2018/02/test...

Step 1: BOM

We gonna need:

  • 1x Arduino Nano
  • 3x IRLZ44N Mosfet
  • 1x 3 battery holder
  • 3x Cement resistor - e.g. 10R 10W - read about this in the next section
  • 3x 5mm red LED
  • Push button
  • LCD - in this project I utilized 16x2 i2c LCD
  • 1x 10k resistor
  • 9x 4k7 resistor
  • 3x 1k resistor
  • 1x 100R resistor
  • 1x Screw terminal for power supply connection (7-12V) - optional if you want to power up the device with arduino mini USB
  • 1x 4 goldpin female header, 2.54
  • 1x 15 Goldpin female header, 2.54mm (optional - if you want to go modular)
  • 1x Buzzer (optional)

Step 2: Schematic and the Principle of Operation

The brain of my project is arduino nano. Arduino controlls 3 mosfet, which are used to open / close 3 battery circuits with corresponding loads. We are measuring (using 3 voltage dividors) voltage of those circuts to determine the current flowiong through the power resistors - using an Ohm law.

I = V / R

Voltage drop across the power resistors is almost equal the voltage measured at the battery terminals (assuming quality solder joints and good wires), therefore there is no need to measure voltage before and after the resistors. Voltage dividors are used to prevent tested cells from powering up our device.

Knowing the voltage and current over the discharging time, we are able to calculate cell capacity.

Step 3: Power Resistors Selection

Resistor value depends on discharge current that we want to achieve. Assuming max 0.5A current, resistor value should be:

R = V (max cell voltage) / I (discharge current) = 4.2V / 0.5 = 8.4 Ohm

Using 10R resistor, you will get:

I = V / R = 4.2V / 10 ohm = 0.42A

The lover resistor value, the higher current.

IMPORTANT!! There are a lot of power to be dissipated, therefore resistor will get hot. We can determine minimum resistor power accordingly:

Min Power = I^2 * R = 0.42^2 * 10 = 1.76W

I'm using 3R3 17W resistors, however my advise is to use 10R (10W or so) - it will handle the power flowlessly and its temperature will remain safe.

Step 4: Arduino Code

You need to adjust following parameters according to your measured values:

R1, R2, R3 - power resistors values [ohm]

RB1, RB2, RB3 - B1-B3 circuit resistance. R1+0.1 is close enough [Ohm]

X1, X2, X3 - voltage dividers ratio. If you don't wanna measure it really precisely, you can enter just 2

interval - measurement Interwal (ms) - default 5000 ms

voltRef - Reference voltage measured between arduino pin 5V and GND - default 5.03

Step 5: PCB

Ready for ordering / etching :)

Step 6: Menu

Short press (with ~1s interval between next click) - change value

Long press - confirm

First level of the menu: mode selection (capacity test or simple discharge to preset voltage)

Second level of the menu: minimum voltage selection, where the end of measurement occurs.

When the measurement of any particular cell is done, final screen is displayed, where you can find the battery capacity and internal resistance (Rw).

First Time Author

Participated in the
First Time Author

Be the First to Share

    Recommendations

    • "Can't Touch This" Family Contest

      "Can't Touch This" Family Contest
    • CNC Contest 2020

      CNC Contest 2020
    • Robots Contest

      Robots Contest

    17 Discussions

    0
    JonC163
    JonC163

    4 weeks ago

    These capacity testers work great!!! Look no further ... I have 20 of them running 24/7

    thanks @zygfryd1991

    0
    robertkazmierski40
    robertkazmierski40

    Question 7 months ago on Step 5

    Witam
    Wykonałem tester i zastanawia mnie jaki powinien być prąd rozładowania u mnie jest na poziomie 0,16-0,25 mA .Mam wrażenie że jest to za mało użyłem innych rezystorów po prostu takie miałem zmieniłem kod jak poniżej przy takich parametrach test trwał ponad 20 h i jeszcze się nie zakończył .Proszę powiedz czy to normalne ? Robert
    float R1 = 20; // Resistor R1 value [Ohm]
    float RB1 = 20.1; // Measured B1 circuit resistance [Ohm]
    float R2 = 15; // Resistor R1 value [Ohm]
    float RB2 = 15.1; // Measured B2 circuit resistance [Ohm]
    float R3 = 10; // Resistor R1 value [Ohm]
    float RB3 = 10.1; // Measured B3 circuit resistance [Ohm]

    0
    zygfryd1991
    zygfryd1991

    Answer 7 months ago

    Cześć. W przypadku rezystora 20 ohm i ogniwa 18650 prąd powinien być na poziomie 200 mA, więc zakładając rozładowanie porządnego ogniwa 3000mAh zajmie to 15 godzin. Osobiście rozładowuję prądem ok. 1A i cała operacja zamyka się w 2-3 godzinach.

    0
    AvonWolf
    AvonWolf

    8 months ago

    Cool project. Would this work with 8.5V battery packs? Or do I need to change some resistors and so on?

    0
    zygfryd1991
    zygfryd1991

    Reply 8 months ago

    Sure, it would, but you need to modify the code and recalculate resistors

    0
    AvonWolf
    AvonWolf

    Reply 8 months ago

    Thanks for your reply, code is no problem. :-)
    Can you tell me which resistors I need to change?

    0
    KrystJan
    KrystJan

    10 months ago

    Witaj :-)
    Super projekt!
    Może masz na zbyciu taką piękną płytkę jak na zdjęciu. Jestem zainteresowany zakupem.
    Pozdrawiam.

    0
    zygfryd1991
    zygfryd1991

    Reply 8 months ago

    Mógłbym Ci jedną podarować, jeśli Ci po drodze do Krakowa :)

    0
    JakubP41
    JakubP41

    1 year ago

    Witam
    Na Twiom schemacie noga D2 jest podlaczona do GND i wylacznik zwiera ta noge przez opornik 10K tez do masy to troche nielogiczne.
    Nie jestem pewien ale wydaje mi sie ze opornik 10k powinien byc polaczczony D2 do masy a przelacznik powinien podawac chwilowo VCC lub odwrotnie.
    Mozesz to wyjasnic ?

    0
    JakubP41
    JakubP41

    Reply 1 year ago

    Dzieki za odpowiec dam zna c czy wszystko dziala.

    0
    JakubP41
    JakubP41

    1 year ago

    Witam
    chcialem powielic Twoj projekt ale mam problem z podpieciem klawisza wyboru mozesz mi powiedzieć jak polaczyc.

    0
    zygfryd1991
    zygfryd1991

    Reply 1 year ago

    Cześć! Jaki konkretnie problem masz z klawiszem wyboru? Podłączasz uklad na płytce stykowej, czy PCB?

    0
    nikdo_nic
    nikdo_nic

    1 year ago

    Hi
    how accurate are final measurements ?
    do you have something to compare measured values
    also i want to know what you have on display when you measuring all batteries
    and if is you can measure only one battery

    0
    zygfryd1991
    zygfryd1991

    Reply 1 year ago

    Hi. Circuit is very simple, so it should be accurate enough. I've checked some new 18650s, and they have reached almost nominal capacity values.

    0
    AripN
    AripN

    Question 1 year ago

    hi.. what if i change the power resistor? i only have 5 watt 10R and 5.6R. do i need to change the code/value too? thanks

    0
    zygfryd1991
    zygfryd1991

    Answer 1 year ago

    Hi! Yes, you have to change resistor value in the code (R1, R2, R3) and measured resistance of corresponding circuits (RB1, RB2, RB3). Good luck!