Currently a draft: **Low power design considerations** I started this writeup after I was doing some reading about low-power arduino setups. * Previous designs are pretty inefficient - lets take a look at how inefficient, why and what we can do to design a better power system in the future. First we need to take a look at some of the constraints that we're dealing with: * Rooftop; no place to plug in * Hypothetical design consideration: raspberry pi - is it possible? * About 1A / 5V -> 5W * 6W solar panel charger not enough to charge during the day * 10W solar panel might be enough: https://www.adafruit.com/product/2747 * Cost consideration * Driving down power consumption means cheaper solar panel and cheaper battery * The design choices are different for each hardware platform - this is not a critique on the designers / people * Apple * Cranberry * Dragonfruit * Guava? * The assumption from before: we needed to either run things at 3.3v or 5v. Turns out we could run things at 2.8v - if we take a look at all of the modules, the one with the highest minimum voltage is the XBee at 2.8v. The atmega328p can technically run at a lower voltage. * Need to figure out this situation: if we run the mcu at 2.8v, can we still use the regular usb-serial converter? I think the logic lines will be fine. * XBee power states (sleep mode) * Microcontroller sleep modes * Sensors - how much power do they consume? * How low can we go? (Theoretical) Footnotes: * Links: * http://www.home-automation-community.com/arduino-low-power-how-to-run-atmega328p-for-a-year-on-coin-cell-battery/ * https://lowpowerlab.com/shop/index.php?_route_=Moteino/moteino-r4 * https://www.rocketscream.com/blog/product/mini-ultra-8-mhz-arduino-compatible/ * https://learn.sparkfun.com/tutorials/reducing-arduino-power-consumption/all ====== Example main ====== Using the low power library, here is what the loop function looks like: sleep_counter++; LowPower.idle(SLEEP_4S, ADC_OFF, TIMER2_OFF, TIMER1_OFF, TIMER0_OFF, SPI_OFF, USART0_OFF, TWI_OFF); if(sleep_counter % 15 == 0){ board.sample(&board); }