1

Could someone please demonstrate how to use a counter with the Arduino 'low power' library to wait for 10 minutes then digitalWrite 4000, HIGH and loop. (I don't mean the simple 'blink' sketch).

I'm trying to save as much power as possible, so any advice is appreciated.

Thanks!

  • 1
    For low power you really need a better board (or own design). The Uno burns a lot of power on extra circuitry and LEDs. Low power library (mode) will not give much. The board will still draw approx. 10 mA. – Mikael Patel Mar 15 '17 at 15:20
  • And using counter means you can't go deeper than to the IDLE mode and it's not so "saving" at all. You can't use Timer2 in asynchronous mode on UNO, as there is crystal resonator for the main oscillator on the same pins. – KIIV Mar 15 '17 at 15:23
  • 1
    In principle, you put the arduino in sleep mode (powerdown) and configure the watchdog timer to wake it up after a certain length of time. Since the maximum time is about 8 seconds, you have to cycle through about 80 wakeup cycle to achieve your 10 minutes. Here is a good guide: gammon.com.au/forum/?id=11497 – 6v6gt Mar 15 '17 at 20:42
1

Your problem here is your 10 minutes mark. If you're willing to take a somewhat more complex route, you could use a low-power, programmable, external timer like TPL5110. You can set an interval of up to 120 minutes by selecting the appropriate value of the programming resistor.

This kind of timers can be used to drive the gate of a logic-level P-channel MOSFET that acts as a switch for the power line of the Arduino.

enter image description here

Then, you simply you do all your stuff on the setup() function and leave loop() empty. You can switch off the Arduino by sending back a DONE signal to the TPL5110 at the end for your setup().

Timing

If, for whatever reasons, you really want your Arduino to be running for exactly 3 seconds, then you should run a timer in it (beware: not related in any way with TPL5110). Set it up so you the ISR of the timer breaks a do-while waiting loop just before the line of code that sends back the DONE signal.

1

Agreed with what most others have already mentioned; The Arduino as-is is not suitable for low power operation - it is best to turn it off completely. The circuit below should do what you want, and is based on a very simple and cheap IC, the 555 timer.

schematic

simulate this circuit – Schematic created using CircuitLab

A similar version of this has been working for me for about 2 years in a remote sensing setup. A few things to note to make sure that it works;

  1. This needs the TLC555 chip which is a CMOS IC. The TTL version (NE555) will not work with such high value timing resistors.

  2. The timing capacitor (shown as 141uF, just use 3 x 47uF in parallel) needs to be a tantalum capacitor. The normal electrolytic version has too high a leakage current.

  3. As shown, this should turn off the Arduino for about 580s, and on for 120s. To turn off the Arduino sooner, drive digital pin 5 high. This will discharge C1 through R3 and Q1 quickly (about 500ms).

  4. To change the delay times, alter R1, R2, and C1. The datasheet has all the equations that you need for this.

  5. it would probably be wise to put a bypass capacitor between the supply rails very close to the TLC555 chip. 10uF should do.

  6. This circuit should draw around 360uA while the Arduino is off.

One final thing - the task that you are using the Arduino for sounds pretty simple - driving a digital line high for 4 seconds every 10 minutes. I guess that you have more to it than that, but if not, then you could save yourself the cost and complexity, and do away with the Arduino completely. In that case, R1 should be about 6M1, and R2 about 41K, you can remove Q1, D1, R3 and R6, and whatever you are driving goes in place of the Arduino.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.