To reliably run an Arduino off-grid, you must size your battery bank based on daily Watt-hours divided by your depth of discharge (DoD) and system efficiency. For a typical 12W remote IoT node (Arduino + 4G LTE router) requiring 3 days of autonomy, a 12V 100Ah LiFePO4 battery paired with a 300W pure sine wave inverter and a 30A MPPT charge controller provides a robust, maintenance-free power architecture.
The Anatomy of an Off-Grid Arduino Power System
Designing a remote weather station or agricultural sensor node requires moving beyond USB wall warts. A complete off-grid power system follows a strict source-to-load block architecture:
- Source: Solar array or wind turbine generating raw DC.
- Charge Controller: MPPT (Maximum Power Point Tracking) regulator stepping solar voltage down to battery charging voltage.
- Storage: Battery bank acting as the system's energy buffer.
- Distribution & Protection: Inline fuses, busbars, and a master disconnect switch.
- Conversion: DC-DC buck converters for the Arduino (5V/3.3V) and an inverter for any AC loads (like a cellular router).
- Load: The microcontroller, sensors, and communication modules.
Choosing the right battery chemistry is the first critical decision. While lead-acid is cheap upfront, lithium iron phosphate (LiFePO4) dominates modern remote IoT deployments due to its cycle life and depth of discharge.
| Chemistry | Usable DoD | Cycle Life | Weight (100Ah) | Best Application |
|---|---|---|---|---|
| Flooded Lead-Acid | 50% | 300-500 | ~65 lbs | Stationary, budget-constrained prototypes |
| AGM / Gel (VRLA) | 50% | 400-800 | ~60 lbs | Sealed indoor enclosures, low vibration |
| LiFePO4 (LFP) | 80-90% | 3000-5000 | ~25 lbs | Permanent remote IoT, high daily cycling |
| Li-ion (NMC 18650) | 80% | 500-1000 | ~12 lbs | Weight-critical mobile/drone payloads |
Sizing the Battery Bank: Math, Peukert, and C-Rates
Series vs. Parallel Consequences
When building or expanding a battery bank, the wiring topology dictates your voltage and capacity:
- Series Wiring: Connects the positive of one cell to the negative of the next. Consequence: Voltages add up, but Amp-hours (Ah) remain identical to a single cell. (e.g., Four 3.2V 100Ah LiFePO4 cells in series = 12.8V 100Ah).
- Parallel Wiring: Connects positives to positives, negatives to negatives. Consequence: Amp-hours add up, but voltage remains identical to a single cell. (e.g., Four 12V 100Ah batteries in parallel = 12V 400Ah).
The Sizing Math
Let's size a bank for an Arduino Mega running environmental sensors (2W continuous) and a 120V AC 4G LTE router (10W continuous).
- Calculate Daily Load: 12W total × 24 hours = 288 Wh/day.
- Factor in Inverter Efficiency: The AC router draws power through an inverter (typically 85% efficient). 10W / 0.85 = 11.76W drawn from the battery. Total battery draw = 2W (DC) + 11.76W (AC) = 13.76W.
- Daily Battery Wh: 13.76W × 24h = 330.24 Wh/day.
- Apply Autonomy (Days of Cloud Cover): 3 days × 330.24 Wh = 990.7 Wh required.
- Apply Depth of Discharge (DoD): LiFePO4 should not be drained below 20% SoC (80% DoD). 990.7 Wh / 0.80 = 1,238 Wh total bank capacity needed.
- Convert to Amp-Hours at 12V: 1,238 Wh / 12.8V nominal = 96.7 Ah.
Selection: A standard 12V 100Ah LiFePO4 battery (roughly $220–$280 in 2026) perfectly satisfies this requirement.
Peukert’s Law and C-Rate Limits
If you opted for a Lead-Acid AGM battery instead, you must account for Peukert’s Law. Peukert's law states that as your discharge current increases, the usable capacity of a lead-acid battery decreases exponentially. While our 1A draw is gentle, AGM batteries also suffer from a strict 50% DoD limit to prevent sulfation. You would need a 200Ah AGM battery (weighing over 120 lbs) to achieve the same 3-day autonomy.
For our 100Ah LiFePO4, we must respect the manufacturer's C-rate limits. A standard 1C discharge rate means the battery can safely output 100A continuously. Our 13.76W load draws roughly 1.15A at 12V (a 0.01C draw), which is well within safe limits and ensures maximum cell longevity. The charge limit is typically 0.5C (50A max charge current), which dictates our solar charger sizing.
Sizing the Inverter, Charger, and DC-DC Regulators
Inverter Sizing for the AC Load
The 4G LTE router requires 120V AC. You must size the inverter for both continuous draw and startup surge. The router draws 10W continuously but may spike to 15W when the cellular modem initializes. The minimum practical pure sine wave inverter is a 300W unit (like the Victron Phoenix 12/300). Never use a modified sine wave inverter for IoT networking gear; the high harmonic distortion will cause the router's internal switching power supply to overheat and fail prematurely.
MPPT Charge Controller Sizing
To replenish 330 Wh of daily battery drain, assuming 4 peak sun hours and 20% system losses (wiring, dust, heat), you need: 330 Wh / 4h = 82.5W. Add 20% margin = ~100W solar array. A single 200W 12V nominal panel provides ample overhead for winter months. Pair this with a 30A MPPT charge controller (e.g., Victron SmartSolar 100/30). The MPPT will efficiently step the panel's ~19V Vmp down to the 14.4V absorption voltage required by the LiFePO4 BMS.
DC-DC Buck Conversion for the Arduino
Do not feed 12V directly into the Arduino's barrel jack or Vin pin for a remote deployment. The onboard linear regulator (often an NCP1117) will dissipate the excess 7V as heat, wasting over 50% of your energy and triggering thermal shutdown in enclosed IP65 boxes. Instead, use a high-efficiency switching buck converter like the Pololu D24V22F5 or a DROK LM2596 module. Set the output to exactly 5.0V and wire it directly to the Arduino's 5V pin (bypassing the onboard regulator entirely). This pushes DC-DC efficiency above 90%.
Frequently Asked Questions: Battery Power for Arduino
How long will a standard 9V battery power an Arduino Uno?
A standard 9V PP3 alkaline battery has a capacity of roughly 500mAh. An Arduino Uno with the power LED enabled draws about 45mA. Theoretically, 500mAh / 45mA = 11.1 hours. However, because the onboard linear regulator drops 9V down to 5V, it wastes nearly half the energy as heat. In real-world bench testing, a 9V battery will power an Uno for 4 to 6 hours before the voltage sags below the regulator's dropout threshold. For battery power, always use a 3.3V Arduino Pro Mini or an ESP32 with a switching regulator.
Can I use raw 18650 Li-ion cells to battery power Arduino projects?
Yes, but it requires strict safety protocols and a BMS. Raw Li-ion (NMC) cells have a nominal voltage of 3.7V (4.2V fully charged). To power a 5V Arduino, you need a 2S configuration (7.4V nominal) fed into a buck converter, or a 3S configuration (11.1V nominal). According to Battery University safety guidelines, you must use cells from the same manufacturer, with identical capacity ratings, and matched internal resistance. If one cell in a parallel group degrades faster, it will drag down the entire pack and risk venting. For most hobbyists, buying a pre-assembled 18650 power bank with an integrated BMS and USB-C PD output is vastly safer and more reliable.
What is the best way to put an Arduino to sleep to save battery power?
To extend battery life from days to months, you must utilize the microcontroller's hardware sleep modes. Using the LowPower library, you can shut down the ADC (Analog-to-Digital Converter) and BOD (Brown-Out Detection) while the CPU sleeps, waking only via the Watchdog Timer or an external interrupt.
#include 'LowPower.h'
void setup() {
// Initialize sensors and disable unnecessary peripherals
ADCSRA = 0; // Disable ADC completely
}
void loop() {
// 1. Wake up, read sensor, transmit data via LoRa/NB-IoT
// 2. Enter deep sleep for 8 seconds (draws < 10µA)
LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
// Loop repeats, stacking 8S sleeps for longer intervals
}
By combining hardware sleep modes with a 3.3V architecture and disabling onboard power LEDs, you can reduce the average current draw of an Arduino node to under 50µA, allowing a modest LiFePO4 pack to run the system for years without solar replenishment.






