About The 18650 Battery Charge/UPS Shield
One might think that you could simply use a power bank as a UPS by hooking up the power to the charge port and then connecting the load to the output. The thing is that this won’t work because the power bank will stop outputting power when you start to charge it. Additionally, if the current draw of the load is too small most power banks tend to shut off.
A UPS should connect the load directly to the power source until it goes out(depending on the type of UPS line interactive, double conversion, standby, …). When that happens the UPS should switch to powering the load from its internal battery until the power returns upon which it should change back to powering the load from the power source and start recharging its internal battery.
There are a few boards out there advertised as being able to do that. The board we are talking about in this post can usually be found on eBay, Aliexpress or Amazon under a name like “18650 Battery Charge Shield V3 for Arduino, Raspberry Pi, ESP32/8266” or something along these lines.
This board however has quite a few design flaws:
- The power switch is placed on the output instead of being placed in series with the battery. This means the DC-DC converter is always on thus draining the battery.
- The battery might get power cycled if the current being drawn is too low.
- The battery might be getting overcharged.
Here are some videos outlining the problems:
So from what I gather, there should be no overcharging safety issue but your battery might be getting power cycled between 4.1V and 4.2V if your load draws very little current(less than 100mA) which causes the charger to shut off. This is why I nonetheless added the diodes.
A power switch still needed to be added between the battery and the rest of the circuit to save battery life. Otherwise, the DC-DC converter will always stay powered on wasting battery even when we don’t need to power our load.
Note: I cut off part of the PCB and added a micro USB connector so the UPS module would fit inside a case(see it in my project here). You don’t need to do that.