The Arduino platform is a great product for producing a custom data collection system or controller. Programming is easy via a high-level language and a simple USB connection to the Arduino board. Incredible popularity has brought plenty of publicly available code and many add-on boards for interfacing sensors, storage, and wireless communications. However, most of my projects involve collecting data for multiple months, and access to mains power is often problematic. Battery-powered data collection is essential, but the Arduino quickly exhausts a battery when attempting to collect data for more than a few days. This article describes a technique for extending the battery life of an Arduino for many months.
The Arduino Uno board draws about 42 mA assuming no power draw from sensors or other components needed in your system. With a minimum supply voltage of 7 volts, the power consumption of the board is therefore 0.29 Watts. Sleep Mode is possible, but the onboard voltage regulator still has a quiescent current draw of 10 mA even when the processor is asleep. Assuming your task allows for sleeping most all of the time (like most of my data collection tasks), power consumption would be lowered to about 0.07 Watts utilizing sleep mode. An Alkaline AA battery has about 2.5 Watt-hours of energy; using three of these would give a battery pack containing 7.5 Watt-hours of energy. Ignoring voltage conversion losses, 7.5 Watt-hours of energy only powers the mostly-sleeping Arduino for 107 hours, a little over 4 days.
As the Sleep Mode article referenced above suggests, you can use the Atmega chip from the Arduino board on a custom board and use a much more efficient voltage regulator or possibly no regulator at all. This approach combined with using Sleep mode could dramatically lower the power consumption of the system. However, you then lose access to the numerous accessory shields available for the Arduino, and many of the ease-of-use advantages of the Arduino are lost. For a data collection project I’m currently working on, I’ve chosen a different approach. I am building a small power controller board that will only periodically apply power to the Arduino board, and then after the Arduino is done reading a sensor and wirelessly sending its data, the Arduino will signal completion of its tasks to the power controller and the controller will cut power to the Arduino. All Arduino power consumption will be eliminated at that point until the next power-on cycle. The power controller board itself will obviously use some energy, but using sleep mode for that microcontroller and powering the power controller circuit directly from the battery without a regulator will lower its power consumption during periods when the Arduino is not on to an average of about 11 microWatts. A basic block diagram of the system is shown below.
If the one of the goals is maintaining the ease-of-use advantage of the Arduino, having to build a separate, custom power controller circuit seems to defeat that goal. However, the power controller circuit can be used without re-design for a wide variety of Arduino projects. The only power controller parameter that varies between projects is the length of time between each successive power up of the Arduino.
There are clearly some limitations with this approach. If your application requires the Arduino to set outputs for control purposes, these outputs will be lost each time the Arduino is powered down. So, this power-saving approach is really meant for data acquisition applications, not control applications. Also, if you need to retain data or settings between each power-on cycle of the Arduino, you will need to use the EEPROM memory in the Arduino, as that memory is unaffected by loss of Arduino power.
So, what kind of battery life can be achieved with this strategy? To answer this question, you need to know how long the Arduino will be powered up and how long it will be totally off. For my current project, I need to read a sensor and wirelessly transmit the results every 10 minutes. Each time the power controller circuit applies power to the Arduino, the Arduino has to boot up, read the sensor and then send the result via an Xbee radio. I have measured the boot-up time for the Arduino Uno, which equals about 72 milliseconds. (This is substantially faster than the earlier Arduino Duemilanove, which took a full 1.45 seconds to boot up. Clearly if you intend to use this power-saving approach, you would want to use the fast-booting Uno model.) Reading the sensor for my project will take about 10 milliseconds. Until I measure more carefully the Xbee boot-up and transmit time, I will conservatively assume that the Xbee process pushes the power-on duration up to a full one second.
As well as knowing the Arduino duty cycle, you also need to know power consumption of the Arduino and accessories when it is On. In my project, I will apply power to the Arduino through the 5V pin, so that I can avoid some of the voltage regulator losses on the Arduino board. Adding in the sensor and Xbee power consumption, I estimate an average current draw of 70 mA during the period while the Arduino is powered up. So, power consumption during the power-on time is 0.07 A x 5 V = 0.35 Watt. But, the circuitry is only powered up for 1 second out of the 10 minute repeat interval, so the average power draw is 1 sec / 600 sec x 0.35 W = 0.000583 W or 0.583 mW. My custom power controller board produces the 5 volts necessary for the Arduino board through use of an 85% efficient boost switching power converter. So, the 0.583 mW average power draw of the Arduino takes 0.583 mW / 0.85 = 0.686 mW from the battery on average. Adding in the 11 microWatt draw of the custom power controller board gives a total power consumption of 0.697 mW. With a 3 x AA Alkaline battery pack having 7.5 Watt-hours of energy, my project should see a 7,500 mW-hrs / 0.697 mW = 10,800 hour battery life, or about 15 months, a substantial improvement over the 4 day battery life achievable through the standard Arduino setup.
In this Later Post, I discuss the design of the Power Controller circuit. Hopefully, I will also be able to report on actual use of the product in future posts.