Power Supply Reset

I have an Arduino monitoring several sensors (barometric pressure, several temperatures, light, etc.) and sending the results out an XBee to my computer. This works well for about 24 hours, and then things start to deteriorate. The Arduino used to just hang, until I put the watchdog in, and now the Arduino keeping running, but the sensors (mainly the ones on the I2C bus) go though long periods of returning bogus results. My guess is it is probably something about the barometric pressure sensor, but all the problems could be solved by simply resetting all the sensors during the watchdog reset.

The only way to really do this is to shutoff the power supply to everything for a second and bring it back up. The system is currently supplied through a 12V battery charged through a solar cell, and the 12 Volts is fed into a $2 ebay USB car charger power supply based on the MC34063. I was thinking in order to implement a resetting power supply, I would make a power supply using a switching converter that had an enable pin, like the NCP3064, and drive that pin with a 555 setup as a monostable. In the watchdog interrupt, I would just trigger the monostable to shutdown the switching converter for a second, and everything should come up cleanly.

I'm a little worried that this seems a little complicated to do something that is probably pretty common. Is there a simpler way to trigger an full power cycle through the watchdog timer (or an external one)?


Can you reset just the sensors?

The question of how the Arduino can reset itself comes up repeatedly, and the consensus is invariably that this is not the preferred way to solve the problem.

Sounds like you may have memory issues - are you using the String class or anything else that uses dynamic memory allocation? Usually better to find the cause (likely your sketch) and fix it than to build a bandaid solution of resetting the arduino.

Repeated powering up an down is not a cure, it is just papering over the cracks. You have something wrong with your system and it is best if you fix that properly. Also have you got enough decoupling on the supply to all your devices and have you got pull up resistors on the I2C lines because you do need them.

Actually my problem is most likely hardware. I went though a whole lot of memory issues, and I learn a lot about PROGMEM (Strings were abandoned long ago), when I had a SD Logger shield as part of this process, but I pulled the SDFat libraries from the system, and the memory problems went away. I find my problem starts when the temperature inside the weatherproof container gets to about 125 F (the BMP085 says it can handle about 150 F). I've also gone through my code with a fine toothed comb, and while I suppose it is possible I have some place where the code can hang, my gut feel is it is hanging in the wire library, possibly somewhere in an interrupt routine after interrupts are disabled (my anemometer, which is interrupt driven, also seems to miss readings at these times and then get a whole burst of interrupts).

In any case, I'm going to take the advice of the previous poster and reset the BMP085 after each reading (the readings happen once a minute, so that shouldn't be an issue). If that doesn't influence things in the right direction, I'm going to have to figure out a way to bounce the +5V and +3.3V coming out of the Arduino to reset all of the rest of the sensors (the BMP085 is the only thing with an explicit reset pin).

Thanks Kevin