Arduino boards: are those little things energy efficient or are they power guzzlers? In this blog post I will test some of my commercially available Arduino and Arduino-compatible boards, focusing on their current draw in some of the most frequent power configurations.
Considering a battery-powered Arduino, the most common choice is the 6LR619V alkaline battery, which has a typical capacity of 550mAh. Sometimes a holder for six AA batteries is used, depending on the type of AA batteries used the combined capacity is in the range 1800–2600mAh. Also it’s common to use 9V wall warts.
Then, it’s interesting to see how much current will the Arduino boards need when powered from a 12V supply. This is again a common voltage in both lead-acid batteries and in wall-warts.
The third set of tests will evaluate the Arduino boards when powered with 7V, which is the minimum recommended power supply voltage.
And finally, one set of tests with an 18V power voltage, which is what you get if you place two 9V batteries in series. Not common, but doable, and it’s close to the maximum voltage to power an Arduino board. So it’s interesting to find what happens in this scenario.
With the exception of Arduino Due and Flip and Click, the boards used in this test have linear regulators, so I expect a not-so-good power efficiency. Also the power LED on the board will suck some energy, so a second battery of tests will be performed after the power LED is removed.
And what about the processor itself? Well, there will be three tests performed in different situations: one test with the processor in SLEEP mode, one test with the processor doing nothing (just executing NoP’s), and a third test with the processor fully loaded. This latter test is based on the Svarichevsky Mikhail’s stress test for Arduino, from which I have removed any LED blinking and LCD-related code. BTW, it’s nice to take a look on his blog post too: he overclocked an Arduino to 64MHz by submersing the board into liquid nitrogen. Not the thing to do at home, but nevertheless it’s an interesting lecture.
Putting Arduino boards into sleep mode proved to be troublesome, so I feel the need to share some of my code. Note that by disabling interrupts the microcontroller will stay in sleep mode until reset is pressed:
// Arduino SLEEP mode
// The two lines below should be uncommented only for Arduino Uno / Mega
// initialize digital pin 13 as an output.
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
delay(5000); // wait for a second
digitalWrite(13, LOW); // turn the LED off by making the voltage LOW
// disabling interrupts will keep the board in sleep mode until reset is pressed
// sleep sequence for Arduino UNO / MEGA
sleep_mode(); // never wakes up
// end of sleep code
// If the arduino board has exited sleep mode, the LED will turn back on
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage lev
For the ChipKIT UNO32, which has a PIC32 microcontroller the sleep sequence is inspired from this libstock.com example:
// sleep sequence for PIC32
SYSKEY = 0x0; // write invalid key to force lock
SYSKEY = 0xAA996655; // Write Key1 to SYSKEY
SYSKEY = 0x556699AA; // Write Key2 to SYSKEY
OSCCONSET = 0x10; // set Power-Saving mode to Sleep
SYSKEY = 0x0; // write invalid key to force lock
asm volatile( "wait" );// put device in selected Power-Saving mode
The AT91SAM3X8E on the Arduino Due / Flip and Click has three low-power modes. Here’s the code for it:
// sleep sequence for Arduino Due
// only one of the commands has to be uncommented
pmc_enable_sleepmode(1); // sleep mode
//pmc_enable_backupmode(); //backup mode
//pmc_enable_waitmode(); // wait mode
// end of sleep code
For the test I used my
KEITHLEY 2231A-30-3 Triple Channel DC Power Supply, an expensive piece of equipment able to provide an accuracy of 0.06% of the set voltage. Current measurements were performed using a
KEYSIGHT TECHNOLOGIES 34460A Digital Multimeter, 6½ Digit, Basic Truevolt DMM. An average of 100 measurements was considered in each case.
Several boards were put to the test:
- Arduino Uno (old board, same as official Arduino LLC version)
- Arduino Uno from Arduino SRL
- Sparkfun Arduino Pro. This is a stripped-down version of the Uno, with only the 5V supply, and without USB-to serial circuits (requires external FTDI). My version runs at 16MHz, same as the Uno. One might notice here that this board comes without any headers, so you will have to buy those separately. Also the power regulator is a MIC5205 from Micrel, able to supply a guaranteed current of only 150mA.
- Sparkfun Redboard. Similar with the Arduino Uno, but with a different USB-UART chip
- Seeeduino Mega. This board can be configured to run at 3.3V or 5V by flipping one switch. Notice here that the ATMEGA2560 on this board is able to run at 16MHZ on a 3.3V supply.
- ChipKIT UNO32 from Digilent. A PIC32 based Arduino alternative, which is programmed in MPIDE.
- Arduino Due from Arduino SRL (this is what’s available from EU distributors).
- Flip and Click from MikroElektronika. This is a nice Arduino Due compatible board, featuring four mikroBUS sockets, the proprietary MikroElektronika format that allow the use of click boards (and there are more than 160 to choose from), plus the ubiquitous Arduino Uno shield connector. The Flip and Click is the only Arduino compatible board in this test featuring a switching power supply, in buck topology. Will it perform better than the linear regulators? We will see…
As there’s a lot of data gathered during the testing, I prefer to show the results in as graphs, allowing for an easier comparison between different boards.
Vin = 7V
The lowest voltage reccomended for powering Arduino boards. I know, the Arduino Pro is labeled 4-12V, but this is true only in the case of 3.3V Arduino Pro.
Here we find a winner: the Arduino Pro has the lowest current draw of all the boards in test. Particularly in sleep mode the current draw is below 1mA.
Another thing to notice is the poor performance of the two UNO boards in sleep mode. My guess here is that the little ATMEGA8U2 that does the USB-UART job doesn’t go in sleep mode, and it’s just a power guzzler.
The Reduino and the Seeeduino Mega use FTDI chips, and have lower current draw than the UNO counterparts. In the case of the Seeeduino Mega lowering the voltage at 3.3V has as result an even lower current draw.
Not surprisingly, the boards with 32bit processors such as the ChipKIT and the Due have the highest power draw. One might notice that is sleep mode the PIC32 boards comes second in current draw after the Arduino Pro.
Vin = 9V
Vin = 12V
Raising the voltage to 12V. Arduino PRO still has the lead, but we notice that the Arduino Due and Flip and Click boards how have lower current draw than the PIC32, and comparable to the UNO’s. The reason is that the ATSAM3x based boards have switching power supplies, and those are now more efficient than the linear regulators.
Vin = 18V
A bit on the extreme side here, as we are close to the maximum voltage that can be fed into an Arduino.
You’ll notice here that the Arduino Pro is missing from this test, because 18V is a bit too much for the MIC5205 regulator. In its absence the leading positions are occupied by the Reduino and by the Seeeduino Mega running at 3.3V.
Next come the two SAM3X-based Flip and Click and Arduino Due boards – the switching-mode power supply really counts at this voltage, and they beat the UNO’s in terms of current draw, not to mention performance.
The ChipKIT UNO32 has one of the lowest current draws in sleep mode, but it’s a power guzzler when operating normally.
Removing the power LED: does it help?
I performed some experiments with the power LED removed. Depending on LED color and the value of the current limiter resistor I managed to reduce the current draw by 1mA to 2.7mA. With the exception of Arduino PRO it counts, but doesn’t make a great difference.
Without the power LED the Arduino PRO is the great winner: 13mA in normal operation, and an average of 0.27mA in sleep mode.