Some initial measurements of power consumption.
How much power does Arduino sleep mode save? The simplest way to work this out is to power an Arduino from a battery pack and measure the current being drawn in the different modes. A simple program to demonstrate the different modes is:
- Normal
delay()
loop - Deep sleep for a period (deep sleep)
- Flash the LED (awake)
- Flash the LED differently while sending out radio messages (awake and transmitting)
The results are as follows:
Activity | Power mode | Current |
Nothing |
delay() loop |
43mA |
Nothing | Deep sleep | 33mA |
Steady LED | Deep sleep | 34mA |
Flashing LED | Awake | 45mA |
Xbee (quiet) | Deep sleep | 72mA |
Xbee (quiet) | Awake | 85mA |
Xbee (transmitting) | Awake | 87mA |
The good news is that SleepySketch makes it very easy to access the deep sleep mode, and to stay in it by default. This is good, as the normal approach of using delay()
is quite power-hungry. The bad news is that the “at rest” power consumption of an Arduino even in deep sleep — the quiescent current being drawn by the voltage regulator and other components on the board, regardless of what the microcontroller is doing — is about 35mA, with an XBee drawing an additional 40mA.There is very little difference in power whether the radio is transmitting or not (although the current being drawn looked more variable when transmitting, suggesting that there’s some variation happening faster than the ammeter’s sample time).
The radio isn’t put to sleep when the Arduino is asleep, which is clearly something that needs to happen: it draws power even when the Arduino is incapable of using it. Something to explore. Potentially more serious is the power being drawn when the Arduino is asleep. A battery pack with 4 x 1500mAH batteries will be drained in about 7 days (6000mAH / 35mA) even with the system asleep all the time.
[UPDATE 1Aug2013: made the table layout a bit clearer.]