Dan's Previous HA Systems
My HA system is currently in its third generation. This page describes the first two generations.
To read about my current system, click here.
I started with an HCS II system from Circuit Cellar. This is a stand-alone
single board computer aimed at the home automation market. It had 16 digital
inputs (DI's), 8 digital outputs (DO's) and 8 analog inputs (AI's). It supports
an rs-485 network connection which allows additional IO units, LCD interfaces,
IR interfaces, etc. to be easily added using only 2 twisted pairs of wire (1 pair
for power, 1 pair for the rs-485). Speech, phone and other interfaces are also available.
The HCS is programmed using a simple, Basic like language.
For a complete description of its features and options check out the
Circuit Cellar Web Page.
In addition to the main processor (HCS2-DX) I had an LCD-Link module, a PL-Link module
and a BUF-Term module.
The LCD-Link sits on the rs-485 network and provides you with a user interface
to the system. It supports most 80 character LCD's. These are usually
configured as either 2 lines x 40 characters (2x40) or 4x20. It also supports
4 push buttons and 3 LED's. With a slight modification, I was able to get my
LCD-Link to support a 4 line by 40 character (4x40) display (I just didn't think
a 4x20 or 2x40 was going to be big enough).
The PL-Link also sits on the rs-485 network. It provides the X-10 interface
by connecting to a TW-523 module plugged into a nearby outlet.
The BUF-Term option provides isolation for the 16 DI's and the 8 DO's. It also
has handy screw terminals for all 24 IO points to facilitate connections.
As far as functionality goes... it did the following:
- All first floor lights, outside lights, garage lights and lights in my
workshop are X-10 controlled.
- The LCD-Link is mounted on the kitchen wall for easy access to all
home automation functions.
- Outside lights come on in the evening, varying randomly by up to 30
minutes.
- Outside lights go off in the morning, varying randomly by up to 30
minutes.
- During the day, X-10 OFF commands are sent to outside lights every hour.
This is because I have 2 sons who like to push buttons.
- During the night, X-10 ON commands are sent to outside lights every hour.
- A motion detector in the kitchen was used to turn on the kitchen light
whenever motion was detected between 8pm and midnight. The light was then
turned off after 5 minutes of no motion.
- If motion in the kitchen is detected between midinght and 6am, then only
the little light over the sink is turned on so that you are not blinded
when you walk into the kitchen in the middle of the night.
- If the garage door is open and it's night time, a buzzer is sounded every
15 minutes. You can, of course, override this if you want the door open.
- When you push the button on the LCD-Link to enter BED mode, the light
at the bottom of the steps turns on (so you can see where you are going)
and then all first floor lights turn off. Two minutes later, the light at
the bottom of the steps is turned off.
- When AWAY mode is active and night time comes along, lights are turned on
and off just as they would be if we were home. If bedtime rolls along and we
are still away, BED mode is automatically entered and the lights go thru the
above mentioned sequence. Thus, whether we are home or away, the house always
looks the same from a lighting point of view.
- My workshop door is locked always and is accessed via a keypad and electric
door strike. The kaypad is a Radio Shack model intended for their alarm systems.
When the correct combination is entered, a DI is activated, which in turn
causes a DO to be set for 1 second that energizes a relay that supplies the AC
voltage to the door stike. This also causes the workshop lights to be turned on.
This is just like being "buzzed in" in an apartment building. In case of a power
failure that lasts longer than 35 minutes (UPS, remember), a key can be used to
unlock the door.
I was very happy with the HCS2-DX, but I wanted to add some features that just
weren't available for it yet. Mainly, these are voice recognition and voice mail
capabilities. So, I decided that for the ultimate in flexability, I would use
an IBM compatible pc and write my own code to do what I wanted.
Main Features
- Voice Recognition
- Text-to-Speech
- Voice announcement of callers using caller ID
- X-10
- Video distribution
- RS-485 network
Computer Hardware:
My HA pc was put together with almost all used components. I scoured several
local used computer stores to find the necessary parts.
- 486DX-25 motherboard with 8 slots in a desktop case
- 8 meg RAM
- 250 meg IDE hard drive
- 1.44 meg floppy drive
- VGA card and 14" mono VGA monitor
- IDE hard/floppy/io controller (1 par, 1 game, 2 ser)
- Multi-port serial card - 4 ports share 1 IRQ (COM5 - COM8)
- 32 bit digital I/O card
- Linksys ethernet card (used to be arcnet)
- TV Coder - VGA to TV converter (by Creative Labs)
- ACE 5000 - data/fax/voice modem, sound card, cd-rom interface
- Sound Blaster 16 ASP MCD sound card - used for voice recognition and
text-to-speech
Other Hardware:
- UPS - APC Personal Powercell, 250VA (170 watt)
- 12 volt, 3 amp regulated power supply
- Marrick LynX-10 processor - X10 interface
- BUF-Term from HCS system (above) for isolation on digital I/O
- LCD-Link from HCS system (above) for user interface
- Info Express ethernet hub
- RS232 / RS485 converter - used to talk to the LCD-Link
- RS422 / RS232 converter - used to monitor traffic on the RS485 network
- Radio Shack Multiple Video Distribution System (MVDS) (2 of 'em)
- Ramsey FM stereo transmitter - used to broadcast caller ID and house status info
anywhere in the house/yard.
- Motion detectors
- One-for-All IR Command Center (URC 3000)
- One-for-All-6 Universal remote control (URC 4005)
- X-10 RF receivers (2)
- X-10 RF transmitters (wall mount, hand held, keychain)
- X-10 plug-in transmitters
- X-10 wall switches and appliance modules
- 6400 series in-wall X-10 transmitters (2)
- Sears Craftsman garage door opener with 3-function remote and a Plug In
Remote Light Control module.
- Casio "Wrist Remote Controller" watch - IR capable, learning watch!
- Panasonic B&W surveillance camera
Hardware Configuration
- The UPS powers everything except the monitor. It is able to keep everything
running for about 35 minutes if the power fails. Of course, X10 does not work if
the AC fails, but everything else does. The security system is powered from
a separate UPS, capable of powering the alarm system for days.
- The LynX-10, by Marrick Limited, handles the X-10 to PC interface.
The LynX-10 connects to a PC using a standard RS232 serial port. It
connects to the power line via a TW523 module and standard RJ-11 phone cable.
It is available as either a kit or fully assembled.
The LynX-10 is great because you don't have to constantly poll it to see
if an X-10 command has been received. The LynX-10 monitors the power line
and when it 'hears' an X-10 command it sends a message over the serial port
to the PC. This generates an interrupt which you can then process by
writing an interrupt service routine in DOS, or by responding to a message
in Windows.
You can send an X-10 command by sending the command to the LynX-10 over
the serial port. The LynX-10 immediately passes it on to the TW523.
Other features include:
- Collision detection & auto re-transmission
- Check if AC power is present
- Optional - 8 DO's and 8 DI's
- and much, much more!
You can contact Marrick Limited
for more information. The Lynx-10 is also sold at several of the suppliers
listed in my Home Automation Index.
- The 12 volt supply powers all motion detectors, keypads, LCD-Link,
BUF-Term, relays, 232 to 485 converter, etc.
- 5 of the 7 serial ports are all in use at the same time with the following
functions:
COM1: Mouse
COM2: Reachout
COM3: ACE 5000 modem
COM4: does not exist
COM5: LCD-Link (RS-485 network)
COM6: Marrick LynX-10 X10 interface
COM7: not used
COM8: not used
- Parallel port - not currently used
- Digital I/O card - This card is organized as 4, 8 bit ports. I am
currently only using 3 of the ports. One is for outputs and 2 are for
inputs. These 3 ports all go thru the BUF-Term for isolation. One of
the input ports is configured on the BUF-Term to sense contact closures,
the other is configured to sense inputs that are in the +/- 30 volt range.
The BUF-Term also provides good drive capability on the DO's, so I can
drive relays, LED's, piezo buzzers, etc., directly.
- The Info Express ethernet hub provides 8 UTP ports and 1 BNC port. It connects
a Win95 PC and a laptop via UTP. I ran coax from the BNC port to Alex in my workshop.
This allows me to easily add more PC's to the network in my workshop by just daisy-chaining
more pc's together. Currently, I have 1 Win95 and 2 WFW 3.11 pc's on the network.
- The RS-232 to RS-485 converter is used on COM5 to talk to the LCD-Link.
This is a half duplex 485 network. I built the converter using wirewrap
techniques. It is of the automatic variety, which means it detects when I
am sending data and automatically switches to TX mode. It then switches back
to RX mode when I am done sending data. Without the automatic feature, you
must toggle RTS (or some other serial handshaking signal) in order to switch
from TX mode to RX mode and vice-versa.
- The RS-422 to RS-232 converter is only used for debugging. RS-422 is
basically the same as RS-485, except 422 is full duplex since there is no
facility to tri-state the transmit driver. Thus, I attached the RX side of
the 422 converter to the 485 network in order to use another pc to monitor
the network traffic.
- Radio Shack MVDS - The 2 Radio Shack MVDS units are used to put the Alex VGA screen on channel 14,
the VCR on channel 66, and a surveillance camera on channel 18. Thus, tuning
the TV to any of the above channels lets me see the corresponding picture.
Channel 3 is normally used, and is the output from the cable converter box.
The MVDS combines all 4 signals and puts each one on its own channel. The
MVDS has been discontinued, but still may be found at some RS warehouses. It
sells for about $20 or $30 USD and is only mono (no stereo).
- The ACE 5000 is a data/fax/voice modem, sound card and cd-rom interface
all on one card. It accomplishes this by using the new MWave DSP from IBM.
There are currently several cards on the market using the MWave DSP. These cards
all incorporate a data/fax/voice modem, sound card and cd-rom interface into
a single card. Click here to go
to a WEB page dedicated to the MWave DSP. This page includes a description
of the MWave DSP, a list of MWave based cards, software updates, etc.
I purchased a development kit from IBM for $25 that provides an API for the
MWave DSP on the ACE 5000 card. For some reason, this development kit is not
as readily or easily available as it was a year ago when I purchased it.
- Description of other hardware coming soon...
X-10 Configuration
- Housecode A - first floor lights
- Housecode G - garage lights
- Housecode H - workshop lights
- Housecode O - outside lights
- Housecode P - Christmas lights (only up at Xmas time)
- Housecode D - used for sending commands/messages. For example, when D1 ON
is received by Alex, Alex turns on the family room lights and dims them to
a pre-set level. Other D commands turn on lamps (that have no light switch),
turn off all lights downstairs except for the family room (this is for when
we are watching a movie at night and my kids have left every light on in the house),
and turn on/off the baby room monitor.
- All X-10 light switches have been modified to allow local dimming and to
disable the slide switch that prevents the switch from receiving X-10 commands.
The slide switch was disabled by soldering the little metal bar in place.
This also prevents the arcing problem that I have had on several switches.
How these darn things ever got UL approval, I'll never know. The FAQ has info
on these mod's.
- Appliance modules are used for the flourescent workshop lights.
- Both 2-way and 3-way wall switch configurations are in use.
Software
Alex runs under Windows 3.1. It is comprised of 5 different programs, all of
which I wrote using Borland C++ 4.02. I only use C, not C++. The programs
communicate with each other using global Windows messages, no DDE or OLE.
The global messages are sent using the Windows SendMessage function. Some of the
messages are replied to using the Windows ReplyMessage function.
I use Turbo Commander Pro for my serial port driver. This is needed so that the 4
ports on the multi-port serial card can share 1 IRQ. This sofwtare is really cool
because it lets you monitor all comm port activity.
I use Voice Assist for voice recognition and Text Assist for text to speech.
The 5 programs that make up Alex are:
- Alex - main program
- Alex-IO - Interface to digital IO card
- Alex-485 - Interface to LCD-Link (RS-485 network)
- WIX - Windows Interface to X-10
- MWPhone - Answering machine, caller id announcer, DTMF button detection,
and other phone functions
Alex description
Alex is the main program. It basically just "listens" for messages from the
other 4 programs and then acts accordingly. Alex does not interface directly
with any of the HA hardware. Instead, it sends a message to one of the other
programs and then that program accomplishes the task. For example, when the
workshop keypad combination is entered a bit changes on DI port 1. The Alex-IO
program sees this change and sends a Windows message stating which port changes
and what the new byte value is. Alex receives this message, examines the
byte to determine what has happened, then sends a message to Alex-IO to set the
electric door strike DO bit, sends a message to WIX to send an H2 ON command
(workshop lights), then waits 1 second and sends a message to Alex-IO to turn
off the electric door strike DO bit.
Alex also has several timers that allow for doing things at regular intervals.
And, it monitors the time of day so that various events can be scheduled to
occur at certain times.
Alex is the program that I change and re-compile when I want to change/add/delete
features. All of the other programs remain unchanged.
Alex-IO description
Alex-IO monitors the digital input ports on the 32 bit DIO card. It is
configured to scan each port every 100ms (10 times per second). It also
controls the DO port. Alex-IO both sends and receives messages. It sends
a message when a DI byte changes. The message includes the port and the
byte value. It receives messages in order for Alex to set/clear DO bits and
to request the status of the DO and/or DI ports.
Alex-485 description
Alex-485 communicates over the RS-485 network to the LCD-Link. It can be
expanded to talk to other devices on the 485 network, but the LCD-Link is the
only 485 device I have so far.
The LCD-Link provides an interface to a LCD screen, 4 DI's for push buttons
and 3 DO's for LED's.
Alex-485 is configured to poll the LCD-Link every 500ms (1/2 second) in order
to get the status of the buttons. The LCD-Link returns the status as a BCD
number (each button has a value of 1,2,4 and 8). If the button status is 0
then no buttons were pressed since the last query (polling). If the status
is 4 then button 3 was pressed, if the status is 5 then buttons 1 and 3 were
pressed, etc.
Once it is determined that a button was pressed, Alex-485 sends a message
with the status value.
Alex-485 also receives messages in order to display text and to turn on and
off the 3 LED's. Text messages are sent to Alex-485 by sending a pointer
to the string that you want to display. This allows Alex to display any
string it wants simply by sending a pointer to the string to Alex-485.
Here is a quick overview of how the LCD-Link works and how I use it:
The LCD panel I use is a 4x40 type I bought from an electronics mail
order store. It is driven by an LCD-Link board that is part of the
HCS-II home automation system from Circuit Cellar Ink. I mounted the
LCD panel in a custom enclosure I made myself out of wood and then
painted the same color as the kitchen walls - it looks really nice.
It is about 3/4 inch thick and mounts right on the wall, it is not recessed.
It holds only the LCD panel, LED's and buttons. The electronics are housed
in a separate plastic project box that is about 12 inches away and is mounted
on the basement stairway wall almost directly behind the LCD enclosure. Here is
a drawing of the LCD enclosure.
|-----------------------------------------------|
| |
| L ---------------------------------------- |
| |Monday, Jan 20 9:25 Day | |
| L | LCD Panel (4x40) | |
| | | |
| L |Menu 1 HOME/away bed/AWAKE Play | |
| ---------------------------------------- |
| B1 B2 B3 B4 |
|-----------------------------------------------|
The L's are LED's and the B's are buttons. The top row displays the
date and time and the current mode - Day or Night. The middle 2 rows
are used to display status info. The bottom row
displays the menu. I have shown Menu 1, or the Main Menu. It
defines what function the button directly below each menu item will
perform. If I push B4 then messages will be played from my voice mail
program. If I push B3 then bed mode will be initiated (turning off
lights, etc. and the menu for B3 will change to 'BED/awake'
(capitalization change) to show that the mode is now BED. Pressing B1
changes its caption to 'Menu 2' and displays new captions for B2 B3 and
B4. It goes up to menu 4 and then it cycles back around to menu 1.
The LCD-Link interface is really easy. It has a unique ID on the network
of 'TERM0'. I think the protocol supports up to 4 lCD-links, but I'm not
sure. Every .5 seconds (I could go faster) I send out a command 'TERM0 Q' which is a query
command for the button status. If no button was pressed then a zero is
returned. Each button has a value of 1,2,4 or 8, so it is easy to tell
which button(s) was pressed. If I get a value back of 1 then I know the
menu button was pressed and I update a variable in my software so I know
which menu is active and then I send the following string:
TERM0 S="Menu 2 Caption 1 Caption 2 Caption 3 Caption4"
which updates the text on the LCD to the menu 2 text. Thus, my software
keeps track of which menu is active and then takes a different action for
each button press depending on the active menu. There is another
simple command to turn on and off the LED's.
I did use a trick to get the LCD-Link to talk to my 4x40 display, since
the LCD-Link is only meant to support a 2x40 or 4x20 (80 characters max)
display. I basically use a DO from my digital output card to decide
which part of my LCD is active - top 2 rows or bottom 2 rows. Then each
command I send (TERM0 S="some text") only goes to the selectd half of the
display. The LCD-Link also supports cursor positioning commands so you can put the text
wherever you want.
A simpler solution would be to use the new AnswerMan chip or the Basic
Stamp to implement something similar, but neither was available when I
made this. The AnswerMan can be found at Micromint
and there was an article on it in the Jan '97 issue of Circuit Cellar INK.
The HCS-II HA system has many other devices that are compatible with this
485 network and can all be a node.
WIX description
WIX stands for Windows Interface to X-10. WIX's job is to interface
to the LynX-10 card. The LynX-10 card provides an interface between a pc,
via a serial port, and a TW523 interface module. The LynX-10 is constantly
listening for X-10 commands. When it "hears" one, it sends a message over
the serial port to the pc. This in turn generates a Windows message that
tells WIX to read the serial port and then decypher the command.
Once WIX has de-coded the X-10 command, it sends a global Windows message
indicating the house code, unit code and command.
WIX also receives messages in order to send X-10 commands.
MWPhone description
MWPhone stands for MWave Phone.
MWPhone currently functions as an answering machine, a caller id logger and
announcer, and it reports various phone related events. However,
MWPhone is under development and only the caller id function is presently
used all the time.
The caller id function displays each caller's name
and number and time of call in a listbox. This also serves to keep a history
of the most recent callers (set to 50 for now). Each caller is also
announced by playing a WAV file with the callers name. If the caller's
number is not found in the database, then a WAV file saying "stranger" is
played. WAV files saying "blocked" and "unavailable" are also played for
those 2 types of calls.
The sound WAV file is distributed around the house by sending the line level
speaker output from the ACE 5000 to amplified speakers on the HA pc, to a
Radio Shack pocket amplifier in the kitchen and to the Ramsey FM transmitter.
The FM transmitter allows me to use any FM radio to listen to caller id info,
if I'm going to be out of hearing range of one of the speakers.
MWPhone sends messages to indicate ringing, on/off-hook, button presses,
caller id info and more. It also receives messages so that Alex can control
various phone functions. For example, a button on the LCD-Link acts as the
PLAY button. Pressing it causes MWPhone to play all the messages you got
while you were out.
Eventually MWPhone will be able to screen calls and play different messages
depending on who is calling. It will also be able to weed out the junk calls
we all get offering us credit cards, new long distance service, asking for
money, etc. It will also allow you to control your house from any phone in
the world.
Functionality
- All first floor lights, outside lights, garage lights and lights in my
workshop are X-10 controlled.
- The LCD-Link is mounted on the kitchen wall for easy access to all
home automation functions.
- Outside lights come on in the evening.
- Outside lights go off in the morning.
- During the day, X-10 OFF commands are sent to outside lights every hour.
This is because I have 2 sons who like to push buttons.
- During the night, X-10 ON commands are sent to outside lights every hour.
- A motion detector in the kitchen is used to turn on the light over the island
whenever motion is detected between 8pm and midnight. The light is then
turned off after 5 minutes of no motion.
- If motion in the kitchen is detected between midinght and 6am, then only
the little light over the sink is turned on so that you are not blinded
when you walk into the kitchen in the middle of the night.
- When you push the button on the LCD-Link to enter BED mode, the light
at the bottom of the steps turns on (so you can see where you are going)
and then all first floor lights turn off. Two minutes later, the light at
the bottom of the steps is turned off. Alex also sends commands to make sure the
outside lights are on and the garage and workshop lights are off.
- My workshop door is locked always and is accessed via a keypad and electric
door strike. The kaypad is a Radio Shack model intended for their alarm systems.
When the correct combination is entered, a DI is activated, which in turn
causes a DO to be set for 1 second that energizes a relay that supplies the AC
voltage to the door strike. This also causes the workshop lights to be turned on.
This is just like being "buzzed in" in an apartment building. In case of a power
failure that lasts longer than 35 minutes (UPS, remember), a key can be used to
unlock the door.
- When someone calls, a WAV file is played between the second and third
rings announcing the caller. For example, if my in-laws call, Alex says
"Mom and Dad". If my friends, Gene and Laura call, Alex says "Gene and Laura".
Alex says "Blocked" and "Unavailable" for blocked and out-of-area calls,
respectively. If the caller's number is received, but not found
in the database, then Alex says "stranger".
- The baby monitor transmitter and receiver are plugged into appliance
modules so that the whole system can easily be turned on and off. An X-10 wall
switch is used to turn on and off each unit at the same time.
- An X-10 wall switch turns on the family room lights and then dims them
to a pre-set level.
- Another wall switch turns on and off the table lamps on each side of the
couch. Each lamp is plugged into the same lamp module.
- Finally, yet another wall switch turns off every light downstairs, except
for lights in the family room. This is great when my kids have left every
light on in the house and I don't feel like walking around to turn them off.
- My One-for-All 6 remote control controls the TV, VCR, cable box,
stereo receiver, cd player and HA functions.
- My Casio watch can control the TV, VCR, cable box and a few HA functions.
- The middle button on my Sears garage door opener in my car activates a DI to Alex.
This in turn causes several WAV files to be played that indicate the status of the house.
Since the sound card output is attached to the FM transmitter, this info is available
on my car radio as I am pulling up to my house. This allows me to determine if any doors
or windows were opened while I was away, or anything else I want to know.
Features under construction
- Voice recognition - I actually already had this working in kind of a
kludge a year ago. But, I am finally ready to incorporate it in a more
elegant way. I have mounted a microphone in my family room and am working
on recognition from anywhere in the room. It works pretty well if I get my 3
kids and wife out of the house (or I gag 'em).
- Text to speech - This, too, has been working before. It uses Text Assist
and a SB16 ASP sound card. I have also just started trying out a software
only text-to-speech program and development kit called Eloquence. Anyone know
of any other software only text to speech program? If so,
drop me a quick e-mail and let me
know what it is, where it is, how much it is, etc.
- Phone control of everything. I have the schematic of what I am going to use.
I just need to build it.
- Caller ID screening out of unwanted callers.
- Re-write all code in Visual Basic for ease of programming, portabilty, etc.
- Network access to all HA functions and status. Once all code is in VB, I have
a VBX that will allow me to use either TCP or UDP protocols. I would like for any
pc on the network to be able to get status info and to send commands to Alex.
Back to the Home Automation Index
dhoehnen@infinet.com