To run an Arduino on battery power requires 2 things:
- First, you need to sort out the hardware because even if you put your Arduino to sleep (we will look at that soon) it is only the Atmel chip that will sleep, the rest of the components like power led, regulators and so on will still be very much alive
- Next, you can programmatically put the Arduino into different kinds of sleep modes that will drop the power consumption to μA’s
First sort the hardware power consumption.
When you want to use a battery source like a coin cell, the Uno is not an option it consumes on average 48mA without sensors and so on connected to it. Even a 9V will not last a day.
Our skeleton Duino performs much better at about 30mA and is already much better at about 40% energy saving compared to the Uno but there is more we can do…..
We created the Diet Duino to bring this down even lower to 16mA, that is about a 1/3 of the consumption of an Arduino Uno.
You can get the Diet Duino here: Diet Duino
We accomplish this by removing the power led (still a led on pin 13 if you want to see a power led – but make it blink slowly on the off and very quick on the on cycle so it uses as little power as possible) and most importantly, we use a rather expensive imported voltage regulator that is VERY energy efficient.
A rule of thumb: The nearer your battery voltage are to the 3.3V regulator voltage the fewer uAmps it will consume.
Now let the Atmega chip go to sleep wherever possible.
When be put the Diet Duino into sleep mode it is too low to measure, We can measure up to around 20 μA but looking at the only thing that consumes power – the voltage regulator we look at about 4uA.
Some perspective on sleep mode.
When you put an Arduino in sleep mode it does not take long for it to go to sleep or to wake up, it happens in milliseconds. This means that you can already replace all your normal Delay calls in your Arduino with “real sleep” commands with a very cool Arduino library that you can find here: Low-Power library from Rocketscream
It is very easy to use and you will find lots of information from the link above. The statement LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF); puts the MCU in SLEEP_MODE_PWR_DOWN for 16 ms to 8 s, depending on the first argument. It disables the ADC and the BOD. Power-down sleep means that all chip functions are disabled till the next interrupt. Further, the external oscillator is stopped. Only the level interrupts on INT1 and INT2, pin change interrupts, TWI/I2C address match, or the WDT, if enabled, can wake the MCU up. So with the single statement, you will minimize energy consumption to 3 uA. If you read the library documentation you will find lots of other settings to use.
To give you an example: If you measure temperature once ever 1 minute, the measurement takes maybe 1 second, that means your Arduino can sleep for 56 seconds.
In conclusion, with the Diet Duino and some basic programming, you can get over a year on one coin cell.
The Diet Duino is available here: Diet Duino low energy