Let's Make Robots!

Cheapest way to communicate between microcontroller and computer

I'm working on a non-robotics project, an 'intelligent' mood light. I got a bright 3W RGB LED and soldered up a board so that I can control it from my Arduino (never worked with this much current before -- I got to play with 1W and 2W resistors). I found a nice lamp-type metal-and-glass housing and cut some sheets out of white plastic to sit behind the glass and act as diffusers. So anyway, I've got that all working, and I can cycle smoothly through colors, and it looks really pretty. But now I want it to do something more intelligent. I was thinking of adding sensors to the microcontroller itself, like a thermistor to let it glow more red as the room gets warmer, or dim itself when the room lights get dark. But really, I can tell what's going on in that room -- I'd rather have it tell me what's going on OUTSIDE that room :)

One idea was to have it glow in different colors or something depending on the weather -- the temperature outside, or the probability of rain, etc. To do that, it'd need to talk to my computer in my bedroom. I could write a program on the computer to fetch weather information from weather.com or something, and make that data available to the controller. But I'm stuck on trying to find a good, cheap way to have the controller downstairs talk to my computer upstairs. I'm looking at SparkFun's BlueSMiRF Gold, which is $65 -- at the upper end of what I'd want to pay, but not out of the question. But it has been out of stock for weeks. The Silver version is in stock and is actually a bit cheaper, but it only has a max range of 100 feet in open air, and I'm not sure that'd be enough to make it from one side of my house to the other, through several walls.

Do you guys have any other ideas? Wireless is of course the easiest, but my mood light is powered from the wall, so an option like X10 that runs over the house's power lines would work too. I can't find any good options to interface X10 with a microcontroller though. I see the XBee, which looks interesting, but that's out of stock too, plus I'd need to buy a second one for the computer too, plus build a circuit to adapt it to RS232 signal levels, so that's not a very good option. I'm hoping someone here can suggest something I haven't thought of -- I'm open to creative ideas, and it doesn't have to be very high speed. This won't be updating very quickly, so even just sending a bit or two a second would be something I could consider. I kind of toyed with the idea of using an X10 module that can turn a power outlet on or off, and then connecting that power outlet to a second power connector on my mood light, which I could connect to an I/O pin. Then I could just switch that on or off via X10 to slowly communicate the information to the microcontroller, one bit at a time :) But getting all the X10 equipment would also bring things up to the 'expensive' range. Blast! Surely there must be some cheap way to communicate without spending $100+ on hardware!

Dan

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.
I haven't tried this, but take a look at http://www.arduino.cc/en/Tutorial/X10, http://www.x10.com/products/x10_pl513.htm at the PC end and http://www.x10.com/products/x10_tw523.htm at the Arduino end. It adds up to $50.

Huh, I must have missed that. That looks like it might be exactly what I need. Thanks for the links.

Dan

I have not thought through the practicalities, but it might be possible to hijack the bluetooth connection from a wireless headset or something (inexpensive) so you can more easily talk with the computer wirelessly. That way you won't need any extra wires from your computer/laptop (presuming it has bluetooth capability) and the bluetooth chips in cheap headsets are very small, although I don't know how easy it would be to use that connection. Just an idea - I would probably not be able to do it myself.
Can you work with RS-232? I have a protocol which will allow the inspection and modification of any RAM addres in a PIC. Only works with wired asynch for now, though.