Pine Mountain group: B
Project group: Power Management
Our team seeks to have a deep understanding of the control boards that we will be using and how it interacts with the sensor, the WiFi board and the battery in order to achieve the most reliable and consistent configuration for the Arduino/sensor system at the same time achieve the minimum power requirements. a number of software and hardware methods to minimize the current draw of the Arduino pro mini. We plan to tackle this goal on software level by optimizing the code using Lightweight Low Power Arduino Library (LLPAL) which supports the following power saving features:
- Supports all sleeping mode of ATmega328P:
- ADC reduction mode.
- Power save.
- Power down.
- Extended standby.
- Selectable sleep duration:
- 15 ms, 30 ms, 60 ms, 120 ms, 250 ms, 500 ms, 1 s, 2 s, 4 s, 8 s, and forever (wake up using other resources) through on chip 125 kHz Watchdog timer. Using sleeping forever duration, the Watchdog timer module is not in use and will further reduce the current consumption by approximately 4 µA.
- Option to shutdown Analog to Digital Converter (ADC) module to further reduce current consumption.
- Option to disable Brownout Detector (BOD) module to further reduce current consumption by approximately 17 µA. BOD module cannot be disabled through software in idle and ADC noise reduction mode. It can only be disabled through fuse setting in these 2 modes.
- Option to shutdown Timer 2 module in idle, ADC noise reduction, power save, and extended standby mode. Timer 2 is used by the core of Arduino for PWM operation.
- Option to shutdown Timer 0, Timer 1, USART0, TWI, and SPI module in idle mode.
Sample code on how to use the library:
The Arduino mini board that we have at our disposal operates at 3.3 volts and its current draw is around 23 micro ampere in Power Down State with Timer enabled (PDS) and around 5 mA in Active State.
Arduino has a number of peripherals:
- Analog to Digital Converter (ADC)
- Serial Peripheral Interface (SPI)
- Timer 0,1,2
- Two Wire Interface (I2C)
- Watchdog Timer (WDT)
- and the Brown-out Detection (BOD)
To save power, the ATmega328P MCU supports a number of sleep modes and unused peripherals can be turned off. The sleep modes differ in what parts remain active, by the sleep duration and the time needed to wake-up (wake-up period). The sleep mode and active peripherals can be controlled with the AVR sleep and power libraries or, more concisely, with the excellent Low-Power library from Rocketscream that was mentioned and linked above.
LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF); puts the board in PDS mode. It disables the ADC and the BOD. Power-down sleep means that all chip functions are disabled till the next interrupt. Further, the external oscillator is stopped. Only level interrupts on INT1 and INT2, pin change interrupts, TWI/I2C address match, or the WDT, if enabled, can wake the MCU up.
LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);, the WDT will be disabled and you would not wake up until an interrupt is triggered.
Another method is to remove the LED that consumes a relatively noticable amount of current. Removing this LED does not affect the functionality as long as we have other methods to check the status of the Arduino.
In the coming weeks our team plans on having a working prototype of the Arduino + sensor system on which we can test and build on.