Weekly Robotics logo
Weekly Robotics Beginner-friendly tutorials, every week
Powering Your Robot: Batteries, Regulators, and Power Distribution
Mechanics & Build

Powering Your Robot: Batteries, Regulators, and Power Distribution

Power is one of the most overlooked aspects of robot design. Get it wrong and your robot behaves erratically or damages itself. This guide covers everything you need to know.

Power system design is one of the most important — and most often neglected — aspects of building a robot. A poorly designed power system causes mysterious resets, erratic sensor readings, motor failures, and in the worst case, fires. Getting it right from the start saves enormous frustration.

Battery Types

LiPo (Lithium Polymer): The most common choice for mobile robots. High energy density, high discharge rates, lightweight. Available in many sizes and configurations.

  • Nominal voltage: 3.7V per cell (4.2V fully charged, 3.0V minimum)
  • Common packs: 2S (7.4V), 3S (11.1V), 4S (14.8V)
  • Capacity: measured in mAh (milliamp-hours)
  • C rating: maximum discharge rate. A 2000mAh 20C battery can deliver 40A continuously.

Warning: LiPo batteries can catch fire if overcharged, over-discharged, punctured, or short-circuited. Always use a proper LiPo charger, never discharge below 3.0V per cell, and store at 3.8V per cell.

18650 Li-ion: Cylindrical cells used in laptop batteries and power tools. Safer than LiPo, slightly lower energy density. Good for slower robots.

NiMH: Older technology, heavier, but very safe. Good for beginners who want to avoid LiPo risks.

Voltage Regulators

Your robot likely needs multiple voltage rails:

  • 12V or higher for motors
  • 5V for Arduino and logic
  • 3.3V for some sensors and modules

Linear regulators (e.g., LM7805): Simple and cheap, but inefficient — they dissipate excess voltage as heat. Fine for low-current applications.

Buck converters (switching regulators): Efficient (85–95%), can handle higher currents. Use these for anything drawing more than 500mA.

Battery (12V) → Buck converter → 5V rail → Arduino, sensors
Battery (12V) → Motor driver → Motors (direct)
Battery 12V
  <rect class="d-fill-mint-light d-stroke-mint" stroke-width="2" x="210" y="20" width="130" height="60" rx="8"/>
  <text class="d-label-bold" x="275" y="46" text-anchor="middle">Buck converter</text>
  <text class="d-label-sm" x="275" y="64" text-anchor="middle">12V → 5V</text>

  <rect class="d-box" x="410" y="20" width="130" height="60" rx="8"/>
  <text class="d-label" x="475" y="46" text-anchor="middle">Arduino,</text>
  <text class="d-label" x="475" y="64" text-anchor="middle">sensors (5V)</text>

  <rect class="d-fill-coral-light d-stroke-coral" stroke-width="2" x="210" y="140" width="130" height="60" rx="8"/>
  <text class="d-label-bold" x="275" y="166" text-anchor="middle">Motor driver</text>
  <text class="d-label-sm" x="275" y="184" text-anchor="middle">12V in</text>

  <rect class="d-box" x="410" y="140" width="130" height="60" rx="8"/>
  <text class="d-label" x="475" y="174" text-anchor="middle">Motors</text>

  <line class="d-line" x1="130" y1="100" x2="170" y2="100"/>
  <line class="d-line" x1="170" y1="100" x2="170" y2="50" />
  <line class="d-line" x1="170" y1="50" x2="205" y2="50" marker-end="url(#arrow-w14a)"/>
  <line class="d-line" x1="170" y1="100" x2="170" y2="170"/>
  <line class="d-line" x1="170" y1="170" x2="205" y2="170" marker-end="url(#arrow-w14a)"/>
  <line class="d-line" x1="340" y1="50" x2="405" y2="50" marker-end="url(#arrow-w14a)"/>
  <line class="d-line" x1="340" y1="170" x2="405" y2="170" marker-end="url(#arrow-w14a)"/>

  <text class="d-label-sm" x="372" y="42" text-anchor="middle">5V</text>
  <text class="d-label-sm" x="372" y="162" text-anchor="middle">12V</text>

  <defs>
    <marker id="arrow-w14a" markerWidth="9" markerHeight="9" refX="7" refY="4.5" orient="auto">
      <path d="M0,0 L9,4.5 L0,9 z" fill="#374151"/>
    </marker>
  </defs>
</svg>
One battery, two paths: logic gets clean regulated 5V through the buck converter, while the motors draw their hungry 12V straight from the battery via the driver.

Calculating Power Requirements

Before choosing a battery, estimate your power budget:

ComponentVoltageCurrentPower
Arduino Uno5V50mA0.25W
Raspberry Pi 45V600mA3W
2× DC motors (running)12V500mA each12W
4× Servo motors5V200mA each4W
Sensors (total)5V200mA1W
Total~20W

For a 20W robot, a 3S LiPo (11.1V) at 2000mAh provides:

  • Energy: 11.1V × 2Ah = 22.2 Wh
  • Runtime at 20W: 22.2/20 = ~1.1 hours

Decoupling Capacitors

Always add 100nF ceramic capacitors between VCC and GND on every IC and module. These filter out high-frequency noise from motors and switching regulators that can cause microcontrollers to reset or sensors to give bad readings.

For motors specifically, add a 100μF electrolytic capacitor across the motor terminals to suppress voltage spikes.

Common Mistakes

Shared ground: All components must share a common ground. Floating grounds cause mysterious behavior.

Thin wires: Use wire rated for the current. A 28 AWG wire (common in jumper kits) is only rated for 0.5A. Motor wires should be 18–22 AWG.

No fuse: Add a fuse or polyfuse between the battery and the rest of the circuit. This prevents a short circuit from becoming a fire.