Hardware Modification
Stage | idel Power | Feature lost by modification |
---|---|---|
Initial | 0.120W | - |
w/o 78M05 | 0.096W | Option to use 6v-12v external power |
w/o Power LED | 0.081W | Power indicator |
w/o diods | 0.072W | Extra protection from mess with -/+ |
software sleep | 0.002W | Simple code |
Software optimization
Code with delay() | 0.072W | 0.120W |
Code with cpu_sleep() | 0.002W | 0.041W |
Blinking Led
void setup() { pinMode(1, OUTPUT); } void loop() { digitalWrite(1, HIGH); delay(1000); digitalWrite(1, LOW); delay(1000); }
Low Power Blinking LED Example
#include <avr/wdt.h> #include <avr/sleep.h> #include <avr/interrupt.h> #define adc_disable() (ADCSRA &= ~(1<<ADEN)) // disable ADC (before power-off) #define adc_enable() (ADCSRA |= (1<<ADEN)) // re-enable ADC void setup() { // Power Saving setup for (byte i = 0; i < 6; i++) { pinMode(i, INPUT); // Set all ports as INPUT to save energy digitalWrite (i, LOW); // } adc_disable(); // Disable Analog-to-Digital Converter wdt_reset(); // Watchdog reset wdt_enable(WDTO_1S); // Watchdog enable Options: 15MS, 30MS, 60MS, 120MS, 250MS, 500MS, 1S, 2S, 4S, 8S WDTCR |= _BV(WDIE); // Interrupts watchdog enable sei(); // enable interrupts set_sleep_mode(SLEEP_MODE_PWR_DOWN); // Sleep Mode: max } void loop() { pinMode(1, OUTPUT); digitalWrite(1, HIGH); sleep_enable(); sleep_cpu(); //Set the LED pins to LOW. This turns it off pinMode(1, OUTPUT); digitalWrite(1, LOW); sleep_enable(); sleep_cpu(); } ISR (WDT_vect) { WDTCR |= _BV(WDIE); }
Source: https://alexgyver.ru/pump-sleep/
Source: http://www.gammon.com.au/power