What's the safest way to determine a lithium-ion polymer battery's discharge and charging state using an Arduino?

I see a ton of 12 V LiPo batteries like this being sold on eBay and elsewhere.

enter image description here

They have a built-in charger, and I'd like to use one to power an Arduino, but the Arduino needs to know "when" the battery needs to be charged, and "when" the battery is fully charged. Unfortunately, the battery doesn't expose any pins or LEDs or other outputs that I could tap into.

I've found a few LiPo charging circuits specifically designed for the Arduino, but they all can only handle 3.7 V cells.

I'd like to avoid having to disassemble the battery or modify it to allow me to monitor its state. Is there an easier way, like connecting a battery lead to an analog pin and measuring voltage, or using a coulomb counter?

  • You can use 2 resistors to form a voltage divider, and safely measure the battery voltage using an analog pin.
    – Gerben
    Commented Mar 18, 2015 at 11:20
  • I ASSUME they use an internal converter or regulator. 4 LIPO = 12V to 16.8V. 3 LIPO = 9V to 12.6V. ANY LIPO charger worth it's salt will charge the unloaded battery until full then stop. If it does not it's dangerous rubbish. | Something like this gives you access Commented Mar 18, 2015 at 12:02
  • Resistor divider allow current monitoring. If quiescent drain matters a high side transistor can turn off divider and a low side transistor drives the high side. 3 resistors and 2 transistors plus divider. Commented Mar 18, 2015 at 12:07
  • @Gerben, I'm not sure that'll reliably work in this case. It might work when the battery is unplugged from the charger, but when plugged in, the voltage will probably spike to 12V even if the battery isn't fully charged yet.
    – Cerin
    Commented Mar 18, 2015 at 12:42
  • @RussellMcMahon, I agree, but I'm not concerned about the built-in charger being at fault. For my application, the device needs to take action depending on battery state. e.g. notify the user over wifi when charging is complete or when it needs to be charged.
    – Cerin
    Commented Mar 18, 2015 at 12:44

2 Answers 2


If you want to buy something off the shelf that will provide power for an Arduino, try a power bank - they have USB out, and are also charged via USB. I found that I had to put a 100 Ohm resistor to stop mine going to sleep, but it's +5V native.

A 100 ohm resistor (0.25 watt at least!) draws 50mA, so a 5200mAH powerbank like http://www.dx.com/p/universal-5200mah-external-li-ion-battery-charger-power-bank-w-led-indicator-usb-cable-pink-362725#.VQneCnWjlIc would leak it empty in 104 hours. If you use at least 50mA at all times, then this isn't needed - I think an Arduino draws 35mA already, so you should get away with a 300 Ohm resistor, drawing 16mA. Some experimentation might be needed.

  • But again...these don't allow you to monitor the battery. Also, your link is to a case, not a battery...
    – Cerin
    Commented Mar 18, 2015 at 12:32
  • Fixed link to point to battery, not case. You might be able to hack it, since it obviously has a monitor in there; at least you'd be able to pick up the status lights. Commented Mar 18, 2015 at 20:22

Use a 10V zener diode. Check it’s voltage drop, and use that in your analogRead logic.

Get the full voltage with a DMM, and also the low cut-off voltage.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.