Arduino: Power Consumption Compared
When I first started working on my Arduino drone, I decided I wanted to evaluate, understand and compare components before selecting them. Then I would be able to come up with an optimal combination of components, or if not then at least I would understand where my design is lacking.
Something I thought is fundamental is understanding the power consumption of every component so I could design a drone with a long range. However I couldn’t find a lot of data on the power consumption of the most key component of my drone: the Arduino.
At first I was tempted to just get the “best” Arduino, meaning the one with the best specs and most inputs/outputs. But why base the drone on the Arduino Mega for example, if it could run just fine on an Arduino board that consumes less power? And actually, the real question is: which one will consume the least power versus the specs it provides?
I thought I’d do a small study and actually measure and compare the power consumption of several Arduino boards. This isn’t very scientific, ideally I would have taken several of each model.
Tools #
For my measurements I used a Drok USB Meter key. It plugs into a USB port and provides a female USB socket for plugging in any USB device, such as an Arduino. The LCD screen on this USB key shows the voltage and power consumption.
Unfortunately the refresh rate of the LCD screen is too low so on the picture above, only part of the display is visible.
This device can be found on Amazon or eBay for $10 to $40.
Power Consumption Measurements #
I created two different programs to run on the Arduino boards:
- The basic empty
setup(){} loop(){}
program - A program that would print the Fibonacci series via the virtual serial port
Here are my results:
Uno | Nano | Mega | 101 | |
---|---|---|---|---|
Revision | R3 | R3 | R3 | R1 |
CPU | ATmega328 | ATmega328 | ATmega2560 | Intel Curie |
Voltage | 5.10V | 5.10V | 5.10V | 5.10V |
Program #1 Current | 144mA | 35mA | 79mA | 66mA |
Program #1 Power | 734mW | 179mW | 403mW | 336mW |
Program #2 Current | 144mA | 35mA | 81mA | 68mA |
Program #2 Power | 734mW | 179mW | 413mW | 347mW |
It turns out that regardless of the program running, the power consumption remains the same. I did try other programs than the ones listed above and obtained the same results.
Power Consumption vs. Performance #
Uno | Nano | Mega | 101 | |
---|---|---|---|---|
Revision | R3 | R3 | R3 | R1 |
CPU | ATmega328 | ATmega328 | ATmega2560 | Intel Curie |
Clock Speed | 16Mhz | 16Mhz | 16Mhz | 32Mhz |
Average Power | 734mW | 179mW | 408mW | 342mW |
Power / Speed | 46mW/Mhz | 11mW/Mhz | 26mW/Mhz | 11mW/Mhz |
From the above it seems the most efficient are the Nano and the 101. Actually surprisingly even the Mega is more efficient than the Uno.
Onboard Gyro vs. External #
Something else I was curious about was the difference in power consumption between using an external gyroscope and accelerometer such as the MPU6050 chip, versus using the onboard gyroscope on the Arduino 101.
For my tests, I used a simple program using Madgwick’s algorithm, which would print the accelerometer and gyroscope readings on the serial port. I used the same algorithm to test the onboard and external gyroscopes. This program was helpful to use the Arduino 101 onboard gyro.
I found that using the gyro/accelerometer uses about 2mA and with my 5.10V voltage it equals around 10mW of power. Here are my results:
Uno | 101 | |
---|---|---|
Base power | 734mW | 342mW |
Power with MPU6050 | 744mW | 352mW |
Power with onboard Gyro | - | 352mW |
It turns out using the onboard gyro/accelerometer uses just as much power as an external MPU6050!
Notes #
For the Arduino Nano, don’t forget to get the driver as it is not included with the Arduino IDE installation.
References #
- Arduino Uno specs: https://www.arduino.cc/en/Main/ArduinoBoardUno
- Arduino Nano specs: https://www.arduino.cc/en/Main/ArduinoBoardNano
- Arduino Mega specs: https://www.arduino.cc/en/Main/ArduinoBoardMega2560
- Arduino 101 specs: https://www.arduino.cc/en/Main/ArduinoBoard101
- Program I used for reading gyroscope values from the MPU6050: http://playground.arduino.cc/Main/MPU-6050
- Program I used for reading gyroscope values from the Arduino 101: https://www.arduino.cc/en/Tutorial/Genuino101CurieIMUOrientationVisualiser