Watchdog timer and power management

I am after a bit of guidance with a project. It has been a good few years since I did any electronics, so I might well be a bit rusy or missing a few things. So, if there is anyone out there that would be willing to cast their eye over the attached circuit diagram and point out the errors, I would be most grateful.

The project;
I am making a remote monitoring station, with Arduino Uno, GSM Shield and a couple of environmental sensors. The goal is to take reading every 20 minutes or so, and upload the data to a server. I have the thing working, apart from a few problems;

  1. Occasionally, when a GSM connection is lost at the wrong time, the GSM library/shield hangs. There has been a bit of discussion about this in the fora, and a watchdog timer seems to be the consensus.
  2. The power consumption is quite high. Even not doing anything, the Arduino+GSM shield draws ~80mA. One of my sensors also draws ~80mA. For most of the time, this is a waste of battery life. I am solar powered, with a 12V car battery.

Proposed solution;
Build a combined hardware watchdog timer and power-off timer. The TLC555 in astable mode is a simple, low cost timer that seems to be suitable.

The timer needs to power up the board for a maximum of 10 minutes at a time (5 minutes for the sensor to settle, and 5 minutes to attempt to send out the data). There are 3 possible outcomes;

  1. Data sent correctly - terminate the timing cycle, power down the Arduino and wait for 20 minutes before trying again.
  2. Data send failed - terminate the timing cycle, power down the Arduino and wait for 5 minutes before trying again.
  3. Arduino hangs - watchdog times out, power down the Arduino and wait for 5 minutes before trying again.

Having 2 different time delays complicates things, but I can deal with that in Arduino software by counting 4 x 5 minute delay periods and having a count stored in EEPROM memory. The components for a 5 minute delay time are more realistic as well.

The attached circuit diagram is what I have come up with.
Upon power up, C2 is discharged, The TLC555 output on pin 3 is high and the Arduino is unpowered. pressing S1 allows C2 to charge rapidly, to save having to wait for the timing cycle. To save the cost of a larger, high quality timing capacitor, the switching threshold voltage is increased by R4 and R5. C3 (hopefully) reduces instability from power line fluctuations. C4 (again, hopefully) slows the turn-on of Q2 to reduce inrush current to the capacitors on the Arduino board. Once the Arduino has completed what it is doing, it takes digital pin 5 high, and this discharges C2 via R3 and Q1, advancing the timing cycle and removing power from the Arduino and sensors.

Corrections, suggestions are all welcome! I am in Canada, and am also looking for a place to order the bits from…


Have you considered using the Arduino's built-in timers? There is also a watchdog timer for when your Arduino hangs. How do you differentiate between successful data transmission and failure? For a Canadian supplier check out

Hi MrsCrossroads, Thanks for the link to a supplier - they look good.

I had a look at the inbuilt watchdog timers, and I need a lot longer delay than they could provide. I could use a count variable and increment it every time the watchdog interrupts, but it seemed a lot of effort, and wouldn't solve the power consumption problem.

I check for a successful data transmission by waiting for a 200 OK response from the webserver I am uploading data to.