Although I like my house being high-tech, I also don’t like having an endless maze of cables wrapping around my living room. So I decided I will run all the cables from one side of the living room to the other by going through the attic. This is not too difficult for me because I have a large crawl space above the living room. However, I am finding out the hard way that wall plates for audio and video applications are very expensive if you want more then 2 or 3 different types of inputs. The problem is that most standard wall plates are made for obsolete connector types, and if you wan to have computer inputs, USB data inputs, Ethernet outputs, HDMI inputs, audio inputs, audio outputs, DMX outputs, and sub-woofer outputs all neatly accessible from a aesthetic wall plate right next to your living room couch, then you just pay lots of money for custom Keystone inserts. For me, I require a triple-gang wall plate to fit everything. And once I started buying all these cables and keystone inserts, I realized I needed more types or didn’t need some of the inserts I bought. All these adapters are getting annoying. Also, most hardware stores don’t seem to carry the right adapters so I am ordering almost everything online. In the mean time I have tons of cables running everywhere…
For those that have been wondering what has been happening with this project, I will provide some updates. I have been slowly working on parts of the house for a couple months and I am now working on the entertainment system. I recently installed 5.1 surround sound speakers and a sub-woofer and am hooking them up to nice studio amplifiers which will all be wired to a computer. I will provide more details on the audio system in the near future.
Currently I am also working with a friend on programming the DMX shield to be in-sync with music / audio inputs. It seems some of the most difficult problems were actually caused by simple wiring problems… breadboard pins start to get pulled on and stuff falls out after a while. This step is finally working so I am excited about the progress. The RGB LED lights currently just flash to the music beats, but the code will become more complex soon so the system can support multiple audio channels and handle some form of smart color changing technique.
The setup is currently using an Arduino UNO with the SkPang DMX shield, the stereo audio jack is wired directly to the Arduino Uno analog pins so that the audio is read as a number value, then processed and then output through the DmxSimple library to the DMX shield which sends signals to the DMX modules on individual DMX channels. The module then controls the power to the RGB LED strip lights. In a nutshell, that is how the Arduino DMX system works. The system currently uses 2 RGB controllers and operates on 6 DMX channels, this is plenty for testing. More info to come in the near future.
The Arduino House home automation project requires a network of devices that are modular and nearly plug and play. It is possible to control the entire hoe automation project with a single Arduino, however when the system is modular with multiple Arduinos it possible to work on single components without taking down the entire home automation system. In the long run, this should be a lot easier to tweak, debug, and upgrade. One of the main focuses of the Arduino House home automation project is to have a user friendly system that wont crash all the time.
The idea method of networking multiple Arduinos within a small environment is using the I2C / TWI communication located on analog pins 4 and 5 on the Arduino UNO. All the devices are connected with the same 2 wires and a common ground. The communication work great because it uses a Master and Slave method where the devices are each addressable individually and the master can send and request data from each device. Unfortunately this communication method only works over a short range. I an uncertain of the exact range but it becomes less reliable within a range of over 10m and any multi-Arduino notwork for a typical house will likely require wire lengths of 100ft (30m) or more if any Arduino controllers will be located outside. Therefor it is reasonable to abandon the intention to use the I2C / TWI communication method.
There are several other options to getting a similar Master / Slave network to work. One of the first main considerations is to determine whether to stick with a wired connection or to go wireless. There are advantages and disadvantages to both.
- No need for long distance cables
- Easy to locate device anywhere including outside or in places that would be difficult to run wires
- Can work with battery operated devices.
- May not work well in dense urban places where lots of 2.4 GHz signals are present.
- May not work well passing through walls if the walls contain metal. This is common with garages that contain a firewall barrier. This is also common for outdoor walls that have stucco there is a wire mesh that can significantly reduce signals. This may cause a device outdoors to not connect with a device indoors.
- Wireless signals should be relatively line-of-sight and will not penetrate underground, or around hills, or through dense objects.
- Wireless signals may be hackable or fail if overloaded with electrical noise generating devices (this could include large electric motors or large transformers).
- Wireless devices can be expensive. (the setup may cost more than running wires)
- A Wireless system may use more power.
- You will be exposed to constant low power wireless radiation. (Of course you are already constantly being radiated, this would just add more. The long term effects could be a heath hazard, but the data is still inconclusive)
- More reliable communication.
- More secure data transfers if security is an issue.
- May use less power.
- Wired communication circuits don’t produce significant levels of electromagnetic radiation.
- Can be more expensive.
- Can be very labor intensive to install.
- Wires can be expensive over long distances, and longer cable lengths require thicker wire to compensate for voltage drops. (the setup may cost more than buying wireless devices)
The second consideration is what communication methods to use. It appears that most people who have research the I2C / TWI problem recommend RS-485 for long cable lengths. This is a form of 2 way serial communication that operates at half-duplex. This is similar to the RS-232 serial port that the Arduino already has however the RS-485 is longer range and can interface with multiple devices instead of just one to one other like the RS-232 serial port. The RS-485 is addressable like a Master / Slave network similar to I2C / TWI method. The main difference is that the RS-485 will require extra hardware for each arduino, which can cost $5- $10. Short range wireless transceivers will cost about the same, so this will require more research before making the decisions. Right now I am thinking about supporting both wireless and wired communication methods.
Let me know if I missed something.
After doing more research on I2C I realized that there is a major flaw in my plan to connect multiple Arduinos for the Arduino House home automation project. The problem is that the cable length is limited. I2C works great within a breadboard environment because the separate Arduinos are very close together, however once the length of the cable increases, so does the levels of noise. From what I have been researching, the reliability if this communication method can start to break down within 3-4 meters and will not work well at a length of 10m. The longer the cable the more noise is collected, and the I2C / TWI wires work more like an antenna rather than a useful communication method. The only mention of success I could find for long distance I2C was about a lab that was using I2C at over 100m, however this was only obtained by using shielded cable and using redundant data transfers with error checking. It also appears that the longer the cable the slower the data transfers between master and slave devices, so there is definitely problems with the I2C filtering noise when higher levels are present. Here is a link to an Arduino forum with more information. http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1277641608
Unfortunately I am going to have to start over and learn more about other data transfer methods before I can get much farther. I think I will also have to order more parts. I want to be able to use multiple Arduinos (at least 10) and be able to place the Slave Arduino at a distance of 100ft (30m) from the Master Arduino with an Ethernet shield. I am sure this is doable because a lot of different cables are sold over 100ft. I will post updates as I learn more.
I have been playing with getting some of the core data transfers working with my different Arduinos. I am using multiple Arduinos for the Arduino House home automation project because overall the project should be simpler to work with because the pieces will be modular and if one is unplugged then only that part goes offline and the rest of the system will continue to work. Also this will be easier for other people to use the Arduino House home automation system because they can use pieces of my system to fit their needs instead re-writing everything themselves. My goal is to make the individual components nearly plug and play so that less code tweaking is required.
However, for now I am currently trying to decide the best way to communicate between Arduinos. I am using the I2C data pins for a TWI (two wire interface) connection. These are located on analog pins 4 & 5 on the Arduino UNO. Using these pins for data transfer seems pretty easy. I’ll post more data as I learn more.