I know there is a lot on this subject on the net but i cant seem to be able to join the dots together. I am trying to make sensor system than can run for as long as possible if not indefinitely using an Arduino, and also to do so very cheaply. I have a £1 Arduino Nano clone that is running with sensor and alarm fine, but currently its runs off USB power from PC.

I have followed this guide to minimize power usage code side: https://www.openhomeautomation.net/arduino-battery/

And I have read that the Vin pin needs at least 7 volts to work properly, so 2 volts would be wasted in heat making a 5V level.

I have a 3.7V lithium cell 4300mAh so I thought I would need a step up boost module.

But it looks like the Nano can run using 3V. But the 3.3V rail is apparently made for external sensors, assuming I want a mixture of cheap/simple and high efficiency. Can i just hook a 3.7 lipo into the 5V rail of the Nano and a 5V solar panel (with diode) up to same point? Will this kill my Nano? If not, is it worth stepping the 3.7V down to the minimum the Nano can run with?

Underclocking is not an issue, it essentially wakes up every hour reads 5 sensors and if all is well (99% of the time) goes back to sleep for an hour. Linear voltage regulators seem to burn the excess voltage as heat. And then what will happen when the battery dies off and is no longer 3.7 volts? And if my solar panel is around 5V in good light, if its partly shaded and only has 3.5 volts for example it would not charge my lipo to 100% capacity. Should I step up DC/DC boost the panel voltage to charge my cell.

Guidance please.

migrated from electronics.stackexchange.com Mar 9 '16 at 17:33

This question came from our site for electronics and electrical engineering professionals, students, and enthusiasts.

  • 1
    Don't use an Arduino! The Atmega328 (the microcontroller the arduino is built around) runs with 2.7-5.5V, so you can hook it directly to the lithium cell. The arduino board is essentially a PCB with an Atmega328, voltage regulators and a serial programmer. You neither need nor want to power the latter two, so use a plain Atmega328. You can still use the Arduino IDE and software. – Rainer P. Mar 9 '16 at 12:52
  • 1
    Nick Gammon's guide to power management on Arduinos: gammon.com.au/power – Nick Alexeev Mar 9 '16 at 17:32

I have to agree with @Olin Lathrop about the fact that Arduinos are not really tuned for your goals.

I am doing microcontroller projects for like 20 years, and I found the nanowatt PIC microcontrollers offering the best price/performance/tricks ratio if you need to have something running on batteries for a seriously long time (and has not too much to calculate). There we're talking about nanoamperes in sleep, and there are a lot more tricks you can consider.

You have chosen Arduino for a valid set of good reasons. But which Arduino please? They come with different CPUs and hardware!

If you go with Uno:

  • power your board directly by batteries, e.g. 3xAA batteries at the 5V pin to bypass power loss on the 5 V regulator (you can also give a try to feed power via the USB socket if you feel that more convenient)
  • remove the 3.3 V regulator (assume you don't need 3.3 V)
  • sleep a lot and sleep well, listen to @Nick Gammon and check his page about power saving

Then comes the minor tricks:

  • do not let any pin float. Before going to sleep, put all inputs to output. I.e. if you have a button input, change port direction to output and set to 0. (assuming that you don't need the button in sleep)
  • turn off not only all internal peripherals, but also external ones. For example, things like I2C temperature sensors may have remarkable 0.5 mA sleep current. The easiest thing is to power those from a port pin, and set the port to 0 before going to sleep.
  • turn off all pullups (and all inputs to outputs), don't forget the I2C as well. Although the bus will be idle, there is a serious leakage current (serious means microamperes, and you wanna go to the nanoampere range, right?)

Then if you want to go really to the hard parts:

And the final steps:

  • I would check the electrolytic capacitors on the power rails, e.g. C2. These also have a leakage.
  • Although Arduino does not have suppressor diodes to protect anything from any voltage spikes, I have to emphasize that single high capacity unipolar and bipolar suppressor diodes may have a leakage current of 1 uA.

Note about underclocking: this is not necessarily a wise thing to do. It is true that on slower speed the CPU consumes less. However at slower speed the CPU has to stay awake much longer to perform the same tasks.

  • I found that if you need to perform some complex calculations (not just reading some sensors) it may make sense to switch to a higher CPU speed, and do the calculation in less time and go back to sleep more efficient.
  • On the other hand, if your CPU is awake just to wait for some sensor readings and just burning cycles while waiting, a slower CPU speed is more beneficial.
  • The off-the-shelf Arduinos are not suitable, because they have voltage regulators, power LEDs, etc. However the processor (Atmega328P) can sleep at 100 nA (with the watchdog disabled). I'm not sure the PICs are much better. 100 nA is pretty low, batteries discharge faster than that. – Nick Gammon Mar 12 '16 at 1:38
  • Interesting! I have no experience in low powering the Atmega328P, so I did some digging of datasheets. ATMega328p 3V 4MHz = 1.7mA 5V 8MHz = 5.2mA PIC18LF1xK50 3V 4MHz = 0.5mA 5V 24MHz = 4.7mA Atmega power down mode, WDT disabled, 3V = 0.1uA power down mode, WDT enablede, 3V = 4.2uA, PIC power down, WDT disabled, 3V 0.07uA power down, WDT enabled, 3V 1.37uA max. Doh, this formatting! So PIC is 70nA in sleep, and even if it runs with PLL at 24MHz, consumes less than a 8MHz Atmega328P. Of course we're comparing apples to oranges because of different architecture of the cpus. – Gee Bee Mar 12 '16 at 1:53
  • Nevertheless, as Microchip has purchased Atmel, they're one family now! Time to develop the GRAND microcontroller now :) – Gee Bee Mar 12 '16 at 1:55
  • So PIC is 70nA in sleep - well I won't quibble over 30 nA, which is all the difference is. It's hard to measure that anyway. as Microchip has purchased Atmel - uh oh. – Nick Gammon Mar 12 '16 at 3:48

Arduinos are for rapidly getting something going without having to know much about the underlying electronics and microcontroller. As a result, some design tradeoffs were made for you, generally optimized for development simplicity.

You now have a different primary concern, which is low power consumption. If that is truly important, then you have to design the system with that goal up front. This means starting with the bare microcontroller, designing the electronics around it carefully to minimize power, and designing the firmware architecture to minimize high-power cycles and maximize sleep time.

You are asking where to strap the big engine on a Honda Civic to make a high performance racing car. You can make a Civic higher performance, but to get really high performance you have to start with that goal from the beginning.

  • Then I guess my question is how to make my Honda Civic go as far as it can on one tank, given i'm not going to make a space ship. in sleep mode the biggest use of power is in the regulators. and thats kinda what the question was about. im not looking for the BEST MOST efficient solution in the world. just some help to a guy who stuck some wire in an arduino and wants it to live for more than 2 days on a battery, if i get no sun, and how to make use of the panel so it will always help(if there is sun) – Arthur Mar 9 '16 at 14:33

I have a project along those lines. I am reading temperature, humidity, and light level and logging it, with a timestamp, to an SD card.

Schematic (click for larger image):

Temperature sensor


Temperature sensor photo

It was designed with low power in mind. It runs from 3 x AA batteries which I think I have only changed once since I made it (in August 2013).

Also see my page about power saving.

I don't see any problem with running it directly from 3.7V - you would need to slow the processor down to 8 MHz (which I did anyway in that project).

The code (available here) compiles under the Arduino IDE.

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.