When controlling a device that can present a danger to
people or property, it is important to include adequate safeguards, in both
software and hardware. I now have a
Raspberry Pi controlling the heater and circulation pump on my hot tub because
the existing controller failed. If the heater
is left turned on indefinitely or if it is turned on without the circulation
pump running, then bad things can happen.
It could produce scalding hot water or even a possible steam
explosion. Therefore, I have built in
multiple safeguards in both software and in hardware.
The system has two temperature probes: one in the water and one directly on the
outlet pipe from the heater. If the
software detects the heater temperature above a certain point it will enter a
failure mode and turn the heater off.
The software also assures that the circulation pump runs whenever the
heater is on. The hardware interface
uses discrete logic chips to add an additional layer of protection. An “and gate” is used to prevent the heater
relay from being enabled if the pump is not also enabled.
Another more complex circuit solves another problem. The software or the computer hardware could
fail, leaving the heater turned on indefinitely. A “clock failure detection” circuit is used
to handle this issue. For the heater
relay to remain turned on, a GPIO pin must be pulsed regularly. If this “heartbeat” is not detected, then the
failsafe circuit shown below will turn the relay off.
555 in astable mode which produces a pulse every 2.079 seconds. |
Here are the components used:
- A clock source, provided by a 555 chip configured in astable mode, produces a pulse approximately once every two seconds. Many sources on-line describe how to use this very common chip. My configuration is shown here.
- An AND Gate, which does exactly what its name implies.
- An inverter, which changes a hi signal to low and a low signal to high.
- Four D-flops, which can be thought of as a single bit memory device. A D-flop will store the value on its data input line when the clock line is pulsed. It can also be set to one or cleared to zero using the PRESET and CLEAR inputs. These are active low, which means they should normally be kept high and briefly set to low to activate the preset or clear function. The Q pin is the output. An inverse of this is also provided but is not used in this circuit.
Here is the complete block diagram of the fail-safe circuit.
Fail-safe circuit |
I used TTL (5V) chips because I have a stock of these from
long ago.
- 555 – Monostable/Astable timer
- 7404 – Inverter (six on one chip)
- 7408 – two input AND Gate (four on one chip)
- 7474 – D-Flop (two on one chip)
Today it may be more appropriate to use CMOS (3V) chips and
equivalents to the TTL chips I used can easily be found.
The Raspberry Pi processor has an internal watchdog:
ReplyDeletehttp://www.adafruit.com/blog/2013/01/18/auto-reboot-a-hung-raspberry-pi-using-the-on-board-watchdog-timer-piday-raspberrypi-raspberry_pi/
http://raspberrypi.stackexchange.com/questions/1517/can-i-send-a-heart-beat-to-hardware-watch-dog-from-my-own-program
hello,
ReplyDeletewould you like to explain the circuit?