Tuesday, January 21, 2014

Interface to Wireless Driveway Sensor

I have a driveway that is over 300 feet long and it is nice to have some advance notice that someone is driving or walking in.  Previously, I have used a very expensive IR beam-break detector.  It gave a lot of false alarms and eventually failed due to a lightning strike.  It also required that I run a very long cable that could survive outdoors, which added more expense.  It’s time to switch to a wireless sensor.

I found this inexpensive one at Harbor Freight ($17 with coupon.)  It is a simple, stand-alone alarm with a receiver that just flashes some LEDs and emits a tone.  It claims to work up to 400 feet and I verified that it works to at least 350 feet, which is good enough for my application.  I created the circuit described below to interface this to my Raspberry Pi based home alarm system.

The receiver can use 3 C-batteries or a 6V adapter (not included) and I found that it would work fine on 5V.  The simplest way to get a wired signal out of the receiver is to connect to one of the LEDs.  This picture shows how I soldered a wire to the positive side of the LED.

This will provide a very brief pulse of 5V, but I need to simulate a normally open switch that connects to ground when triggered.  Also, that signal needs to lasts for at least a second to guarantee that the Raspberry Pi will see it when polling the GPIO states.

I use a 555 timer IC in monostable configuration to provide the longer pulse.  The 555 is triggered by a low pulse, so I also need an inverter.  I chose a 7404 IC because I have a stock of these reclaimed from salvage many years ago.  The output of the 555 is a high pulse that lasts 2.2 seconds with the capacitor and resistor values in this circuit.  This is used to control an NPN transistor that will provide a connection to ground as the signal output.

This circuit uses three wires to connect to the wireless receiver to provide power and read the LED state.  Put it all into a project box with some screw terminals and it is ready to connect.  I will find out over the next several days how reliable this motion detector is.  I am sure it will trigger when any deer come by it.  I am hoping that it doesn't produce a lot of false alarms.  Otherwise I will probably end up disconnecting it.

Here is the interface circuit connected to the receiver.  The white wire on the receiver is the antenna.

And here it is all put together.

Wednesday, January 15, 2014

Fail-Safe Circuit Using Discrete Logic Chips

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.

Tuesday, January 14, 2014

Solid State Relays

I find solid state relays (SSR) very convenient, especially for controlling AC power lines.  They typically include opto-isolation and zero crossing detection (explained later.)  Also, they can be controlled with as little as 3V.  This means that you can connect them directly to a GPIO pin. However, I still prefer to put a transistor in between to prevent drawing too much current from the GPIO.

All these features do come at a price.  The typical SSR that I use costs about $10.  PC board mounted SSRs that handle small current can be as little as $1 each.  The 40amp SSRs that I used to control the heater for my hot tub cost about $25.  (I will describe that project in a later post.)

There is an important point you need to know about when using SSRs - the AC and DC versions are not interchangeable.  When switching AC current, the relay should only turn on or off when the voltage is at zero during the AC cycle.  This is what "zero crossing detection" does and it prevents a large surge from entering the device you are controlling.  I have used a DC SSR to control a lamp and blown the bulb due to the lack of zero crossing detection.  Also, if you use an AC SSR to control a DC load, it will turn on just fine, but it will never turn off since the SSR never detects the load voltage crossing zero.  This has confused many a hobbyist and now you won't be one of them.