The best battery for Arduino depends entirely on your deployment environment and power state. For indoor prototypes, a standard 4x AA NiMH pack or a 9V alkaline is fine. But for remote IoT nodes, weather stations, or ESP32 deep-sleep deployments, a 3.7V 18650 Li-ion or 3.2V LiFePO4 cell paired with a high-efficiency DC-DC buck converter is the undisputed standard. These chemistries offer high energy density, low self-discharge, and the pulse-current capability needed when a microcontroller wakes up to transmit data over WiFi or LoRa.
This guide walks through the exact power math, cell configurations, and hardware sizing you need to keep your embedded projects running for months or years off-grid.
The Source-to-Load Power Block Architecture
Before picking a cell, you must understand the power block from source to load. A robust off-grid Arduino power system follows this exact signal and power flow:
- Energy Source: Solar panel or AC-DC wall adapter.
- Charge Controller: Regulates source voltage to safely charge the battery bank.
- Battery Bank & BMS: Stores energy; the Battery Management System (BMS) protects against over-current and voltage faults.
- DC-DC Regulator: Steps battery voltage up or down to the exact logic level (5V or 3.3V) required by the microcontroller.
- Load: The Arduino/ESP32 and its sensors.
Inverter/Charger Sizing for the Stated Load (And Why You Should Avoid Inverters)
A common trap in remote telemetry is sizing an AC inverter to plug in a standard 5V USB wall wart to power an Arduino. Do not do this. A typical 300W modified sine wave inverter has a quiescent (idle) draw of 0.5A to 1A at 12V (6W–12W). An Arduino Nano in active mode draws roughly 0.02A at 5V (0.1W). The inverter will waste over 98% of your battery capacity just staying turned on.
Instead of an inverter, you size a solar charge controller and a DC-DC buck converter. If you are using a 10W 12V solar panel to charge a battery bank for a 5V Arduino, you size a 10A PWM charge controller (like the Renogy Wanderer 10A) to handle the panel's short-circuit current (Isc) plus a 25% NEC-style safety margin. For the load side, a 3A DC-DC buck module (based on the MP2307DN or LM2596 chip) steps the 12V battery down to 5V with 85–92% efficiency, entirely eliminating the inverter's phantom load.
Sizing Math: Run Time, C-Rates, and Peukert’s Law
Sizing a battery for Arduino is not just about dividing mAh by mA. You must account for regulator efficiency, Depth of Discharge (DoD), and the chemistry's discharge curve.
The Run-Time Calculation
Let’s size a battery for an ESP32 weather station that wakes up every 15 minutes, takes a sensor reading, transmits via WiFi, and returns to deep sleep.
- Average Current Draw: 5mA (factoring in the 500mA TX bursts averaged over time).
- Target Run Time: 30 days.
- Raw Capacity Needed: 0.005A × 24 hours × 30 days = 3.6Ah (3600mAh).
Now we apply real-world derating factors. Lithium-ion cells should not be discharged below 20% State of Charge (SoC) to maximize cycle life, giving us an 80% Depth of Discharge (DoD). Our DC-DC buck converter operates at roughly 85% efficiency at this light load.
Adjusted Capacity = 3600mAh / (0.80 DoD × 0.85 Efficiency) = 5294 mAh.
We would select two high-quality 18650 Li-ion cells (e.g., Samsung 30Q or Molicel P28A) wired in parallel, yielding 6000mAh nominal capacity.
C-Rate and Peukert’s Law
The C-rate defines how fast a battery is discharged relative to its maximum capacity. A 1C rate on a 3000mAh cell means drawing 3A. Our 5mA average draw on a 6000mAh pack is a C-rate of 0.0008C. This is well within the safe discharge limits of standard Li-ion cells.
Peukert’s Law states that a battery's effective capacity drops as the discharge rate increases. The Peukert exponent ($k$) for lead-acid batteries is typically around 1.3, meaning high-current pulse loads (like a cellular modem waking up) will severely reduce a lead-acid battery's usable runtime. Lithium-ion, however, has a Peukert exponent very close to 1.05. This near-linear delivery makes Li-ion vastly superior for IoT pulse loads, as the battery won't suffer artificial capacity loss during WiFi transmission spikes.
| Chemistry | Nominal V | Max DoD | Best Use Case | Drawbacks |
|---|---|---|---|---|
| Li-ion (18650) | 3.7V | 80% | Compact IoT nodes, high pulse currents | Requires strict voltage protection, fire risk if abused |
| LiFePO4 (32700) | 3.2V | 90% | Outdoor solar nodes, 10+ year lifespan | Lower energy density, heavier, 3.2V requires buck/boost for 3.3V logic |
| Lead-Acid (SLA) | 12V | 50% | Heavy stationary loads, cheap bulk storage | High Peukert effect, heavy, terrible cycle life at deep DoD |
| NiMH (AA) | 1.2V | 100% | Prototyping, low-drain indoor sensors | High self-discharge (~20% per month), voltage sag under load |
Series vs. Parallel and Charge/Discharge Limits
When your math dictates more capacity or a higher voltage bus, you must combine cells. The rules for series and parallel configurations are absolute.
- Series (S): Adds voltage, capacity (Ah) remains the same. Two 3.7V 3000mAh cells in series (2S) yield 7.4V nominal at 3000mAh. Use series when you need to step down from a higher voltage to improve buck converter efficiency, or to run 12V peripherals.
- Parallel (P): Adds capacity (Ah), voltage remains the same. Two 3.7V 3000mAh cells in parallel (2P) yield 3.7V at 6000mAh. Use parallel to increase run time while keeping the voltage low enough to feed a linear LDO regulator or a low-voltage buck converter.
Charge and Discharge Voltage Limits
Microcontrollers will happily brown out and corrupt their EEPROM if battery voltage sags, but the battery itself will be destroyed if pushed past its chemical limits.
- Li-ion (NMC/NCA): Charge limit is strictly 4.20V per cell. Discharge cutoff must be 2.5V to 3.0V. Discharging below 2.5V causes copper dendrite formation inside the cell, which can lead to internal short circuits on the next charge cycle.
- LiFePO4: Charge limit is 3.65V. Discharge cutoff is 2.5V. The discharge curve is incredibly flat, sitting around 3.2V for 90% of the cycle, which makes voltage-based fuel gauging (measuring SoC via analog read) nearly impossible without a dedicated Coulomb counting IC like the INA219.
Never wire mismatched lithium cells in parallel. If you parallel an old 2500mAh cell with a new 3500mAh cell, or mix different brands (e.g., Samsung with Sony), their internal resistances will differ. The stronger cell will force current into the weaker cell at an uncontrolled rate, leading to thermal runaway, venting, and fire. Always use cells of the exact same brand, model, age, and state of charge when building parallel packs. Furthermore, any multi-cell Li-ion pack must be protected by a BMS (Battery Management System) that monitors individual cell voltages and balances them during charging.
FAQ: Battery for Arduino Long-Tail Questions
Can I power an Arduino directly from a 12V lead-acid battery?
Technically yes, but practically no. The Arduino Uno’s onboard NCP1117 linear regulator will drop the 12V down to 5V by burning the excess 7V as heat. At a modest 50mA draw, the regulator will dissipate 350mW of heat, which is near its thermal limit without a heatsink, and it wastes over 58% of your battery's energy. Always use a 12V-to-5V DC-DC buck converter module between a 12V lead-acid battery and the Arduino's 5V pin (bypassing the onboard regulator entirely) to maintain high efficiency and prevent thermal shutdown.
How long will a 9V battery last on an Arduino Uno?
A standard alkaline 9V battery has a capacity of roughly 400mAh to 550mAh. An Arduino Uno with the power LED enabled and the ATmega328P running at 16MHz draws about 45mA to 50mA. Factoring in the inefficiency of the linear regulator dropping 9V to 5V, a 9V battery will power an Uno for approximately 6 to 9 hours. They are notoriously poor choices for embedded projects due to their low energy density and high internal resistance.
What is the best battery for Arduino deep sleep projects?
For deep sleep projects (where the MCU draws microamps and only wakes for milliseconds), a single 3.7V 18650 Li-ion cell or a 3.2V LiFePO4 cell is ideal. Because the average current draw is so low (often under 0.1mA), you can power the 3.3V logic directly from the cell via an ultra-low quiescent current LDO like the MCP1700 or HT7333. Avoid switching buck/boost converters in ultra-low-power sleep designs, as their own quiescent current (often 1mA to 5mA) will dwarf the sleeping microcontroller's draw and ruin your battery life.
Do I need a BMS for a single 18650 cell powering an ESP32?
Yes, you need protection, though it doesn't have to be a massive multi-cell BMS board. A single unprotected 18650 cell can be over-discharged by the ESP32 if the code fails to enter sleep mode or if a sensor shorts out, destroying the cell. You must use at least a basic 1S protection PCB (often built into modules like the TP4056 charger board, which includes the DW01A protection IC and dual MOSFETs). This ensures the cell is physically disconnected from the load if the voltage drops below 2.4V, preventing irreversible chemical damage.






