In a low-energy project, there are two cost you may need to consider:
- The energy cost when it is resting
- The energy cost when it is doing the job
For this blog post, I am listing some tips of reducing both of the above energy consumption which I learned from building the Solaroid project.
Since most low-energy project only active in a small amount of time, the resting energy cost is essential in long term. Specifically for my solar camera project, it affects how long time it lasts after it is charged to full. Some projects can only cost a few microamps and last for years with just a coin cell battery.
Other parts like screens may also have ability to sleep. Sending sleep commands following protocol is usually needed, or there may also be some libraries.
This is very common for things that doesn’t designed for low energy usage. For instance, my ESP32 still draws 10mA when it sleeps. The easy way is to just switch off its power when you don’t need it.
The arduino pin can only drive a little current, so for big load you need a switching circuit. The following is a MOSFET circuit I found, and it works perfectly to drive high current with 3.3V logic.
Quiescent current is the current when there is no output. Generally, switching regulators in modern Arduinos is better than LDOs (Low-dropout regulator).
Some cheap board with the AMS1117 LDO may not be a good choice, since it is listed having a quiescent current at 5-11mA. If that is the case, you can power the board with an external regulator like the MCP1700 which is very popular in the community.
LEDs cost way much energy, so try not to light any of it. Some LEDs are not able to turn off by program, you may need to desolder them manually.
Look! 1.4 mA is saved from removing the LED
Different from resting energy cost, the working cost not only depends on the power but the time to do the job as well. Sometimes, changing one factor may affect the other one. So it is necessary to test each circumstance.
Here are some ways I tried:
- Communication: crank up the baud rate as high as possible. So it takes less time to transmit the same data.
- Camera / Sensor: use as low image quality as you need.
- Component that need a lot of time to run (e.g. E-paper): when it is running, turn off other unnecessary parts.
- CPU Clock rate: doesn’t worth making it slower since it needs more time to run the same program.
- Components: select the one with higher efficiency: e.g. MOSFET > BJT
- Algorithm: write better one, make it run faster.