Electronic – arduino – What are some simple ways to reduce Arduino power usage?


For a quick and dirty project, what are some of the simplest ways to reduce the power use of an Arduino?

Imagine the following setup:

A typical Arduino Nano, hooked up to a pair of DS18B20s and one of the mini OLED screens. Power comes from a cellphone battery hooked to a TP4056 board, which then runs to a small 0.9V >> 5V boost board, both common eBay items.

The idea is to make a basic platform, to which additional functionality will be slowly added, such as a wireless link and data-logging. For now, though, the situation is as described above.

The obvious start would no doubt be killing off unnecessary LEDS , or at least, tacking on extra resistance to make them fainter. Maybe finding how to reduce the brightness of the OLED screen would also be an obvious step, and that green LED next to the ON switch isn't necessary…

But beyond this, what simple steps could be done in coding or hardware load-out could help get more battery time?

(This question relates to a specific level of embedded system enthusiast, namely, the intermediate level, someone who isn't yet confident enough to dive into the depths of the AVR assembly language, but rather someone who already grasps the basics of how electronics and embedded devices are put together in a system (In other words, myself..). There are differences compared to the How can I get my atmega328 to run for a year on batteries? question, and more specific to the actions I practically can take.)

Best Answer

My first step would be to identify what is using most of the power/current and address that.

I often see these questions about reducing power consumption / increasing battery life on this site they often mention the general solution you already list and which are listed in other answers.

For example I agree that reducing the supply voltage of a microcontroller reduces power consumption. However, if the uC is mostly in sleep mode and only active 1% of the time then reducing the consumed power is only of relevance if the uC takes a significant (for example more than 20%) of the total power budget.

If for example your temperature sensors are on continuously at 1 mA each that's 2 mA total at 100%. Compare that to a uC being active 1% of the time at 10 mA gives an average of 1% * 10 mA = 0.1 mA so 20 times less.

So the conclusion there would be to duty cycle the temperature sensors. Make the uC switch them on/off (or their supply, perhaps you can simply supply the Vdd of the temp. sensors from an I/O pin on the uC). Even if the temp sensors are only stable after having a supply voltage for 5 seconds that would still help significantly if you do a temperature measurement once per minute.

I usually make a table with time active (in %, so basically that is the duty cycle), current consumption and the effective average current (which is simply the product of those two). That helps me identify where the current/power is going and that tells me how I can improve it.

Concerning the step-up converter: you might not need it if all components can also run on 3.5 - 4.2 V. The ATmega chip can, some can even work at 1.8 V (you might have to change the "Brown Out" voltage in the fuse settings though). Some step up converters have a low quiescent current (current drain when the current at 5 V is zero) but not all do.

Most circuit designers like to have a stable supply voltage, say 3.3 V. However, most chips actually don't care! As long as it is in their usable range. For high accuracy / low noise things might be different of course. My point: you don't always need a stable/regulated supply voltage. Removing that LDO / step up converter can save a bit of current.