5

I have googled all around and I know about some tricks to make ATmega328 not being a power hog. I am using Arduino Nano V3.0.

However, I didn't find out what is the minimal consumption possible with it?

My project consists of an Arduino that will wake up each 10 seconds and, by bluetooth (BT) will scan for existing devices, and if one specific device is not listed, it will lit a LED for 5 seconds and then go to sleep again.

In sum:

  1. Sleep for 10 secs

  2. Wake up

  3. Scan for BT devices

  4. If device ABC is in the list go to 1.

  5. Lit LED

  6. Delay 5 secs

  7. Go to 1.

For bluetooth I will use NRF8001, because it is the most efficient BT module I know so far.

Can you give me some ideas of what tricks should I use to make this ATmega328 and BT module last like one year with a 500mAh battery? Has anyone tried this that can share his experience? Is ATmega328 the right uC for this? I am using it just because I already have code/libraries for it.


Creating the new tag 'nrf8001' requires at least 150 reputation. Try something from the existing tags list instead.

  • 4
    The best I've seen on Arduino power consumption: gammon.com.au/power You can get the ATmega current draw down to 100 nA in "power down sleep mode"; the rest depends on the other parts of your circuit and what percentage of the time you can stay asleep. You may want to rethink your LED: If you light a 20 mA LED for five seconds out of every 10 seconds, 50% "on" time, the LED alone will drain 500 mAh in 50 hours. The guy in the link found that flashing a LED for 5-10ms once a second was enough to make it visible. – j-g-faustus Jan 21 '15 at 15:51
  • It's worth checking if you may do better with an nrf51822 which is a combination processor & BLE, and no ATmega. – Chris Stratton Jan 21 '15 at 17:22
  • One year = 8765 hours. So average drain for 1 year life from 500 mAh = 500 mAh/8765h = 57 uA average. | An efficient modern LED is usefully bright at 1 mA and probably at 0.1 mA. [Best LEDs are 30 Cd+ at 20 mA so 150 mCd mean at 0.1 mA and your eye-brain sees more like the peak. | 0.1 mA at 1% duty cycle for one year = 8765 x 0.1 x 1/100 = 8.765 mAh or about 2% of your battery capacity. – Russell McMahon Jan 28 '15 at 13:29
6

The issues regarding efficiency of power are:

  1. The CPU speed
  2. The Voltage
  3. The Power Regulator (not supply)
  4. The Peripherals

Address each one of these and don't over look any of them. Or any sub component. But note that some are more impacting than others.

  1. while it is possible to lower the speed, It is more practical to just sleep. As you have indicated you are going to do.

  2. Running at 3V instead of 5V is a big savings. Note that the 328 can run as low as 1.8V

  3. DON'T use Linear Regulators. Most all Arduino's have a 7-12V to 5V(or 3.3V) Linear Regulator. This just burns the difference between the supply (aka battery) and the VCC, used.

  4. pay attention to the peripherals. Likely this means getting rid of not needed devices. Example the USB to Serial chip that exists on the Nano. What is the lowest voltage can the radio run at? Must it run at a regulated voltage. Use the largest possible resistor values. Such as on pull ups. A 500K pull up will draw less current than a 10K. Where if too big any capacitance may slow it down. Which is likely acceptable.

One of the biggest savings is running directly off of the Battery without a Linear Regulator. Where the ATmega328P can run from 3V down to 1.6V. It would be recommend to use the Brown Out detector.

Also note that ALL batteries have a self discharge rate. This will determine the maximum possible life of the battery, then minus your devices consumption.

|improve this answer|||||
2

Read the link in @j-g-faustus 's comment - very thorough. http://www.gammon.com.au/power - it starts with a stock board running at 50milliAmps and ends up at 0.002 milliAmps.

You will also need to find out the power consumption for your BT module - this may dwarf the power arduino's power consumption. The same goes for the LED.

Normal LEDs run at about (ballpark!) 20 milliamps - this means that on the coin battery mentioned by @Omer, 200milliAmp-hours/20 milliAmps = 10 hours of led light.

You can measure the power draw with a multimeter; stick your probes between the + of the battery and whatever the battery would normally connect to (you will have to disconnect the battery of course) - if using a 9v battery, plug in the negative, disconnect the positive, turning the snap connector 90 degrees; then you can put one probe on the battery, the other on the (open) snap connector. Measure Arduino awake + led on + BT connected and sending data. Measure again with everything off/idle/sleeping. Work out how much time it will spend in each state; this will give you an average number of milliamp-hours.

|improve this answer|||||
2

These are essentially notes in support of other answers:

One year = 8765 hours.

So average drain for 1 year life from 500 mAh
= 500 mAh/8765h
= 57 uA average.
To get one year on a 500 mAh battery you need to have average drain under say 50 uA

An efficient modern LED
is usefully bright at 1 mA and
probably very acceptable at 0.1 mA.

Best LEDs are 30 Cd+ at 20 mA
so 150 mCd mean at 0.1 mA
and your eye-brain sees more like the peak.

0.1 mA at 1% duty cycle for one year
= 8765 x 0.1 x 1/100
= 8.765 mAh
or about 2% of your battery capacity.

|improve this answer|||||
2

Easy Very Low Power BLE in Arduino covers using Arduino IDE and nRF52832 chips to code very low power projects, i.e. <100uA continuously, waiting for connection or while connected and sending data.

The <100uA current is at max tx power and can be further reduced by reducing Tx power and increasing the advertising and connection intervals. Ignoring the LED, you should be able to get close to the 1year on a 500mAH battery.

Currently working on adding two small solar cells (50mm x 30mm) to extend battery life. These cheap cells ($0.60) don't need full sun and work well in the shade or out of the sun near a window or under a desk lamp.

|improve this answer|||||
1

Lowest possible power consumption for an Arduino is 0mA - just disconnect it's Vcc :)

And seriously, when there are many factors involved, it is hard to include all of them into the proper equations, considering different factors that affect the current consumption such as temperature, humidity, quality and distance of the wires etc. Best would be to perform measurements of the power consumption for, say, several cycles of steps 1 to 7, and do the average.

Remember that the ATmega chip will draw more current depending on the voltage, so you might want to keep voltage as low as possible.

Here is a nice project of an ATtiny (Arduino alike) that runs on a coin CR2032 battery (~200mAh) for 220 days until it died, while wirelessly broadcasting the results and the measurements of the battery discharge rate, so you could actually achieve pretty good results working with a 500mAh battery.

|improve this answer|||||
1

For simple applications like this, you might find it more convenient to use a smaller board/MCU from the Arduino system. For example the Digispark uses an ATtiny85 rather than the standard ATmega328P. It's not clear that the MCU itself would use much less power (it's pretty much the same CPU core, after all, though you are powering less RAM) but the board has only the one MCU and the regulator on it. You can still power it from and program it via USB (at 5 V) for development, but for production use you can (as others have mentioned) provide 1.8 V power on the VCC line, ignoring the regulator, and you will not have to worry about the power usage of things like the USB interface (an FT232 on the Nano, but a whole second microcontroller on some other boards!) and other parts on the Nano.

|improve this answer|||||

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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