µPoff is a circuit placed high-side between your power source and your microcontroller. It is designed to cut power to the µC until a external sensor activates it. Additionally a onboard RTC can wake the µC in programmed intervals.
It is mainly aimed at battery powered sensor applications like door sensors, which also should report their battery level and presence regularly.
Remove the positive connection between your power source and µC. Connect the battery to VCC and your µC to OUT. Additionally connect GND to your existing ground. The external sensor should pull ^SW low to activate the circuit. Lastly run a wire between one of your GPIO-Pins and ON. If you want to use the included RTC you'll also need to connect the I²C-Lines SDA and SCL. On AVR and STM32 based microcontrollers you'll have to use the predefined I²C pins, on ESP8266, ESP32 you can use any free GPIO.
Usually power only stays on as long as ^ON is low, however most tasks take longer to complete. To keep power on it is crucial to drive ON high as soon as your µC is started. When finished you can turn off power by driving ON LOW.
- Wire.h (usually included)
- elpaso Rtc_Pcf8563 (https://github.com/elpaso/Rtc_Pcf8563)
#include "upoff.h"
UPOFF upoff;
void setup() {
upoff.on(D1); //ON connected to D1
}
void loop() {
//do something
upoff.off();
}
#include "upoff.h"
UPOFF upoff;
bool reason;
void setup() {
reason = upoff.on(D1, D2, D3); //D1 = ON; D2 = SDA; D3 = SCL
//reason = upoff.on(D1, true); //Use predefined I²C-Pins
/* Set clock */
while(!upoff.isValid(false)) {
upoff.setTime(20, 02, 02, 02, 02, 02); //2020-02-02 02:02:02
yield();
}
}
void loop() {
pinMode(LED_BUILTIN, OUTPUT);
if(reason) {
/* either first boot or caused by RTC */
byte loops=5;
while(loops > 0) {
digitalWrite(LED_BUILTIN, LOW);
delay(100);
digitalWrite(LED_BUILTIN, HIGH);
delay(100);
loops--;
}
}else{
/* manual trigger */
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
}
/* Sleep for 15 seconds */
upoff.off(15);
}
While sleeping current draw for µPoff is ~10µA. Output should be fine for up to 1A.
The external sensor has to keep ^ON low until the µC is running and driving ON. Some µCs take several hundreds of milliseconds to boot. If your sensors pulse is too short you might be able to stretch it using some R+C magic.