Take the 2-minute tour ×
Arduino Stack Exchange is a question and answer site for developers of open-source hardware and software that is compatible with Arduino. It's 100% free, no registration required.

Yesterday afternoon I have left my Arduino running on a fresh Alkaline 9V battery (+ connected to Vin, - connected to GND). Today morning (16 hours later) the LCD display was no longer visible, and when I measured the volatage, I saw the battery was depleted to my surprise - its idle voltage was only 7 V.

My device is Arduino Uno with LCD 2x16 with LCD backlight and 2 DS18B20 sensors. Is it normal for such device to deplete 9V battery this quick?

I have read an answer to What are (or how do I use) the power saving options of the Arduino to extend battery life? question and I think what I see might be related to this, however I am not sure. If it is, is there some common schematics how to connect Arduino to be powered by a battery efficiently?

share|improve this question
    
I'd try attaching a multimeter and measuring the current from the battery with the whole thing and with the display and sensors disconnected. Don't try to optimize the arduino if it's something else pulling most of the power. –  bowlofred 6 hours ago
    
@bowlofred "measuring the current from the battery" - Will do, hoever I need to buy a new 9V cell first. :) –  Suma 6 hours ago

2 Answers 2

up vote 9 down vote accepted

Power consumption

The Arduino boards use a fair bit of power compared to other embedded systems with similar functionality.

There are two main factors:

  • The NCP1117 (datasheet) 5V linear regulator in the Arduino UNO R3 (schematic) has a quiescent current of around 6mA.

  • The ATMega328P (datasheet) draws around 5mA @ 8MHz and 5V, and probably more than double that at 16MHz.

Furthermore, the ATMega16U2 used for USB communications also draws some power, along with the LEDs and other peripherals. In your circuit, the LCD backlight is probably drawing 4mA as well.

A duracell 9V battery (datasheet) drops from 9V to 7V in around 7.5 hours with a 50mA current draw. Therefore, a rough guess is that your circuit draws around 25mA, which sounds about right based on the description of your circuit.

Note, alkaline battery life is non-linear with respect to current. For very small currents (<1mA) the life of an Alkaline approaches that of a lithium battery.

Getting current down

Here are some tips to get the current consumption down:

  • Regulator: Replace the regulator with one with a low quiescent current, or better yet, a buck converter. Sparkfun etc have buck converters that take the battery as input, then connect directly to 5V and GND, bypassing VIN and the regulator. Alternatively, you could buy a rechargeable lithium battery with charging shield. This advantage of this is not having to buy new batteries, and for a tiny bit bigger than a 9V battery the lithium one has much greater capacity.

  • ATMega328P: Rather than using delay for timing and spinning in loop endlessly waiting for something to happen, re-write your code so that it goes to sleep in between sensor reads, etc. There are a few low power libraries out there that use the watchdog timer for periodic wakeup from sleep which are handy. You can get the current consumption of the ATMega328P below 0.1mA during sleep.

  • LCD: Turn off the backlight, or even the entire LCD. Add a button to the design that the user can push to activate the LCD and have it turn off after a set amount of inactivity.

  • Peripherals: Most peripheral chips also have a sleep mode that drastically reduces their power consumption. Remove power LEDs and other indicators that are not necessary.

Summary

With appropriate power supply and coding you can get a reasonable amount of life out of a battery. Using the above principles, I have made an Arduino derivative board that measures a few sensors and stores the readings to an SD card every half a second. It can last for about 4 months on 2 AA batteries, so it is definetly possible to have low power and remain in the Arduino ecosystem.

share|improve this answer
    
Good thorough answer. Note: the power consumption of the usb to serial atmega16u2 which will be very significant after solving the other issues. –  user2973 6 hours ago
    
@user2973 do you have an idea of what it might be? I can get the typical characteristics off the data sheet, but I didn't put it in as I don't know if the firmware has any sleeping in it. If it is just running normally it is 12mA @ 5V which is a significant draw. –  geometrikal 5 hours ago
    
@geometrikal, how do you power an Arduino with 2 AA batteries? That's only 3 volts, which is below the minimum. Is the power supply you mentioned a buck/boost supply? (Outstanding answer by the way <voted>.) –  Duncan C 2 hours ago
    
@geometrikal There's no sleeping in the firmware for the atmega16u2. So the consumption should be the typical value - 13.5 mA (max 21 mA) according to my datasheet. –  user2973 2 hours ago
1  
@geometrikal, would you mind posting a link to one of the buck power supplies you mention, like the one from SparkFun? I just did some searching and can't find it. For long life a buck style supply seems critical, since the idle current from a conventional voltage regulator is significant. –  Duncan C 1 hour ago

I think an Arduino Uno is not suitable for such projects. Some components on the board draw too many amps, as @geometrikal correctly points out. If you're up to a challenge, I would advise you to take your project to another level and go barebones.

Sparkfun has a good article about how to increase battery life, using an ATmega328 that you also have on your Arduino Uno: https://www.sparkfun.com/tutorials/309

Look for ways to create a circuit with only the components that you really need, and have your microcontroller sleep as much as possible.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.