Remote Home Automation
by dathomar in Circuits > Remote Control
70126 Views, 211 Favorites, 0 Comments
Remote Home Automation
Home Automation systems are cool. You can use them to control your music, home temperature, lights, theater systems, sprinklers, HVAC, alarm system etc. Think of the Jetsons without the flying cars or stupid clothes. That's what the 21st century is supposed to be like folks, and it's not going to come on it's own we have to build it.
Back in 2007 and 2008 I made a Home Automation System as a part of my senior design project, and to automate some of the tasks that I come across in my daily life. While this project is still far from complete, and what I present here is just the tip of the iceberg, it is a great starting point to get your feet wet, and to build upon. I'll try and cover all the basics of what and why I chose to implement what I did back then. I'll also post a bunch of upgrade plans that can be easily implemented.
If you have any questions, comments, criticisms feel free to let me know this is my first instructable. If I did the system over today it would be a little different cuz I've learned more since then, tech has changed, and I no longer have a home phone line which the heart of the system relies on. Just don't measure my choices then based upon todays yardsticks. Some parts will get pretty wordy, but I'll try and load in Pics to help with that along the way. Hope you have as much fun with it as I have!
I mean this instructable to illustrate many BUILDING BLOCKS that can be used in your home automation system. Please treat each subsytem as a lego block, if you want to use it go for it, if you think it dumb ignore it.
(As a fair warning I can get wordy skip it if your not interested! Feel free to tell me where I messed up I wont take offense.)
This will also be my entry into the 3rd Epilog challenge, as well as the Makerbot Challenge I wish I had another month to update the info because there is a lot more, but I hope you like it as is.
What Is Remote Home Automation (RHA)?
Examples of home automation include the clapper, the X10 series, and the HAL 2000 software .
Basically think of it as making your home into a giant robot. With different sensors, and systems to make your life easier.
Given above is the block diagram for the system we'll be focusing on. The Phone will be our initial interface for triggering subsystems, later I'll show how you can interface this with the computer and then automate more stuff from there.
There are an endless number of things that you can do to automate your home. Here I'll present a few of the building blocks for one such system. I intend for these systems to be used more like lego pieces so use them as you will. :)
Why Build RHA?
MY reason at the time was my wife was diagnosed with degenerative disc disease and scoliosis. Basically she had a REALLY bad back and couldn't always do everything she liked to do. Occasionally it got bad enough she couldn't get out of bed. So I would try and do extra stuff for her like feed her plants and keep the house clean-ish. That was a little tough with how much I was gone for school and work at the time so I made this system so I could do a few things to help out when the day was particularly not cool for her. (I also needed a senior project which this fit the bill nicely)
The final reason to build a home automation system is so that you can prove just how much work will will do to avoid having to stand up walk across the room and open the blinds. Because darn it all, they are ALL THE WAY OVER THERE!
Materials & Skills List
Here's a small list of materials used. Albeit not complete for everything I will be attempting to describe.
Materials:
DTMF Decoder Sub-system:
1N4001 Diode
10uF Capacitor
100uF Capacitor
0.1uF Capacitor x3
10 nF Capacitor x3
18pF Capacitor x 2
47 kOhm Resistor x2
220 kOhm Resistor x2
270 kOhm Resistor
10 kOhm Resistor x3
1 MOhm Resistor
3.579545 MHz Crystal
7805 Voltage Regulator
Atmel ATtiny2313 (Today I'd use a ATtinyt 4313 or ATMega128/1280)
7-12V Wall Warts
Answering Machine or Phone that can auto-answer
RJ 11 Phone Socket
1:1 Audio Isolation transformer (still available at radioshack believe it or not!)
20 MHz Crystal
Momentary Push Button Switch
1N914 Diode
Project Box
Power connector socket to match wall wart plug.
Piece of perfboard (mine was ~17 x 28 holes)
Optional:
74LS48 7 Segment Decoder (optional)
7 Segment Display (optional)
Small Ferrite beads (possible)
Screw terminal
Plant Watering Sub-system:
555 Timer
90 kOhm Resistor ( 100k Potentiometer is better)
0.1 uF Capacitor
10 kOhm resistor
100 uF Capacitor
220 uF Capacitor
1800 uF Capacitor
0.01 uF Capacitor
1N4001 diode x 2
7805 Voltage Regulator
12 Vdc Wall Wart
5V Solid State Relay or TIP110 NPN Transistor
12 V Solenoid Valve
Perf Board
Project Box
Power Connector that matches wall wart
Screw terminals x 3
Rubber Hose that matches Solenoid Valve
Tank to hold water or adaptors to hook hose up to house water line
"Curtains":
1N914 Diode
10 kOhm Resistor
Pushbutton Switch
110 Ohm Resistor
10 uF Capacitor
100 uf Capacitor
18 pF Capacitor
20 MHz Crystal
ATtiny2313
ULN2003A
Zener Diode
Stepper Motor
1 Toggle Switch
1 Pushbutton Switch
2 Roller Switches
Shaft Coupler (I JB welded together some 1/4" shaft collars)
1/4 20 Threaded Rod
Coupling Nut
2 small L brackets
Metal shaft
Slider for metal shaft
Project Box
Framing Material (I used a piece of oak that I had laying arround)
12 Vdc Wall Wart
Connecter socket that matches wall wart
7805 Voltage Regulator
RFID Door Unlock:
RFID Tag Reader
RFID Tags
Electronic Door Strike
555 TImer
Project box
220 uF Capacitor
1800 uF Capacitor
90k Resistor or 100k potentiometer
10k Resistor
5Vdc Solid State Relay
12 Vdc Wall Wart
7805 Voltage Regulator
General Use:
Wire
Solder
Heat Shrink tubing
Zip ties
Various Screws & Nuts
JB Weld
Time
Patience
Okay.... that's not such a small list and I'm not sure I even got it all, I will repost this for each subsystem section so you don't have to keep referring to this page.
Budget:
I made mine for about $400 back then, but that was with trial and error and buying stuff I didn't end up using, the heart of the system (DTMF decoder) can be made for ~$20 and subsystems can be cheap or real pricey depending on what you want.
Where to Get Components
For the RFID doorlock I got both the electronic door strike and RFID reader from ebay . Just look up "Door Strike" and "RFID reader" and sort by price and you'll find the two I use in this instructable, and I bought this stuff about 4 years ago. Same with the stepper motors, but you will just have to look around for a good deal.
For the microcontrollers and any little modules that will shorten development time on this and other projects I used sparkfun.com . I don't think they carry the smaller attiny2313 any more which I used for this project, but you can upgrade it to a ATMega328, or ATMega128 (suggested), and pick up a nice breakout board there as well.
Finally I'd also look and see what they have over at the aptly named electronic goldmine you can pick up all sorts of sensors and things that are useful for home automation systems.
Tools & Where to Get 'em
Tools:
Dremel or other rotary tool
Computer/Laptop
Soldering Iron
Atmel AVR programmer (I use the USBtiny from ladyada )
Drill/Screwdrivers
Hot air gun (read the manual)
Hot glue gun
Chisel
Saw
Safety Glasses
Work Gloves
Hammer
Pliers
Multimeter (I would suggest one with a continuity setting... will save your sanity!)
Oscilloscope
Bus Pirate would be handy too
Most of these are available at you local hardware store, or harbor freight if your low on the cash. You can make substitutions where needed, but no matter what you end up using: USE THE RIGHT TOOL FOR THE RIGHT JOB!
How to Solder
To sum it up:
1. Make sure your iron tip is clean & well tinned
2. Wet your sponge
3. Pre-tin the things you are going to solder, or use flux
(don't always have to do this one, I usually only do this for wires)
4. Hold the two items being soldered together
5. In just a second or so of time:
a. apply heat to the surface being soldered
b. apply solder
c. remove soldering iron and solder
6. Clean the tip of your iron on the sponge
7. Re-tin the tip of your iron
Microcontrollers:
Favorite Links for Microcontrollers:
avrbeginners
hackaday tutorial
AVRFreaks
Sparkfuns Beginning Embedded Tutorials
My choice of Microcontrollers is the Atmel line of 8 bit AVRs. The main reason for this is they were the cheapest & easiest to learn when I got into the hobby and now I'm hooked. There is a huge community of users and the open source tools are both powerful and customizable.
If you have another micro you are fond of feel free to substitute it any time. The TI MSP430s are great for low power which many home automation systems need to be, and the STM8s and STM32s look pretty nice too. Don't feel limited to only one micro, there are lots of great options out there.
Sub-System Choices
There are many potential subsystems that can be implemented in home automation. Anything from turning on and off house lights to feeding a pet can be accomplished. The following table summarizes several of the initial ideas for subsystems.
Some Potential Subsystems:
Open/Close Curtains
Water House Plants
Feed Pets
Toggle House Lights
Lock/Unlock Doors
Play Music
HVAC Control
Opening and closing the curtains, watering house plants, and latching/unlatching the front door are currently the most useful subsystems to me. They also demonstrate things that are useful to activate while being incapable of doing them by oneself, either from being ill, or absent.
There are many alternative design choices that could be made in this system. Each subsystem offers alternate approaches of their own, so alternative designs will mainly focus on the different choices available through user interfacing every subsystem will have a direct trigger option such as a switch or button. The next version of each subsystem will incorporate wireless communication and addressing to trigger the subsystems. For now the main subsystem will just toggle a transistor to activate the subsystems.
The main system types can be divided into two groups: direct actuation triggers and triggers that are created while traveling. The systems that offer control from a distance can also be used while at home, which makes them far more useful in the long run. A potential third group would be automatic triggers that occur naturally without the need of a user to be present. Automatic triggers offer the highest convenience but are more of a solution to trigger subsystems on the subsystem level instead of offering user control.
Based on the topics and ideas discussed above, a distance actuation system employing DTMF decoding will be used for the first user interface. The first three subsystems will be an indoor plant sprinkling system, a window curtain driver, and an electronic door opener. Then a simple security system, and adding IR as a user interface to connect to a computer. The final design details and implementation steps of each of these systems will constitute the remaining bulk of this instructable.
The circuitry for each of the designed subsystems can operate off of a 9-12 Volt input. The input voltage is then reduced to 5 Volts using a common LM7805 Voltage regulator. This is a simple circuit to build and can cost less than $1, including external components. Depending on the input power, the circuit may require an external heat sink, but generally will not for our power consumption needs. The 7805 usually supplies up to an amp of current which is well beyond what any of the driving circuitry will draw. All of the following subsystems use this chip with a 9 Volt 200mA power supply to power their on board microchips unless otherwise stated. A typical 7805 setup can be seen in the above schematic.
DTMF: What Is It?
You can see what this signal looks like in the image above. I've also included a table that shows which key presses correspond with what frequencies. There are other standards defined for DTMF including key presses A-D as well as the signal used to cause your phone to ring and everyone favorite dial tone.
Why Choose DTMF?
Well DTMF was designed for the purpose of actuating systems remotely from a distance (hmmm...sound familiar?) and the chief concern was to ensure a reliable recovery of the transmitted signal. As a result, DTMF was designed with various characteristics to isolate it from potential noise. These characteristics include:
o Each DTMF signal is just under a whole tone.
o None of the tone frequencies are the sum/difference of any other two tones.
o No tone’s frequency is a multiple of any another.
o Valid DTMF signals must vary by less than 1.5% of the designed frequencies.
o The higher four frequencies can be a maximum of 3 dB louder than the lower frequencies.
Basically it's a well established, easy to use, and reliable system. Perfect for our first user interface.
Isolating From the Phone Line
There is often protection circuitry installed in commercial hardware such as an answering machine. Also answering machines are both cheap and readily available in thrift stores. Interfacing the system with an answering machine also handles hanging up the phone when the call is completed.
You can also use a cell phone that auto answers after a few rings. I'll describe later in the instructable how this can also be used as a GPS car tracker on the cheap :)
Aside from relying on some other manufacturer to protect our circuit from the phone line we have a schematic shown which is the circuit that takes care of isolating our chips for us so we know we are protected.
The Audio Isolation transformer can be picked up at radioshack , and I used a standard wall phone jack that I dremeled down to size for the phone line input. The rest of the components are probably easiest to pick up at an online retailer.
The phone plug is a regular RJ11 plug .
Decoding DTMF
There are many ways you can decode DTMF including:
The Goertzel Algorithm
Band split filters & pulse counters
Premade chips for decoding:
- CM8870
- SSI-202, 203, 204
- MSM6843
- MC145436
- MC68HC05F5-µP
I've looked at several of these, the easiest to use and understand is the CM8870 chip. It acts kind of like a decoder ring that spits out the binary value of a DTMF signal. The CM8870 actually implements the bandsplit filter and pulse counter method which is illustrated from a MATLAB screenshot taken of the DTMF decoder file written by Randolf Sequera. If you'd like to play with it you can get it over at the MATLAB file exchange .
DTMF Decoder: Hardware
1N4001 Diode
10uF Capacitor
100uF Capacitor
0.1uF Capacitor x3
10 nF Capacitor x3
18pF Capacitor x 2
47 kOhm Resistor x2
220 kOhm Resistor x2
270 kOhm Resistor
10 kOhm Resistor x3
1 MOhm Resistor
3.579545 MHz Crystal
7805 Voltage Regulator
Atmel ATtiny2313 (Today I'd use a ATtiny 4313 or ATMega128/1280)
7-12V Wall Warts
Answering Machine or Phone that can auto-answer
RJ 11 Phone Socket
1:1 Audio Isolation transformer (still available at radioshack believe it or not!)
20 MHz Crystal
Momentary Push Button Switch
1N914 Diode
Project Box
Power connector socket to match wall wart plug.
Piece of perfboard (mine was ~17 x 28 holes)
Optional:
74LS48 7 Segment Decoder (optional)
7 Segment Display (optional)
Small Ferrite beads (possible)
Screw terminals
This schematic shows how the last few circuits connect together and feed into the ATtiny2313.
The output from the 2313 to toggle the subsystems is shown at the top left of the 5th picture. These were just wirewrap sockets I could jumper to the other projects. I would update them to be wireless addressable units now using something like a zigbee , and I'd update the schematic to not use the ATtiny2313's serial pins for the DTMF input, but the circuit shown will work just fine.
One of the funny things I came across was that my CM8870 was not putting out 5V as I'd expected. It was actually floating in the range between a logic high and a logic low on the ATtiny2313, faced with it not working for my upcoming project demonstration and hacking it I chose to use hack it. I didn't have a logic level shifter or much else so I decided to drop the ATtiny2313's operating voltage which would in turn lower the threshold voltage for a logic level high.
All I ended up doing was making a voltage divider with a few spare resistors feeding the ATtiny2313's power.... horrible design I know... but it worked and got me through my review. You can probably leave this out and just connect the 2313 to 5V but be prepared to do something funny if the CM8870 output is finicky.
The last schematic should be the same as the first but without the voltage divider.
DTMF Decoder Code (Assembly & C): Programming an Atmel AVR
Here I'll explain the code a little bit, the next few steps will be a tutorial on how to load it into the ATtiny2313 using an example program, but the same steps will apply for all the code we have for the micro-controllers.
I've included both the assembly and C code for this circuit. They should be pretty similar in function. The C code just forwards what is read by the ATtiny2313 onto Port B from Port D, this is so that you can verify that the signal is coming in correctly with nothing more then a few blinkinlights on the lower 4 pins of Port B.
The default code is 0000 and can be changed on line 99. Once you've entered the correct code hit the # button on your phone to have the micro validate the code. If you mis-press a key don't worry, just keep entering numbers the micro will only remember the last 4 digits entered.
Once your that far and you can see the DTMF codes being read correctly by the 2313, un-comment the large block of code on lines 118-121, and 123-261, and comment out line 122 to enable regular functionality.
Lines 233-238 will contain the code you want executed once a valid code is entered. Port B is totally free so for a low # of sub-systems you can just have the next phone key presses activate subsystems directly on the port. Another option would be to have this section send a serial command out to either a computer or other subsystem.
There is a lockdown mode for too many invalid characters being entered, I defaulted it to 2 seconds for your troubleshooting but once working I would encourage upping this to a few minutes or more for security. Lines 320-332 have the lockdown code.
Ask any questions if you have them and I'll try and explain the mad state I was in while coding this. It is fairly well commented though and shouldn't be too hard to decipher.
Download Development Enviornment
WinAVR is a suite of tools to program Atmel's micro-controllers within Microsoft windows OSs. This is what I'll use for this instructable to code in C.
AVR Studio 4 : If you are the type of person that enjoys the speed and efficiency provided by banging your head on a rock.... erm... I mean .... programming in assembly. Well then you could do a lot worse the by going with Atmel's own tools. Actually AVR Studio 4 is pretty powerful and the environment I first started this project with. I'll give the code that remains from then as well.
Linux: For the power hungry nerd in all of us.
CrossPack : "Hi I'm a Mac"
Also if you'd like you can hop on the beta for testing out AVR Studio 5 AVR Studio in C using BOTH the GCC and IAR compilers if I'm not mistaken. Not used it yet but this is looking pretty promising as well. Way to go Atmel!
Create a Makefile
Just include the one I've left here, in your codes main directory. If you are using a different microcontroller then the attiny2313 or would like to use a bit of code with a different name then TEST_2313.c you will need to edit the makefile just a little.
To do so open the WINAVR program named MFile and with it open the make file I've included. If you are using a different microcontroller then me change the first highlighted name from attiny2313 to the name of your micro. If you want to use a C file with a different name change the second highlighted value to the name of your file (it IS case sensitive and you need to leave off the extension).
Notice you can't edit the make file..... to enable edititing of the make file goto: "Makefile >> Enable Editing of Makefile" and type away to your hearts content.
Downloads
Load Code Into Programmers Notepad
From the main menu select File >> New >> C/C++
Paste the below code into the editor and save the file as TEST_2313.c making sure it is saved to the same directory as your makefile.
#include <avr/interrupt.h> // Defines pins, ports, etc to make programs easier to read
#define F_CPU 8000000UL // Sets up the default speed for delay.h
#include <util/delay.h> // Allows for delay to be used
#include <avr/io.h> // Enables IO
//**********************************************************
// Main Program
int main()
{
DDRB = 0xff; // Set Port B data direction register to be outputs
PORTB = 0x03; // Turn on Port B Pins 1 & 2 (0b00000011)
while(1) // Repeat this code forever
{
for(int i = 0; i < 250;i++)
{
PORTB = 0x02; // Turn on and off, Port B Pin 2, 251 times with a 1/4 second delay
_delay_ms(250);
PORTB = 0x03;
}
/* This is how you comment out a large block
for(int i = 0; i < 250;i++)
{
PORTB = 0x00;
_delay_us(250);
PORTB = 0x01;
}
*/
} // end while
return(0);
} // COPY CODE ALL THE WAY DOWN TO HERE !!!!
Compile Code
If you've followed up until now what this will do is take the example code from the last page and create a hex file. This is a file that can be read by the microcontroller.
This hex file should be saved in the same directory as your C code and makefile, along with a whole bunch of other stuff you don't need to care about right now. Take the hex file and copy it into the same directory as the program avrdude and get your programmer ready to burn your first microcontroller.
Connect the Programmer to the ATtiny2313
Open a command prompt by going to Start >> Run >> cmd >> Enter.
Then inside of the command prompt go to the directory where WinAVR's avrdude program is hiding.
Connect Your Programmer:
Each AVR requires 6 pins to be programmed. These are:
MOSI - (Master Out Slave In, pin 17)
MISO - (Master In Slave Out, pin 18)
SCK/SCL - (Clock, pin 19)
Voltage (pin 20)
Ground (pin 10)
Reset (pin 1)
Connect these 6 pins from the programmer to the chips identically named pins. The programmers usually will follow Atmel's defined pinout for the ISP (In System Programmer) which I've included in the pictures. You can just jumper them over, or build a breakout board like I did to make programming lots of the same chips easier. The guys at Evil Mad Science have made a ATtiny2313 breakout board that easily replaces the board I have shown. Just solder in a 6 pin header and a Zif socket and you are good to go.
Also ensure that your chosen programmer is providing power to the micro. If it doesn't do this you will need to supply the chip with 5V externally, don't forget to connect your ground to this external ground!
Loading Code Into the ATtiny2313
Check that AVRdude sees the ATtiny2313 by typing the following command:
avrdude -c usbtiny -p t2313
This line says we'd like to program an ATtiny2313 using the usbtiny programmer. If you are using a different device or a different chip you can type
avrdude -c 6
to get a list of valid programmers
avrdude -c usbtiny -p 6
to get a list of valid microcontrollers. If AVRdude could not find the device it will say: "Could not find...." If AVRdude could find the usbtiny programmer it will say "avrdude: Initialization failed...." I know it sounds weird, but trust me it found it.
To program your hex file onto the chip type:
avrdude -c usbtiny -p t2313 -U flash:w:XXXXXXXX.hex
substituting the name of your file for the XXXXXXXX's given above.
If you ever get stuck just type 'avrdude' then press 'enter' and a list of commands will pop up.
A great tutorial on using AVRdude is available at ladyada's website
Once you're comfortable with AVRdudes functioning go to this Sparkfun tutorial and setup programmers notepad to do the programming for you with hotkeys. You'll still need to know how to run AVRdude, particularly when you need to burn the fuse bits... speaking of which:
Burn the Fuse Bits
Ensure that your crystal and bootstrap capacitors are connected before you try and burn the fuse bits. If your micro now wants to run using it's external 20MHz clock and it doesn't have one well, it will look like you killed it (you didn't you just need to clock it properly but still it can be aggravating finding this out later on).
Also you can let the magic smoke out if you decide to go mucking around with the the fuse bits and don't' know what you're doing so be careful.
To reprogram the fuse bits :
1. Hook up to program the AVR as normal
2. Open AVRdude and type:
avrdude -c usbtiny -p t2313 -U lfuse:r:-:h
This will READ the low fuse byte (the one we care about) from the ATtiny2313.
Referring to the Table in the images: the results of the above will give the default settings of the internal RC oscillator running at 8 MHz, but CKDIV8 results in an actual clock speed of 1 MHz.. THE DEFAULT LOW FUSE BYTE VALUE IS: 0x64
From the ATtiny2313 datasheet we can see that we need to set CKSEL3 through CKSEL0 to be between 1000-1111 (binary). And the exact value depends on the speed we want to run at.
3. Refer to the second table and choose a clock speed.
For an 8+MHz clock speed we want CKSEL3...1 to be 111 and CKSEL0 = 1 for a Crystal oscillator with a fast rising power. Look at the 3rd table to see the changes to the fuse byte. THE NEW FUSE BYTE VALUE IS 0xEF
4. Hook up the Crystal & bootstrap capacitors as shown in the schematic.
5, Program in the new LOW fuse byte by typing into AVRdude the following command:
avrdude -c usbtiny -p t2313 -U lfuse:w:0xEF:m
The ATtiny2313 should now run on an external crystal. Woo-HOO!!!
Water the Plants: Design
The implementation for this system is straight forward and relatively simple as can be seen in the block diagram given in the pictures.
The activation signal comes from either the DTMF decoder circuit or from a push button switch. This activates a timer which will drive a relay controlling a solenoid valve. The valve will remain open for the duration of the timers’ impulse. With the valve open water can be either drained from a gravity fed tank or connected to the house water line. The timer is also used to make sure that the plants do not get over-watered. This is done by keeping the valve open for a known quantity of time which will control the water flow to the plant.
Materials to Build:
555 Timer
90 kOhm Resistor ( 100k Potentiometer is better)
0.1 uF Capacitor
10 kOhm resistor
100 uF Capacitor
220 uF Capacitor
1800 uF Capacitor
0.01 uF Capacitor
1N4001 diode x 2
7805 Voltage Regulator
12 Vdc Wall Wart
5V Solid State Relay or TIP110 NPN Transistor
12 V Solenoid Valve
Perf Board
Project Box
Power Connector that matches wall wart
Screw terminals x 3
Rubber Hose that matches Solenoid Valve
Tank to hold water or adaptors to hook hose up to house water line
555 Timer
While in astable mode, the timer acts like a common clock circuit providing a constantly changing pulse level that can be controlled with a great degree of precision. The duty cycle of the timer can be easily changed making this circuit popular for use with servo motors. A servo motor would fulfill the requirement for precision angular control as well as keeping with the modular theme of each subsystem. So a 555 timer is a good choice to keep in mind for use in future subsystems as well.
The monostable operation of a 555 timer is the mode of operation that is of interest for this particular application. While in monostable or ‘one shot’ mode the 555 timer will drive its output signal high for a predetermined period of time. The time that the pulse remains high is determined by the value of an RC network attached to the timer. A capacitor is charged and upon activation, is allowed to drain through a resistor to ground. The RC time constant of this setup determines the length of time for this drain to occur and in turn sets up the time frame for the duration of the output pulse.
The equation that determines the timer pulse duration is as follows:
t = 1.1*R*C
Where t is time in seconds, R is resistance in Ohms, and C is capacitance in Farads. The resistor and Capacitor to worry about changing the values on are the ones that attach to pins 6 and 7 of the 555 timer.
To vary the time within known limits, the resistor can be replaced with a potentiometer acting as a rheostat. This allows for simple changes to the pulse length to be made without having to take the system apart.
The 555 timer circuit requires a low activation signal to turn on. The software for the remote access system was coded to output a high pulse as an activation signal. To reverse the logic fed from the microprocessor to work with the 555 timer, a 3904 NPN transistor was used to short the 555 timer trigger line to ground.
I highly recommend taking the time to read the doctronics writeup on 555s they have just about everything you would like to know about them.
Driving a Solenoid:
The reason behind this is the solenoid is made from a coil of wire which will form a magnetic field when current is flowed through it. When you try and turn off this current the solenoid will throw a fit. Inductors don't like changes in current, so the inductor will try and keep the current flowing by releasing all the energy stored in it's built up magnetic field to do so.
However, inductors do not care about Voltage and will do whatever they can to the Voltage across their coils to keep the current flowing while the magnetic field is collapsing. This leads to the voltage spiking to extremely high values, a few hundred volts is not out of the question and is in fact quite common. As you would guess this is not a happy thing to see a few hundred volts on the pin of an integrated circuit and will probably kill it.
Fortunately you can protect your circuit by putting in a reverse biased Zener diode. There is a good Sparkfun tutorial on driving relays and there they use a 1N4148 across the relays terminals. This will also work nicely for our solenoid valve.
Several relays were tested in the system and none had any specific advantage over another. Eventually, I tried and settled on a Motorola TIP 110 NPN Darlington Pair to drive the solenoid valve instead of the relay. The TIP 110 works exactly like a typical NPN transistor with a higher operational voltage and current range. The TIP 110 can drive a load at 60 Volts and several amps. This was the same for the relays, but they cost several dollars whereas the TIP 110 cost fifty cents. The TIP 110 also only required 3 connections to be made instead of the four from the solid state relays.
Choosing a Solenoid Valve
Most commercial solenoid valves operate from either 12 or 24 Volts alternating current or direct current. With a 12 Volt power supply running a 7805 voltage regulator for the 555 timer circuit it was an easy choice to go for the 12 Volt valves. A valve from ECI valves was chosen for its high pressure rating (300 psi) and high Cv factor. A high Cv favor determines the flow rates capable for a valve, the higher the rate the higher the flow.
A secondary valve made by EHCOTECH was also chosen for similar operational qualities and it was a little more cost effective. The EHCOTECH valve is also actuated by 12 VDC and is a normally closed valve to prevent water from flowing when not desired. This secondary valve can only withstand 150 psi so although it can be hooked up to a house line it isn’t quite as secure as the ECI valve. This valve will also work for a gravity fed system the one you choose may need pressure in order to work right.
A third option is to use the same diaphram valves that are commonly used on regular outdoor sprinkler systems. These are both cheap, and easy to repair/replace.They are also always available at the local hardware store.
Water the Plants: Implementation
Like the remote access system, this subsystem was encased within a RadioShack project box measuring 50 x 75 x 30 mm. Wires to the outside world were fed through holes drilled in the side of the project box. The wires were secured in place internally and tested externally for strain relief. A size K coaxial DC power jack was added to the side of the box and connected to the internal circuitry. This configuration is shown above.
The test solenoid described above was attached to the system’s driving line and the circuit is actuated by applying an external voltage to the input lines. The system was tested with various driving times by changing the value of an internal potentiometer. The 555 system is set for approximately a 5 second run time.
The solenoid valve was tested by connecting it to a submersible water pump. The valve would successfully only water the plants for the predefined period of time, and would remain off even in the absence of power to the system. The second image shows the completed system.
The test results met the required design parameters, and with a slight change in the external mechanical hardware connected to the solenoid valve, the system can be driven from a home water line with no trouble.
Potential improvements include the design and use of a water level meter or soil moisture transducer to provide feedback that would prevent the plant from being over watered. This could also keep the water from overflowing the reservoir tank at the base of the planter box.
Open the Curtains: (Prototype CNC Axis)
It worked because my curtains were on a pulley system and just needed to move the rope up and down to open and close them. At this point I also really wanted to build a CNC machine but the budget & school time frame only allowed for one to be built.... so I compromised by making a single prototype CNC axis that I could use to open and close the blinds.
There is no point in watering plants if they are going to die from a lack of sunlight. So that is why this was made: opening and closing window shades and curtains.
Materials:
1N914 Diode
10 kOhm Resistor
Pushbutton Switch
110 Ohm Resistor
10 uF Capacitor
100 uf Capacitor
18 pF Capacitor
20 MHz Crystal
ATtiny2313
ULN2003A
Zener Diode
Stepper Motor
1 Toggle Switch
1 Pushbutton Switch
2 Roller Switches
Shaft Coupler (I JB welded together some 1/4" shaft collars)
1/4 20 Threaded Rod
Coupling Nut
2 small L brackets
Metal shaft
Slider for metal shaft
Project Box
Framing Material (I used a piece of oak that I had laying around)
12 Vdc Wall Wart
Connector socket that matches wall wart
7805 Voltage Regulator
Stepper Motors
Unlike a regular motor a stepper motor does not spin freely when a voltage is applied to its terminals. Instead a stepper motor has many inputs (4-8) and a voltage applied across the right pair will cause the stepper to rotate a small amount (typically 1.8 degrees). This is called taking a step.
When a voltage is applied to the stepper motor terminals in the proper sequence the stepper motor will step in the same direction as the applied terminal voltage. To reverse the stepper motor the input sequence is reversed. To change the stepper motors speed the sequence is changed faster or slower. And to stop and hold a stepper motors position the sequence is halted on the appropriate step.
Stepper motor speeds can be limited by the inductive/resistive components associated with the leads and internal windings of the motor. This LR time constant can lead to stalling and dead zones of operation. The time constant that determines where the motor stalls can be easily changed on unipolar motors. This allows them to be run at speeds they were not initially designed for, and as long as the input power stays within the motors operational range no damage should come to the motor through such control. To change the LR time associated with a unipolar motor a series resistance is added to each line. Then by running the motor in its higher voltage range the same torque levels can be achieved. The drawback to running a system in this method is the power that gets wasted as heat in the series resistances that were added to the driving terminals.
More on Stepper Motors
The above figure shows the sequence of terminal activation required for driving the motor in half step mode. Half stepping provides a motor with greater resolution but requires more power to drive the motor. To do regular stepping the odd numbered steps can be removed from the chart, and to drive the motor with more torque two adjacent terminals can be triggered at the same time. Any stepper motor requires two additional pieces of circuitry; a stepper driver and a transistor array capable of sourcing or sinking the motors operational voltage and current.
A Unipolar motor can be driven as a Bipolar motor by leaving the two center taps unconnected. Because of this it may be in your best interest to buy a 6 or 8 wire unipolar motor and then have the option of driving it as either a unipolar or bipolar motor.
Stepper Motor Electronics
To provide the motor with enough power to turn a ULN2803 eight Darlington array with a common emitter was used to sink power through the motor terminals. Although only four of the eight Darlington pairs are required to drive the stepper motor a person can use the extra four, and the unused four digital I/O lines on the ATtiny2313, to drive a second motor at the same time for use on a future subsystem. The pinout of the ULN2803 Darlington transistor array can be seen above
The block diagram for this subsystem is shown above as well.
Lead Screw, Thrust Nut, and Linear Rail
To hold the coupling nut in a constant orientation a non-threaded rod is run parallel to the threaded rod and a slider is placed on it. The coupling nut is then attached to the slider with some JB Weld. The motor and two rods are mounted in a frame to hold it all together. As the threaded rod turns the orientation of the coupling nut is held constant due to its connection to the slider. This causes the coupling nut to screw itself up and down the threaded rod which allows control of the backwards and forwards movement of the coupling nut.
The angle of threads on the threaded rod and the speed and resolution of the turning motor will translate to the speed and resolution at which the nut moves up and down the threaded rod. With a smaller threaded angle and a slow strong turning motor the linear motion can be made fairly strong as was done in this system. Industrial applications for this setup are commonly found in desktop printers, as well as CNC routing machines.
My window curtains opened with a pull string on a pair of pulleys, while the angle of blinds is determined by rotating a plastic rod. This system can be used to open either, with little modification. To open curtains that have a pull string, attach the string securely to the coupling nut on the threaded rod. Activate the system and the nut will move up or down pulling the curtains pull string with it. If the pull string is secured on the bottom with a pulley the curtains will open and close with no trouble.
To change the angle of blinds on a window directly drive the blind rod with the stepper motor and a shaft collar. Varying the level of light allowed to enter the blinds can be done by changing the number of steps the motor takes before stopping.
Curtains Code:
A copy of the stepper motor program is included as well and it's in C ‘CurtainStepper.c’ sorry assembly coders, no love this time ;).
Also as can be seen in the schematic a ULN2003 Darlington array can be used in place of a ULN2803 array. These chips are identical in function but the ULN2803 has one extra Darlington pair included in its array.
There are also several connections to the ATtiny2313 that are not shown in the schematic. Each of these connections is a control signal for the program that runs the stepper motor and is described in the comments at the beginning of the program “CurtainStepper.c”. Pretty much just a couple push buttons and limit switches.
I've also included the hex file so you can just burn this straight to the microcontroller.
Open the Curtains: (Prototype CNC Axis) Implemented
A local activation push button and an up/down toggle switch was added to the front of the project box. The local activation switches are wired in parallel to the external activation signal connectors so as to not interfere with the microprocessor activating the system. All signal connections to the outside world were made with screw terminals which can be accessed through drill holes created in the project box and which can be seen in Figure 27.
The stepper motor used for this subsystem is a NEMA size 23 motor and was purchased on e-bay with two other identical units for $30. It has a resolution of 1.8 degrees per step and 56 oz-inches of holding torque.
It is a six lead unipolar stepper motor and can be driven from 12-36 VDC. The frame depth was measured to fit the size 23 motor. The motor was attached to the frame using its mounting holes and three 2’’ machine screws. A hollow metal guide (slider) was placed in line with the motor shaft to hold the threaded rod. The slider rod was bent to fit through the motors final mounting hole and through a drilled guide hole at the top of the frame.
The electronic circuitry was attached to the side of the frame using zip-ties which passed through holes drilled in the project box for mounting. Momentary roller limit switches were mounted on small L-brackets at either end of the threaded rod and wiring to the switches was fed along the back of the frame and into the project box. To reach the limit switches with the wires, holes were drilled through the frame and the wiring fed through and soldered to the switch contacts. This setup kept the system very compact and clean looking. The wiring to the limit switches can be seen in the previous figure, while the motor mounting can be best seen in Figure 28.
The speed of the stepper motor is kept slow to demonstrate the precision control achieved for both linear and rotational motion. As a result the coupling nut takes about a half hour to traverse the length of the threaded rod. For the demonstration the curtain driver was actuated using the local switches. By modifying my code you can easily make that rod spin faster, and have the coupling nut traverse the length of the rod in 10 or so seconds.
Future versions of the curtain driver can be improved by the addition of an emergency stop switch, an external speed controller, and a six pin programming header. The programming header would allow a user to easily interface to the microprocessor without having to take apart the entire system. This can also be used for testing different programs with greater efficiency.
The electrical and mechanical designs are both sound and can be used with slight modifications for a variety of applications . The curtain driver will also be rebuilt using a DC motor with limit switches and an H-bridge.
When I rebuilt this I used a faulhauber gear motor and a reprap magnetic rotary motor encoder which I believe you can now get from makerbotindustries. A photo-resistor and a real time clock were used to make it a standalone blinds opener, but it also accepts a pulsed input so that I can one day connect it to the main system via a wireless link. The actual implementation is similar to this instructable .
My wife didn't like the idea of this thing opening the front blinds when she was walking by in the morning in a bathrobe. So I've decided it will go in the guest bedroom.... you've been forewarned!
Unlock the House With the Phone & RFID
Specifically for my wife this allows her to unlock the front door when bringing groceries or large packages home without needing to fiddle with her keys. The user can call the house on the way home and unlock the door, or the user can locally open the door with either keys, or by using the Radio Frequency Identification (RFID) tagging system that is installed as a parallel trigger for activating this system.
The system block diagram is shown in Figure 29.
Electronic Door Strike
An electric door strike has the same functionality as a regular door strike, namely to hold the latch of a door secure. Both an electronic strike and regular door strike are shown above to let you know what I am talking about. Electronic door strikes are designed so that when a voltage is applied across its input terminals the strike will collapse and the door will be able to swing freely open without needing to be unlocked.
Electronic door strikes can be either normally locked or normally unlocked. An electronic door strike that is normally locked when power is not applied is called a ‘normally open’ type, whereas a normally unlocked door strike is known as ‘normally closed’. Normally open, and normally closed refers the strikes driving electronics and not to the locked or unlocked nature of the door itself.
For this design a normally open strike was chosen so that the door would function in typical fashion without needing to be connected to a power supply. The electronic door strike measures 160 x 25 x 28 mm (L, W, H) and is actuated with 12 VDC and 200-450mA.
This setup is nice because I can leave my door locked all the time and it will remain secure. When I activate the system though, it will unlock for a predefined period of time.
RFID Tag
The RFID reader comes with a master RFID tag which is used to program up to 25 additional tags into the reader’s non-volatile memory. The reader unit can be run from 9 -15 Volts direct current. The reader was modified to light an external LED when a valid RFID tag has been read. This will provide the user with feedback to know if their RFID tag has been read or not.
Instructions on performing this modification to the RFID reader can be found online, or downloaded from the distributor. Any passive 125 kHz RFID tag can be used in this system, and a variety of shapes and sizes are available from online distributors.
The current system also has a 555 timer operating in monostable mode as described in the plant watering section. This holds the door unlocked for ~5 seconds after a valid tag is read that way you don't have to have the tag read and push on the door at the same time to have it open (which got kind of annoying).
The next version will use a parallax RFID reader which returns the actual tag data instead of just a valid pulse. A micro-controller will then either decide if it's a valid tag or forward the tag info onto a computer which will decided if it's valid or not. This will allow me to log who comes home & when and also signal the computer to update the HVAC system based on who is home.
The parallax reader can be picked up for $20-$35 depending on where you look. Here is another instructable dedicated to Atmel chips and this tag reader. Today instead of the MAX232 I'd use either a FT232 so that I could go straight to USB, or a wireless connection like a Zigbee.
Unlock the House With the Phone & RFID: Implemented
Some modifications are also provided from the manufacturer and can be found online from ebay sellers if you get the same system as I did.
The RFID reader hardware has capabilities far beyond what is being used in the stock system. The default setup only provides a low current 12 VDC output to signify the presence of a valid RFID tag. In stark contrast to this the reader is also capable of TTL and CMOS output levels, as well as providing the decoded RFID tag data in a serial format. A reader with these features being used is generally sold for many times the cost of this system.
The RFID tag reader was modified to provide TTL output levels as well as display on an external LED when a valid tag was present. The same power connector used in the previous modules was added to the RFID reader to give it a cleaner look.
A solid state relay that triggers from a 5 VDC input was attached to the system and its output was used to sink current through the terminals of the electronic door strike. A diode was place across the terminals of the strike to prevent current spikes from damaging the strike itself.
The addition of the 555 timer circuit made it easier to unlock and open the door when the user’s hands are full. The completed subsystem is shown in above.
All connections made to the RFID reader were kept internal to the reader’s project box and soldering jobs were protected from shorting by a layer of shrink tubing. The results of testing the RFID activated electronic door strike showed a high degree of reliability.
The system only fails to properly open when pressure is applied to the door strikes latch when it is being activated . This pressure is such as would be experienced by attempting to force the door open.
To test the sensitivity of the RFID reader an activated tag was placed within the proper distance of the reader’s antenna and then the path was blocked by various materials. As long as the material did not produce an RF challenged environment (such as a metal ground plane, or a cup of fluid) the RFID reader would respond correctly.
RFID Door Strike Installed
The first image is tilted sideways, but it shows the system installed out of view inside of a cupboard which is just inside of my garage door.
Make one and your wife will think you're the greatest thing since sliced bread... and I mean who's to argue with that logic. You are!
Additional Subsystems: Security
Materials:
9V rechargeable battery
9V battery charger
Magnetic reed switch for all doors/windows
LEDs
Resistors (various values
Microcontroller (optional)
Wire
Additional Subsystems: Security
For this step you will need to decide on an adequate battery and charger system. The battery will be plugged into the charger ALL THE TIME and I mean for YEARS! So you will need to choose a charger that has adequate power delivery to power each LED in the system, but has protection built in so that your battery doesn't explode and catch your house on fire. I've seen Ni-CAD work in this design for a long time, but currently I've been using Ni-Mh.
The CHARGER terminals will actually be the power supply for the system 99% of the time, but if power goes out we still want our security system to work. So we leave the battery plugged in and when power goes out the battery is now powering the system. Even after years of use a battery will typically be able to power a few LEDs for a good long while waiting for the power to come back on.
Additional Subsystems: Security
The charger supplies power to an LED through a magnetic reed switch (switch turns on and off in the presence/ absence of a magnet). The magnetic reed switch is hooked up so that when a door or window is open the LED will come on. Alternatively as mentioned you can have the output not light the LED and instead have it signal a micro-controller of it's status and let the uC decide what to do about it.
To hook up the system:
1. Choose an inconspicuous place to put the charger and battery. Low traffic areas are best as you will want to leave it on all the time.
2. Mount the reed switches on your doors/ windows/ garage door etc.
3. Mount the LEDs somewhere that looks good. I would suggest using the type of LED mount I included as an image, and they look best when installed in a standard light switch plate just below the switch. (Don't get shocked when removing the plate, turn off the breaker first.)
4. Make the following connections with wire
a. From the positive (+) terminal of the battery/charger to the NO (Normally Open) terminal of the reed switch
b. From the the COM (common) terminal of the reed switch to the long leg of the LED and/or micro-controller input.
c. From the short leg of the LED through a resistor and back to the negative (-) battery terminal
You may not need the resistor depending on how long your wires are run. The wire resistance may be enough to protect the LED itself from drawing too much current. To calculate what resistor you need or if you need one use the following formula:
(V-Vfd) / I = R
Where V = 9V, Vfd is the forward voltage drop of the LED (~1.2-3V typically), I is the desired LED current (10-15mA), and R is the combined resistance of the wire and resistor. Using the larger of the values I gave here we'd have:
(9-3) / 0.015 = 400 Ohms
So the combined resistance of your wire and resistor would need to be ~400 Ohms
If you feed the input into a micro-controller be sure you aren't going to have the micro pull too much either, use a 1k resistor between the wire and the microcontroller pin. LEDs are cheap, popping micro's can get expensive.
Additional Subsystems: Security
The images I've included have some rolled up paper wedging the switch to be in just the right spot. These have held steady for years.
This will require the NO (normally open) and COM (common) terminal on the roller switch to be used just as it was with the magnetic reed switch.
The next step is a micro-controller board you can use as an alternate interface to either a PC or with a standard TV remote that uses the RC5 IR standard. This is a great board to send these door and window signals too.
Updating the System: IR User Interface
Materials :
Copper Clad board (perfboard will work too)
7805 Voltage Regulator
1N4001 diode
100uF Cap
0.1uF Cap
22pF Cap x2
10uF Cap x2
10k Resistor
100 Resistor
Push button Switch
1N914 Diode
6 pin two row male header pins
Female header socket or screwterminals.
ATMega8/88/168/328 (Code is for the Mega8 but it is easy to port it over to the others)
38kHz IR reciever
The schematic and board files were done in cadsofts free version of eagle and I believe I got most of the parts from using Sparkfuns library since they are kind enough to let us use these. Thanks Sparkfun!
I've also taken many parts from other places and made a "package type" library (quicker to prototype when I have a new part I may not use again or when I don't want to make a new part in eagles editor). I don't think any of them are in this design but If you come across any let me know and I'll hunt down the parts I used.
Updating the System: IR User Interface Board
There are several options for getting a nice looking PCB, you can go to a fab house, chemically etch the board (this method alone has lots of options ). Personally for small batches or one-of's I prefer to mill out a PCB using the eagle plugin PCBgc ode on my homemade CNC machine. (Working on a second, for PCBs only CNC, that will probably be my next instructable since I'm taking lots of pics). This way I don't have to deal with chemicals, or laboriously drill holes by hand either.
If you're setup with a CNC:
1. Download Eagle
2. Download PCBgcode
3. Setup PCBgcode to match your machine specs
4. Open my RC5 eagle board layout file which was available in the last step.
5. Run the PCBgcode URL to spit out code specific to your CNCs setup
6. Lay some copper clad board FLAT to your cutting bit (I prefer a vacuum table that I painstakingly leveled but there are lots of options)
7. Mill out your PCB
8. Drill your PCB
9. Clean the PCB copper with some sandpaper
10. Prepare to solder.
.... gonna have to make an instructable on this process... The links given above should give you most everything you need until I can get one up though. Ask if you haven any questions this alone is a big subject.
Updating the System: IR User Interface Soldered
I used single sided copper clad for this board instead of double-sided so I had to jumper some wires. I would suggest always soldering in an IC socket instead of soldering the IC directly. This both protects the IC from being damaged from overheating and allows you to swap out the IC for another if you decide to upgrade it later.
Some Liquid Tin would keep the bottom nice and shiny looking, as well as make it a bit easier to solder
I hope the pictures can speak for them selves about the jumpers I made, if not, let me know and I'll give a bit more detail.
Updating the System: IR User Interface Software
Peter Fluery : RC5 Decode
Nate Siedel : UART
Joerg Wunsch: iocompat.h
Thanks for all the example code you guys all give back to the community!
I've left a picture of the universal remote that I used for this project, the code contains the hex values for each button press of this remote. Just put in a switch or elseif statment to determine which buttons were pressed and your microcontroller has just gained about 40 inputs! Make them control any of the described sub-systems directly, or feed the input to a computer over the UART through a FT232 (serial to USB converter) and let it decide what to do with them.
Updates: Wireless Triggering & Subsystem Addressing
A huge collection of data on using these things is available from ladyada's site . She also uses these in her tweet-a-watts which as you probably guessed will be heading the way of this instructable in the future.
Sparkfun also has some cheap 434 MHz transmitters and receivers that look like they could work well pretty easily.
Automatic Triggers & Computer Interface
You can get C# for free here.
I'm working on a GUI for this in my spare time now, but you'll have to wait for that. In the mean time you can check out this serial terminal made by Noah Coad that I'm basing my UI on: (He gives permission at his site for use of all his code commercial or other wise. Thanks Noah!)
http://msmvps.com/blogs/coad/archive/2005/03/23/39466.aspx
Basically using the RC5 board as the final interface to the computer, we can take the DTMF signals, pipe them through the RC5 Decoder board, and send them up to the PC. The PC can hold all the special data like valid DTMF codes, or vital decisions to make such as if the garage has been open for a half hour or longer to automatically close it. Sending it's data back down through the serial port the RC5 can transmit wireless data to the appropriate subsystem. This GUI also makes it so you can trigger everything by remote desk-topping into your home computer.
This will be added sometime after I get done with this semester, but the preliminaries are looking promising.
The microprocessor subsystem described before can also enter a lockdown mode if repeated failed attempts are made at guessing the correct code by an unauthorized user. This lockdown mode would temporarily disable the system for a period of time to discourage unwanted users from repeated attempts at accessing various features of the system (like unlocking your front door). This is an example of functionality that will be moved to the computer from the subsystems.
Repurposing the System: GPS Car Tracking
This is something that I’ve always wanted to build/own but the costs of such systems are staggering. At the time of this writing a similar system designed to be end user programmable, affordable, and easily configured was recently released for use in the US. The base cost for this subsystem was over $1500 and all it did was feed GPS latitude and longitude data over a cell phone line. These costs did not include the costs for the cell phone service.
A basic cell phone and a decent GPS reciever can be purchased for less then $50. If purchased in quanties and at the OEM level a competitve GPS car tracker can be built to integrate with the remote home access system for very little cost.
Figure 34: GPS Car Tracker Block Diagram
The block diagram for the GPS car tracker can be seen in in Figure 34. The existing system can be seen on the right hand side, and the new module on the left. The idea is to call the second module from the user’s home. A cell phone will silently auto answer the call and wake up microprocessor #1 seen above. This microprocessor will pole a GPS unit which will return a NMEA string containing latitude and longitude data.
The microprocessor will convert the NMEA string to an X and a Y value to feed to a DTMF encoder circuit. The DTMF encoder will send the X and Y value back through the cell phone to the calling home phone line where it will be decoded by the existing DTMF decoding system. The decoded X and Y value will be displayed on the LCD screen mentioned above. New X and Y values will be sent automatically back to the calling line until the phone call is disconnected. The software flow diagram seen in Figure 35 illustrates this process.
Figure 35: GPS Car Tracker Software Flow Chart
While it seems like a big leap from home automation to GPS car tracking it isn’t much more then what has been done so far. The GPS decoding module has been built for a Robo-Magellan mobile robot in another project and will easily interface to the existing system because both were designed to run on the Atmel AVRs. A picture of the robot using GPS and a variety of other sensors can be seen in Figure 36.
Figure 36: Robo-Magellan Robot
The only component that hasn’t been built is the DTMF encoder circuit but there are many chips available for just such a thing (Like the HT9200 ). A DTMF encoding sister chip to the CM8870 has been obtained and testing will begin on it this summer.
Another sensor that has been interfaced with the Robo-Magellan robot that would be of use in this subsystem is the HMC6352 digital compass. Using DTMF to relay GPS and heading data to a remote location can be used to tell not only where in the world the vehicle is, but also in which direction it is heading. Some of the potential uses for this system include finding a stolen or misplaced vehicle, keeping tabs on company property, and tracking taxis and buses along their routes. The information that this system can provide would be useful for validating claims and determining the outcomes of issues taken to court.
The GPS receiver is a Rand McNally product with RS-232 output. Many comparable receivers can be obtained for around $20 on the internet. The compass was $55 (the sure dont cost that now) and obtained from Sparkfun Electronics . Figure 37 is a photograph of the GPS receiver and the digital compass being used on the Robo-Magellan robot.
Figure 37: GPS Receiver and HMC6352 Digital Compass on a Robo-Magellan Robot
This subsystem can be exceptionally useful as an automatic trigger for the home automation system. If traveling home from a long trip the system can be polled to detect the distance left until a person arrives. Depending on which vehicle was detected a variety of other subsystems can be controlled. Temperature and other predefined settings can be set based on a predicted arrival time. This way the user’s home will be just the way they like it as soon as they arrive.
Final Words
I've tried to give all credit to people that inspired or helped this project along in any way. If you think I've left anybody out let me know and I'll gladly add them.
If you liked this instructable please vote for it in the 3rd Epilog Challenge and in the Makerbot Challenge.
If I were to win the laser engraver and after engraving everything I could fit inside the machine I would be most immediately excited about using it to cut out solder stencils for surface mount soldering, making custom engravings on knife handles for the boys in my scout troop, cutting out gears, making project enclosures, bootstrapping a business.... to tell the truth I'm not sure what I wouldn't do with a laser engraver... okay so hottubbing is right out !
If I were to win the Makerbot, I would probably download and print half of Thingiverse . Then I'd look into purchasing a copy of David Laser Scanner and printing out my head to replace those pommels that are at the bottom of stairway banisters. Then I'd see about making a 3d puzzle of a brain based on the scans taken from an MRI.
I can't shake the feeling that I'm leaving something out of this instructable..... So here a picture of an Arduino.... you know just for blog cred ;)
Good Luck all it was fun!