18650 Lithium Battery Charging Module Tutorial: Safe Charging, Protection, and Arduino Power Patterns
This tutorial is a practical guide to using the 18650 lithium battery charging module (Leobot Product #195) to recharge a single-cell Li-ion/Li-Po battery (nominal 3.7V, full ~4.2V) and power Arduino projects reliably. You will learn what this board is meant to do, how to wire it safely, how to avoid the most common “battery + Arduino” mistakes, and how to build a clean power architecture (charging + load + monitoring).
1) What this board is (and what it is not)
This is a single-cell lithium charger module with a 5V input. Its primary job is charging a 1S lithium battery safely. In many hobby projects, it is also used as the “battery interface” for portable devices (charge from USB, run from battery).
Use this module when
- You have a single 18650 cell (or 1S Li-Po) and you want to charge it from USB
- You are building a battery-powered Arduino project and need correct lithium charging
- You want a compact board with simple wiring (battery in, USB in)
Don’t use this module when
- You need to charge multiple cells in series (2S/3S/etc.)
- You need a full “power-path management” solution that guarantees seamless switching between USB power and battery for sensitive loads
- You need high current output without adding proper wiring, boosting/regulation, and thermal design
2) Lithium basics in 2 minutes (voltage, full/empty, why 4.2V matters)
- Nominal voltage: “3.7V” is a nominal value; the battery voltage changes with charge level.
- Full charge: A typical Li-ion/Li-Po cell is fully charged around 4.2V.
- Low battery: Under-load voltage can dip; a common safe cutoff region is roughly 3.0V–3.3V (depends on cell and design goals).
- Why a charger is required: Lithium charging is not “apply 4.2V and hope.” It uses constant-current then constant-voltage control, and stops properly to prevent overcharge.
3) Connections and typical pad labels
Boards in this class often expose a Micro USB input and solder pads for battery and load. Exact labeling varies, so always confirm the silkscreen on your specific board.
3.1 Typical pad naming you may see
- B+ / B- — connect directly to the battery terminals
- OUT+ / OUT- — load output (on boards that include protection circuitry)
- IN+ / IN- or 5V / GND — 5V input (often via Micro USB instead)
4) Charging correctly via Micro USB
4.1 Basic charging wiring
- Connect the battery to B+ / B- (observe polarity).
- Plug a stable 5V USB supply into the Micro USB input.
- Allow charging to complete (many boards have LEDs indicating “charging” and “full”).
4.2 Charger current considerations
- Many modules in this family charge around the ~1A class, but the actual charge current can depend on board design and configuration.
- Small cells (or old/cheap cells) may not like high charge rates. If your battery is small, prioritize cell health over speed.
- Use a decent USB power source. A weak phone charger or long cable can cause unstable charging.
5) Powering your Arduino load correctly (and common traps)
5.1 Key fact: a lithium cell is not “5V”
A single-cell lithium battery ranges roughly from ~3.0V up to ~4.2V. This means:
- It is excellent for 3.3V systems (with a regulator where needed).
- It is not directly suitable for 5V-only loads without a boost converter.
5.2 Two common load wiring patterns
Pattern A: 3.3V Arduino-class system (preferred)
- Battery ? Charger module ? (optional protection OUT) ? 3.3V regulator ? MCU + sensors
- Benefits: efficient, stable, fewer resets, easier battery monitoring
Pattern B: 5V Arduino UNO/Nano loads (use a booster)
- Battery ? Charger module ? (optional protection OUT) ? 5V boost converter ? 5V rail
- Benefits: keeps a consistent 5V rail for sensors/modules that expect 5V
- Trade-off: extra cost, some switching noise, efficiency loss, and current limits
6) Do you need a booster? (5V projects vs 3.3V projects)
Decide based on your system requirements:
- If your project can run at 3.3V, you usually get a cleaner, more efficient design.
- If you must run 5V (certain sensors, long LED strips, relays, some modules), add a boost converter and design for current.
7) Arduino battery monitoring (voltage divider + low-battery logic)
Battery monitoring is straightforward: use a voltage divider to bring the battery voltage (up to ~4.2V) into the Arduino ADC range. Then apply a low-battery threshold and reduce load / shut down gracefully.
7.1 Voltage divider concept
- Battery+ ? R1 ? ADC pin ? R2 ? GND
- Choose R values to keep ADC current low (e.g., tens of kO range) and keep the ADC input below the reference voltage.
8) Arduino Example: Read battery voltage safely
This example assumes:
- You have a voltage divider from battery to A0.
- You know your divider ratio (R1 and R2).
- Your analog reference is default 5V (typical UNO/Nano on 5V rail).
/*
18650 Charger Module (#195) + Arduino
Battery Voltage Monitor (via divider)
Wiring:
- Battery+ -> R1 -> A0 -> R2 -> GND
- Battery- -> GND (common ground)
Example divider values:
- R1 = 100k
- R2 = 100k
This makes V_A0 = V_batt * (R2 / (R1 + R2)) = V_batt * 0.5
*/
const int PIN_BATT = A0;
// Divider values (ohms)
const float R1 = 100000.0;
const float R2 = 100000.0;
// ADC reference voltage (UNO/Nano default when powered from 5V rail)
const float VREF = 5.0;
// Low-battery thresholds (tune for your cell/load; under-load voltage can dip)
const float WARN_V = 3.40;
const float CUTOFF_V = 3.20;
float readBatteryVoltage() {
// Average a few samples to reduce noise
long sum = 0;
const int N = 10;
for (int i = 0; i < N; i++) {
sum += analogRead(PIN_BATT);
delay(5);
}
float adc = sum / (float)N;
float vA0 = (adc / 1023.0) * VREF;
float vBatt = vA0 * ((R1 + R2) / R2);
return vBatt;
}
void setup() {
Serial.begin(115200);
}
void loop() {
float v = readBatteryVoltage();
Serial.print("Battery: ");
Serial.print(v, 3);
Serial.println(" V");
if (v <= CUTOFF_V) {
Serial.println("LOW BATTERY: Cutoff region (consider shutting down / disabling loads).");
// Example action: disable high-current loads, enter low-power mode, etc.
} else if (v <= WARN_V) {
Serial.println("Battery warning: consider reducing load or notifying user.");
}
delay(1000);
}
9) Troubleshooting (won’t charge, gets hot, resets, “doesn’t power Arduino”)
Module does not charge (no LED / no change over time)
- Cause: USB supply/cable weak ? Fix: use a known good 5V supply and a short cable
- Cause: Battery polarity wrong or poor solder joint ? Fix: re-check B+/B- polarity and re-solder
- Cause: Cell is deeply discharged or damaged ? Fix: stop and inspect cell health; do not force-charge unknown cells
Module or battery gets hot
- Cause: Short circuit or wiring fault ? Fix: disconnect immediately and inspect wiring
- Cause: Charge current too high for cell ? Fix: use a healthier/larger cell or a lower-charge-current design
- Cause: Poor ventilation / enclosed build ? Fix: provide airflow and space for heat dissipation
Arduino keeps resetting when running from battery
- Cause: Voltage sag under load ? Fix: use proper regulation (3.3V LDO/buck or 5V boost), add bulk capacitance
- Cause: High current devices on same rail (servos, radios) ? Fix: isolate supplies and add decoupling near the load
- Cause: Trying to run 5V UNO directly from battery ? Fix: add a boost converter or redesign to a 3.3V MCU
10) Quick checklist
18650 Lithium Charger Module (#195) Checklist
---------------------------------------------
? Confirm it is a 1-cell lithium charger (not 2S/3S)
? Battery wired to correct pads (polarity verified)
? USB 5V supply is stable (short cable, known good charger)
? If powering a load: confirm whether you should use OUT pads (if present)
? Choose correct regulation strategy:
- 3.3V system: use a proper 3.3V regulator
- 5V system: use a 5V boost converter
? Add decoupling near MCU and noisy loads (100nF + bulk caps)
? Implement low-battery logic (monitor voltage, reduce load, protect the cell)
? Stop immediately if battery/module gets hot or cell looks damaged