ColorNode

ColorNode is a wireless Arduino-compatible microcontroller board designed to replace the stock controller board on GE Color Effects light strings.

Background

ColorNode was inspired by the original controller protocol reverse-engineering effort featured here:  Hacking Christmas Lights. That work enabled simple control of each individual bulb of these light strings using just one pin on a microcontroller.  The stock controller works nice and the patterns are good, however being able to have full control of the color and brightness of each bulb unlocks the potential for awesome holiday light displays.  Hacking these lights is also relatively inexpensive, compared to using other addressable strings or light sequencers on the market.

Design Process

As I mentioned on my posting for the GE Color Effects Arduino Library, I have been working towards using these programmable strings for my holiday decorations.  One issue I had when I was planning out how to install these lights was being able to control and synchronize multiple strings. Each string only needed to be driven with one pin on a microcontroller so technically I could run all of my strings off one board.  However, I didn’t like the idea of running a bunch of extra wires to each string from a controller. One nice thing about the stock GE controller is that it has a wireless receiver that works with the supplied remote to cycle the lights between the pre-programmed patterns. Since I would be replacing that controller and supplying my own control signals, I would be loosing the wireless aspect.  That’s when it came to me: create a cheap wireless microcontroller board to replace the stock controller and make it fit in the existing little electronics box.

Unfortunately, that last sentence imposes a lot of design challenges, because there are usually trade-offs between cheap and wireless and microcontroller and small.  As I was looking for solutions to this design, I knew that the wireless part would be the most expensive part.  I didn’t want to re-use the existing module because there wasn’t much documentation about it and I wanted better control over the wireless link. I looked at XBee and Nordic transmitters and others that can be found at SparkFun.  Most were either too big or too expensive.  There is one, however, that fits both criteria: the RFM12B module from HopeRF. Not only was this wireless module small (16mm x 16mm) and inexpensive (~$6 from SparkFun or ~$3 if you order straight from the OEM), but it is also easy to solder.  It gets even better – the stock controller uses a simple receiver paired with a transmitter in the remote.  The RFM12B radio is a transceiver, so data can be received and sent from the controller board.  Sweet!

Having found a great solution for the wireless radio, the next step was to figure out how to use it.  XBee radios are nice because they can just look like a wireless serial port link and there is very little setup necessary.  The RFM12B, however, requires more low-level control and configuration to get up and running. It uses a SPI interface for communication along with an interrupt pin to signal receipt of new wireless packets.  Being more of a systems guy and less of a software guy, I looked around for existing implementations of this radio.

Eventually I stumbled upon the work of Jean-Claude Wippler who has an awesome design blog and store over at JeeLabs.org and JeeLabs.com.  His main electronics design project is called the JeeNode. It is a low-cost, low-power Arduino-compatible board with an RFM12B wireless module interface.  He has also developed many smaller sensor and I/O boards that interface directly with the ports on the JeeNode.  The greatest thing, from my perspective, is the RF12 software library created for the JeeNode. This wealth of code removes all the complexity from using the RFM12B in the Arduino environment.

It made no sense to reinvent the wheel, so I set out to use the RFM12B radio with the RF12 JeeLabs code in hand.  Next step: PCB. I admit I blatantly copied and modified the JeeNode PCB design in Eagle. That’s the whole point of Open Source Hardware anyway, right? :-) I wanted to use all through-hole components (besides the radio) so that it could be easily built by anyone or supplied as a kit.  Unfortunately the ATmega328 in a 28-pin DIP package is pretty large (I had originally though about using a lower pin-count ATtiny85, but ultimately stayed with the ATmega so I could stay with the supplied libraries and Arduino IDE). I removed all the interface headers and moved components around and managed to fit everything on a board sized for the little plastic enclosure on the light strings.  I liked that box because it was nice and small and already had environmental seals to keep out moisture. I run the antenna wire in a small loop around the box instead of coming out to avoid having additional areas I needed to seal.

As you can see from the PCB image and pictures below, the board shape replicates that of the stock controller, down to the holes for the plastic standoffs in the enclosure. You simply tear out (there is some extra epoxy in there for water sealing which makes it slightly more difficult to remove) the stock controller, cut off and strip back the wires going to the lights and the power brick, and solder them in the same positions on the PCB.  Both the light strings (50, 36 count) and the yard sculptures (santa, tree, snowflake, etc.) share the same circuitry and electronics box, so it should work in most (if not all) of the Color Effects products. For the PCB manufacturing, I used the DorkbotPDX board service as I have for several other boards now (previously reviewed here) with good success.

Name

This brings me to the name: ColorNode. Since this project is based so heavily on the JeeNode design and RF12 libraries, I decided to call it (with JCW’s permission) ColorNode. Leveraging the JeeLabs hardware and software designs enabled me to quickly design and prototype this project.  It is really just a stripped-down clone of the JeeNode with the sole purpose of functioning as drop-in replacement for the stock Color Effects controller. As I said earlier, I wanted to take advantage of the existing enclosure and I didn’t want to run extra wires all over the place. Now I can just run my light strings as normal and not have to worry about any other connections.

Design Details

Like the JeeNode, the ColorNode is based around the Arduino design but runs at 3.3V instead of 5V.  The RFM12B module is only 3.3V tolerant so this was a necessary change. The ColorNode is programmed like the JeeNode or Arduino Pro-type boards where the USB-to-Serial converter is separate from the PCB and connects to a six-pin programming header.  I use the USB BUB II from Modern Device (also a US distributor for the JeeNode) as my programming interface.  This is similar to other FTDI-based USB-to-TTL adapters, except I like the way I can switch the supply and logic voltages with jumpers. I need to power and program the ColorNode at 3.3V instead of 5V to avoid damage to the RFM12B radio which shares the same power connections.  I program the Atmel chips with the standard Arduino bootloader and download code to it using the Arduino IDE set to Pro or Duemilanove w/ATmega328. There are very few parts because I wanted the assembly cost to be as low as possible (~$10 in larger quantities).  You can find the bill-of-materials here: BOM and the Eagle PCB design files here: ColorNodeV1. If you want to have the PCB manufactured, here are the Gerber files: ColorNodeV1.0 Gerbers.  It is a two-layer board and the size is 1.82″ x 1.42″.

Software

With the hardware designed and tested, I’ve moved on to the software. I have created two pieces of software for this project – code for the node itself and code for a controller board. I am using a JeeNode for a controller, which sends wireless commands to the string nodes to set patterns, colors, sequences, etc. I use my GE Color Effects Arduino library for the basic string control.  The nodes each have a Node ID established so that the controller can either address an individual node or all at once using a broadcast message. Since the RFM12B radios are transceivers, I use ACK messages to signal back to the controller that a command has been successfully received.  The controller will re-send several times if it does not receive an ACK. This method results in very reliable communications, more so than with just a simple transmitter/receiver pair. The code is still a work-in-progress, but I have the basic wireless communication done and mostly debugged.  I just need to add some more light patterns to the node software and define light show sequences in the controller. Once I get the software to a stable state I will post it here.

Pictures

ColorNode in Enclosure

ColorNode in Enclosure

Assembled ColorNode

Assembled ColorNode

ColorNode PCB Top

ColorNode PCB Top

ColorNode PCB Bottom

ColorNode PCB Bottom

ColorNodeV1 Schematic

ColorNodeV1 Schematic

ColorNode V1 Layout

ColorNode V1 Layout

Update: 26 November 2011

Here is the current code I am working with: ColorNode Code. I used the G35Arduino library which was created off of my GEColorEffects Arduino Library.  It has some nice programs in the examples which mimic the stock controller. In order to not have to mess around with the timing of the delays, I modified the G35 library to use the DigitalWriteFast library.  By hard-coding in the pin number for the LED string output, I was able to achieve the 2-cycle latency I wanted and then I could simply use the correct 10, 20, and 30 μs delays necessary.  I am able to get reliable flicker/error free string lighting with this code.  I think it has been updated since I grabbed it (November 20th) so it may have more/better features.

I also made a modification to the RF12 library to have the rf12_easySend function retry much faster (10ms versus 1s) and increased the retries up to 10.  I found that, as long as the controller and nodes are within range (~50-100′ as implemented) the command will be received reliably using this method.  Also, with the retries happening so fast, if one or more nodes doesn’t properly receive the command on the first try, it will on one of the subsequent retries and it will appear nearly simultaneous. It’s at least good enough for synchronizing multiple strings.

I don’t have a good interface yet for controlling the light programs/colors/etc. but it is all based on serial commands to the controller or the node PCB itself.  It’s all spelled out in the Arduino code and a list of options/commands is displayed in the terminal window when connected.  I’d like to connect the JeeNode I’m using right now to my home network (maybe with this?) and run a web server on it so I can control the lights from a web browser.  That’s next on the To Do list…

The code is not perfect, but  I had to baseline it so I could program the nodes and hang up my lights.  I’ll be watching the development of that G35 library and I hope more people get involved and add features, like new cool light programs.  After this season, I’ll re-visit the code and make any upgrades so the show is even better for next year.

68 Responses to “ColorNode”

  1. [...] [Paul] was looking to spice up his holiday decorations this year, so he picked up some GE Color Effects lights and started hacking away. [...]

  2. [...] [Paul] was looking to spice up his holiday decorations this year, so he picked up some GE Color Effects lights and started hacking away. [...]

  3. Jim says:

    I’m interested in how I can do this. I have a slightly different spin though. I don’t want to preprogram the patters but be able to control the lights individually like a dmx lighting system via ethernet or serial. So my software that manages lights can direct them what to do. Any suggestions?

  4. [...] [Paul] was looking to spice up his holiday decorations this year, so he picked up some GE Color Effects lights and started hacking away. [...]

  5. Paul says:

    I would think that the latency of the RF link and the occasional lost/re-sent packet may limit refresh rates or prevent smooth transitions. The RF channel can support good bit rates (57.6k by default I believe) but there is a trade-off between reliable communication and bit rate and RF bandwidth and range.

  6. [...] ColorNode » DigitalMisery.com. ColorNode is a wireless Arduino-compatible microcontroller board designed to replace the stock controller board on GE Color Effects light strings. [...]

  7. [...] [Paul] was looking to spice up his holiday decorations this year, so he picked up some GE Color Effects lights and started hacking away. [...]

  8. [...] Lights + GE Color Lights Arduino Library (w/ example sketch) + ColorNode Board  to replace the regular controller. Here is the schematic blueprint:, can we print this board with [...]

  9. Chris says:

    Do you plan on selling these boards? I’d buy one. You should look into setting up a kickstarter.com account to gauge interest and fund it before you take the plunge.

  10. Rob says:

    +1 for offering these for sale. I’m still learning how to produce PCBs but I’m already deep into Arduino. Would love to have a handful of these in time for some early holiday hacking! I can get the parts, do assembly, etc. I just need the boards! :-) Any chance this might be a possibility?

  11. Paul says:

    The Eagle files are on the website if you want to edit or produce the design. I can generate Gerber files and put them up as well if that would help. Like I mentioned on the project page, I use the DorkbotPDX PCB service. Right now, however, they are not accepting any new orders until December. There are other options (BatchPCB, Advanced Circuits, Seeed Studio Fusion PCB Service, etc.) and I have reviewed a few on the site and there is also a listing at the Adafruit site: http://www.ladyada.net/library/pcb/manufacturers.html. They have various pricing and delivery speed, which is always a trade-off. I personally do not have any stock I could provide at this time.

  12. Paul says:

    I am looking into the possibility of getting this on Kickstarter. Unfortunately, the timing would probably be that kits wouldn’t be available until after this year’s holiday season. If you can still find the lights in the stores, I would pick up a box or two anyway. I was still able to find some in January last year at greatly discounted prices. Something else to consider as well: the yard sculptures share the same circuitry so this board can also be used with those. I have have tried it on the tree already, which I was able to get for over 50% with after-season discounts. Most consumers can’t justify the normal pricing for these strings so stores sometimes have a hard time selling their stock and they end up in the clearance aisle.

  13. Rob says:

    Thanks Chris, I think having Gerbers would be great. Though I will admit, I am still such a newbie to this PCB process that I’m only about 90% sure what to do with the files (upload them to the fab house of my choice, I know). You’re probably like “sheesh, who is this guy?” but PCB mfg is still very much a black art to me. If you know of of any “dummies” type tutorials (“take this file and send it here with these specs,” etc.) that would be a huge help. Thanks for your patience with the n00b request and for your work on this awesome project!

  14. Rob says:

    Doh! Got you mixed up with one of the previous posters, Paul. Sorry about that!

    –Rob

  15. Chris says:

    I subscribed to your main RSS feed so just let me know when you want to take my $. :)

    Nothing wrong with setting up the kickstarter for after the holidays. More “hackers” will have their hands on them once the sales kick in. And once you’ve funded the project you’d be all set to sell boards directly to the public come next season.

  16. [...] DigitalMisery.com has an open source drop in wireless replace board for these lights. WOW, you can’t ask for more than that. He does not sell the boards yet but keep checking his site to see if he gets a Kick starter going or just follow his open source documents and spin your own board. He links to his code and the Arduino library’s “G35Arduino” [...]

  17. Beeker says:

    You were advertising on another blog that the colornode was available as a drop in solution right now. But looks like that’s not the case. I just bought a box of these color effects lights and am thinking about cracking them open. It sounds to me like this solution is a triggered pre-programmed “show ” methodology, instead of a synced stream of data. I see some mention above as to why this is, because of data rate constraints, but am wondering if that might not be a better solution for a sound synced light show. Either way, do you need to use a jeelink or an arduino with an xbee, or is there another solution to sending the “trigger” to the colornode. Sorry if it sounds like I’m asking the obvious questions. Thanks for doing the footwork and thinking of how to better utilize and hack these lights.

  18. Paul says:

    This project is a “drop-in replacement” due to the same form, fit, and similar function. Yes, it does have pre-programmed patterns which are necessary for some effects where you need to change the color on multiple bulbs simultaneously with deterministic timing. I have also added basic network streaming functions such as fades and fills and chases, but it need not be limited to just that. The idea was to have an easy, fully programmable wireless hardware interface for these strings and then just worry about writing software to make them do whatever I want. Once the PCB is installed and closed up in the box on the string, the only way to communicate with it is via another board with the same radio module (like a JeeNode) programmed to communicate with the same protocol. XBee is a different frequency and RF protocol.

  19. Jim says:

    How exactly to I get the circuit board?

  20. Gary says:

    Do you sell the colornodes?

  21. lance says:

    i know nothing about electronics but would love to buy whatever controller/board i needed to make a bunch of strings of these lights work together

  22. Paul says:

    For those asking how to get this, I am not selling it at this time. I’m looking into the possibility of setting up a Kickstarter project, but right now the ColorNode is completely DIY. You would have to get the PCB manufactured, procure the components, assemble the board, and program the microcontroller. I have listed all the necessary info on how I made it if others want to make their own. Also, it should go without saying that a basic knowledge of electronics, microcontrollers, and embedded software programming is a prerequisite. I just want to make sure people don’t get the wrong impression about what this is and what it isn’t. Thanks for the interest!

  23. Michael says:

    Hey, thanks for sharing this info. This is just what I need for a larger tech-art project I’m pulling together. Tho I’m not yet too PCB / Arduino electro-technically adept. I’d love to learn to how to make these myself–tho I’d also be most interested to gladly contribute to a KickStarter campaign. Please do it and let us know!

  24. Mr. RGB says:

    I would love it if you could post gerber files. I don’t have a copy of Eagle, or any familiarity with it, and I’m not sure how long it would take me to coax it into producing gerber files that would actually work correctly when sent to a fab. (Given that December is already upon us, there’s not much time to get all this done!)

    I’d also be happy to contribute to a KickStarter campaign. Ideally, I’d like to be able to either order a board, plus all the parts, and solder it together myself, or be able to order a pre-made board. Being able to eventually order something like this from the various usual suppliers (SparkFun, Adafruit, etc.) would be wonderful.

    Thanks very much for making all of this available!

  25. Paul says:

    The Gerber files are on the project page. The DorkbotPDX PCB order is back up if you want to submit the Gerbers there for manufacturing.

  26. Mr. RGB says:

    Thank you very much!!!!!!!!

  27. Jason says:

    Let me start out by saying, this is awesome! This is something that I’ve wanted to do for some time now and just hadn’t. With this info I’ll be able to get started fairly easily. This will be the first time for me working with this type of project, and am a newb when it comes to this. I have a couple basic questions, if I may. In what I’m looking to do, I would be installing a ColorNode into each of four strings of lights. Am I correct in thinking that I could then have a JeeNode mounted on an Arduino board that would communicate to all four strands? And that each LED would be able to be addressed individually? ie I would be able to address Strand1LED1 independent of Strand2LED1? I apologize if it’s a redundant question. Where you are more into the hardware … I’m more into the software. I know programmatically it’s a fairly trivial task, but am not sure if this hardware setup is what I’m looking for. If so, this is a brilliant solution for my task.

  28. Mr. RGB says:

    Hi, Jason.

    Like you, I am basically a software guy, but I suspect I have more hardware experience than you do from your comments. Since I did get these working (the lights, anyway… I haven’t messed with the transceiver yet but I have read through the source code and I think I know pretty much what it does), I think I can answer some of your questions:

    1) Yes, you could have a JeeNode that did that. Or you might find it simpler to do what I’m planning to do in the next couple of days, which is use an extra ColorNode board to do it. (I ordered extra boards and parts, so I will just build an extra board and make it be my controller.) I plan to hook the extra ColorNode up to my computer via USB and have it be the remote controller for the other boards. Another option is to take an extra ColorNode board and hook up some of the extra unused pins on the processor to pushbutton switches, and add a battery, with appropriate software modifications, thus creating a handheld remote.

    Note that the software is written in such a way as to allow you to use the Arduino environment’s “Serial Monitor” feature to interactively send text commands to the controller interactively (over your USB connection to it) and receive output back from it. Those commands, if sent to the controller, generally get packaged up by it into binary packets which are sent to other nodes via the tranceiver hardware. You can also send the same text commands directly to a node when the node itself is connected via USB. I suspect that the Serial Monitor program is just basically reading and writing from “com3″ or wherever the controller is connected (via a serial-over-USB software adapter), so you could probably write your own serial communication program fairly easily in Java or whatever, if you want to do fancy programmatic remote control instead of typing commands by hand.

    2) The software that this page links to (the “ColorNode code”) sends a “node address” as part of its outgoing data packets. You can compile a different node address into each of your LED strands (just change a #define each time you compile and download code). If you do that, strands other than the one you are sending to won’t attempt to acknowledge received packets or act on them if the node address in the received packet is different from the one they were compiled as.

    3) The command set that is supported by default is pretty basic, but it has support for commands like “turn all LEDs from #5 to #10 to the color red”, as well as “run pattern #3 for the next 30 seconds”.

    4) I found it useful to get an extra Arduino Uno board and use it to get my software setup debugged before I started trying to talk to an actual ColorNode. The Uno board was also helpful for letting me use my AVRISP programmer to download the Arduino bootloader onto blank chips before moving them over to a ColorNode board. Of course, if you only buy chips with the bootloader preinstalled on them, you won’t need to do this.

    5) I also found using Eclipse and the Arduino plugin to it much easier to do complex programming in than using the Arduino environment. Eclipse is a much nicer programming environment than the default one that comes with Arduino. (However, setting up Eclipse to use the Arduino plugin was nontrivial. I’ll post some of my experiences on that on the plugin page in the near future.)

    Anyway, thanks again to Paul, Darco, the JeeLabs folks, and the other contributors to this project!

  29. Paul says:

    Jason-

    Mr. RGB did a great job explaining the control aspect of this project. I have used both a straight JeeNode and another ColorNode PCB to control the strings. The ColorNode board is really a JeeNode without any expansion headers and re-shaped to fit in the GE controller box. I suggested the JeeNode because it is a great platform for prototyping with other projects when it’s not being used as a ColorNode controller. I did a quick test yesterday to see how quickly the current controller code and RF payload structure could change individually addressed LEDs, since that seemed to be one of your desired use cases. I timed it to be about 330ms between LEDs, or the ability to toggle individual bulbs (on one string or across multiple) at a rate of 3 per second. I was using full acknowledgements to ensure proper packet delivery, so that probably slows it down a bit, but I like knowing the RF link is robust. Later I’ll also try speeding up the bitrate to se how that affects the delay times and conversely the communication range. Right now I think I have only about 50 to 100′ range, but the antennas on each ColorNode board are also not optimally placed.

    Thanks,

    Paul

  30. Mike says:

    Thanks for all your work here, looks great. Can you point me to specs on what to use for the antenna.
    Thanks

  31. Paul says:

    I just use a 78mm length of solid 22 AWG wire. I have the wire coming out the bottom and loop it once around the inside of the case under the board.

  32. Ray says:

    I just received 6 colornode PCBs from DorkbotPDX. Since I still haven’t purchased my G35 strings yet, I had a quick question. Is there enough clearance in the controller box to add a DIP socket for the MCU?

    Thanks!

  33. Paul says:

    Yes. My first couple of assemblies used the socket and then once I was confident things were working OK, I just directly soldered the chip. The nice thing about the socket is that, if you have an Arduino board, you can pop it in there for programming instead of needing something like an FTDI adapter to program the ColorNode.

  34. Michael says:

    I have a specific project in mind that the ColorNode may be perfect for. I’ve read over this page and all comments a few times now, and yet I’m still not 100% clear on what components may be necessary for my situation. Pardon my confusion (I’m much more adept on the software side), and could just use some feedback to help wrap my head around how i might utilize the ColorNode (thanks so much for it!).

    I’m trying to figure out if it is better to go forward with the project using ColorNode, or else build something more directly with the common Arduino board, standard RGB LEDs, and wires.

    Generally, my project spec is to control 12 sets of RGB LEDs to produce unique color combinations within 12 distinctly controlled bulbs (a GE 16-light LED Christmas light set of bulbs should work fine, as I can just leave out 4 of the bulbs). I want the 12 active 12 bulbs to be controlled from my laptop (USB is totally fine, maybe even preferred for reliability, tho wireless could also work). I’m programming custom software made with Flash / ActionScript running on my laptop to control the bulbs (this is probably a separate issue of having Flash communicate with Arduino, which I am also looking into, and so should not be too relevant here). I do not necessarily need to trigger various pre-programmed fancy patterns and such (tho that could be an cool bonus), I only need to adjust the color values of each red, green, and blue LED within each uniquely designated set (changing these values with smooth transitions would be good, tho that can probably be handled directly with common Arduino programming anyway).

    So to do this with ColorNode, I would need:

    - a set of GE LED G35 Christmas Lights (of course)
    - 1 ColorNode board (manufactured thru DorkBotPDX). This replaces the GE component?
    - a JeeNode component? This is the controller that links my computer to the ColorNode? Does this also need to be ordered to be manufactured, or can I get it elsewhere? Is there a way to get around this with USB? (I do understand that ColorNode is based on JeeNode, but am node understanding why an JeeNode is needed to work with ColorNode. What exactly is the relationship between the JeeNode, the ColorNode, and the computer system?)

    Anything missing here? Any soldering involved? Or after I receive the components, is it pretty much just plug-in, program, and play?

    Sorry if I’ve asked any totally obvious questions. I’m just needing to make production decisions asap, and be more clear on the ColorNode system and processes. Thanks!

  35. Mr. RGB says:

    Michael:

    The relationship between JeeNode and ColorNode is that a ColorNode is basically a custom JeeNode in a different form factor so that it fits in the white plastic box which is part of the GE Christmas lights (and which holds the original light-controller board before you rip it out and replace it with a ColorNode). Electrically, they’re identical other than some missing unused input/output pins that exist on the JeeNode but not on the ColorNode.

    You don’t need a JeeNode at all, as long as you make (at least) two ColorNodes, and use one as the controller (radio transmitter) connected to your computer, and the other (as a radio receiver) to attach directly to the lights and run them. Strictly speaking, if you don’t need the wireless remote control feature, you only need one ColorNode — you can just attach your computer to it directly and then send commands to it using the Arduino IDE’s ‘Serial Monitor’ feature to tell it what lights to turn on and when.

    Once you order the parts for a ColorNode, you’ll need to solder everything together. You’ll also need to solder the completed board to the existing wires of the light set.

    You’ll also need to ensure that the ATMega328P CPU that you buy for this project is pre-programmed with the Arduino bootloader (you can get pre-programmed chips from sparkfun, etc. such as here: http://www.sparkfun.com/products/10524) or you will need to ensure that you have the necessary tools to burn the bootloader onto it yourself. (This will involve an AVRISP or similar programmer, and probably an Arduino Uno or similar board which has an ISP connection for a programmer to connect to.)

    WARNING: The Bill-of-materials that Paul gives above links to chips that are NOT preprogrammed with the bootloader, so be aware that you will need to program the bootloader yourself if you order these.

    You will probably also want to have some way to download programs (not bootloaders, but your own code) onto a chip which is already attached to a ColorNode board. One way to do this is with an FTDI board (http://www.sparkfun.com/products/9873). Basically, you plug the FTDI board into the ColorNode, and plug the other end into a USB cable that connects to your computer, and then tell your software to download new code to the chip, or send serial data to the program as it runs on the chip. If you don’t want to get an FTDI board, you can just get an Arduino board at a Radio Shack or whatever, and then plug the chip into that, do the programming, and then plug the chip back into the ColorNode when you’re done programming, but having to move the chip back and forth gets old pretty quickly, so I’d recommend getting an FTDI board. (Note that there are 3.3V and 5V versions. You need the 3.3V version for ColorNode, but getting a 5V version for other projects might be a good idea also.)

    After thinking about the ColorNode project a bit, I decided to cut the wire between the white box and the lights a few inches away from the box, and solder a pair of large three-wire inline audio plug (male & female mated pair) between the two, so I can unplug the white box (containing my ColorNode) from the lights easily. That way, if I want to quickly remove the white box from the lights, take it into my house, reprogram it, then take it back outside again and plug it in again, I can do so without having to laboriously remove the whole set of lights from where they’re hanging. These audio plugs are easily available at Radio Shack and other locations selling audio equipment, and are normally used to connect components such as full-size earphones to stereo systems. (For vague consistency with other plugs, I wire the plug’s outer metal ring to the ground wire, the middle ring section to the middle (control signal) wire, and the tip to the +5V wire. If enough other people do this also, this might become a defacto standard, allowing people to swap controllers and light sets at some point in the future…)

    I hope this helps!

  36. Mr. RGB says:

    Hi, Paul.

    After having put together a few of these, I have a few comments on the ColorNode board design. If you ever decide to put together a Kickstarter project, you might want to make a few minor changes to the board design:

    1) The pads that are used to attach the capacitors are really small. I found these difficult to hand-solder, particularly once the solder mask from the DorkBotPDX surrounded them and partially covered their edges. I would recommend making the “annular ring” around these pads a bit larger.

    2) The holes that go through the pads that are used to connect the ColorNode to the light set (+5/LED/Gnd) are very comparable in size to the stripped wires that need to go through them are (at least, for my G-36 light set). This made it quite difficult to get the wires to go through the holes. If these holes were made a little bit bigger, it would be easy to put these wires through instead of being a struggle as it currently is. The big “+5V/Gnd” holes had this problem too, although to a lesser degree.

    3) I am curious where the 78mm measurement for the antenna you use came from. Is there a site somewhere that describes how to select an appropriate antenna length and wire gauge for this RF receiver, based on intended usage, frequency, etc? I searched for one but didn’t find one.

    4) If you do a Kickstarter project, you may want to also offer a SMD version of the board as an alternative to the through-hole version. I actually find that dealing with SMD boards is easier — just smear some solder paste vaguely in the right places, position the parts over where they’re supposed to go, pop the whole board into a toaster oven or on a $20 griddle set to 400+ degrees, and things automatically seat themselves and pull themselves into place due to surface tension as the solder paste melts. A few seconds later, lift the board off of the heat, and you’re done. I was surprised once I had done this a few times to discover that soldering tiny parts via this method was actually much quicker and easier than hand-soldering larger through-hole parts was.

  37. Michael says:

    Mr. RGB:

    Thanks so much for this feedback and all the detailed information (it really helps). I’ve already ordered a set of GE 16 lights from Home Depot, a few ColorNodes from DorkBotPDX, and am now considering exactly what other parts will be needed.

    A few more questions:

    - Is the ColorNode from DorkBotPDX a fully assembled ColorNode, or just the PCB board? (my guess is that it is only the PCB, and that I’ll have some soldering to do! As I’ve never constructed an electronics board before, it will be quite an initiatory task).

    - I now understand that (for wireless remote), 2 ColorNodes are required (or a ColorNode and a JeeNode) to be transmitter and receiver. Tho I’m not understanding how the transmitting ColorNode (or JeeNode) is supposed to connect to the computer. Unlike a standard Arduino board, I see no USB port. How does a ColorNode and/or JeeNode connect to the computer? By WiFi? If by Wifi, why not just transmit by WiFi any instructions from the computer to the light-controller ColorNode directly?

    Described differently: for my project, I’m developing custom software (running in Flash) that I want to communicate with the light-controlling ColorNode, so that certain parameters (within the Arduino program that will be uploaded to the ColorNode) can be modified on-the-fly (so my computer will be like a remote-control, be it by wireless or wires makes not much difference). Since the light-controller ColorNode has wireless functionality, can I connect to it with WiFi directly from the laptop?

    Here is a diagram as I understand (and do not understand) the system so far (I’ll only be lighting 12 of the 16 bulbs in my string):

    http://www.michaelgaio.com/lab/_misc/AION_EVA_schematic_grid2.jpg

    - I’m going to want to have about 3′ distance between each GE bulb. If some additional wire is cut and spliced between each bulb, everything should work the same, right?

    - How are the ColorNodes powered? Do I also need a 3AA or 4AA component for battery power of the ColorNode?

    - How are the lights powered? Does the GE package come with a general power source (independent of the controller)?

    By the way, really good idea of installing the audio plugs for modularity and ease of use. I’ll be sure to do that with my project.

  38. Michael says:

    Can anyone tell me the width of the base of a GE Color Effects bulb component (if you removed the bulb casing, and just had the green part offset from the wire)? My GE lights may not arrive for another week or so, and it would really help to know this dimension now. I’m planning to remove the transparent bulb casing somehow and creating a custom casing. Also, I will need to have the entire string with each bulb component strung thru a clear acrylic tube (so need to know how big the tube will be).

    From the looks of this image, I would guess the green base is about 3cm – 4cm across?

    http://www.deepdarc.com/module/album/view/?pid=1418

    Thanks.

  39. Mr. RGB says:

    Hi, Michael,

    The ColorNode you might get from DorkBotPDX is just a PCB board. You send them the Gerber files (see above) and they make the board(s) for you and send it back to you. What you get from them is basically what you see in the “ColorNode PCB Top” and “ColorNode PCB Bottom” photos at the top of this page. Note, by the way, that DorkBotPDX requires that you order boards in multiples of 3, so if you order through them, you will be getting 3, 6, 9, etc. boards from them, not just one.

    You then have to buy the parts separately (see Paul’s BOM (“Bill of Materials”) above, which lists part numbers and suppliers) and solder them onto the board yourself. Please note what I said before about buying Atmel CPU chips with the Arduino bootloader already installed on them, which I would strongly recommend in your case so you won’t have to also buy an AVRISP programmer and learn how to use it. By the way, I also strongly suggest that you get more parts than you need, in case you accidentally damage some parts (due to static, overheating, hooking things up backwards, etc.) when you are soldering them to boards. The parts are relatively cheap compared to the postage you will pay in getting them mailed to you, so buying extra parts for projects like this is almost always a good idea. I ordered 6 boards through DorkBotPDX, but I also ordered enough parts for 8 boards, just to have some extras in case things went wrong.

    Some possible sequences of connecting things together are:

    Computer 3.3V FTDI board (ColorNode or JeeNode) ColorNode —> lights

    or

    Computer 3.3V FTDI board (ColorNode) —> lights

    Note that the FTDI board will connect to the six pins that you can see in the “ColorNode in Enclosure” picture above. It is important to ensure that you hook it up correctly (not backwards), so be sure to look at the writing on both boards to make sure that “GND” on the FTDI board matches up with “GND” on the ColorNode when you plug it in, and be sure to check this EVERY TIME YOU PLUG IT IN so you never plug it in backwards.

    There is no WiFi involved. The wireless communication used by ColorNode/JeeNode is a different (and much simpler) wireless standard than WiFi. Your computer’s WiFi card won’t be able to communicate with it.

    The driver that will be installed on the computer (download it from SparkFun, from the FTDI board webpage I mentioned above) will tell the computer to think that the USB cable and its attached FTDI board is actually a serial port. A program on the computer, such as the Arduino IDE’s “Serial Monitor” program, can send text to this virtual “serial port” to be received by a ColorNode or JeeNode, and can likewise receive and display text that was sent from the program running on the ColorNode or JeeNode.

    Regarding power: A ColorNode or JeeNode directly connected to the computer via USB can be powered by the USB cable itself. A ColorNode put into the white [or green or whatever] box of the light set will be powered by the light set’s original 5V voltage adapter (which is connected via a plug to the box). You won’t need batteries.

    I would think that spacing out the lights 3 feet away from each other as you describe probably wouldn’t produce problems, but it’s hard to tell. There sometimes can be weird line-impedance matching problems and such when passing digital signals long distances over wires. About the only way to know is to try it. I suggest you get things working with the lights at their original distances first before making such a change.

    If you are not in general familiar with soldering or electronics, my suggestion to you would be to go to a Radio Shack store, or to their website, and order a copy of the book “Getting Started In Electronics”, by Forrest M Mims III, and read it cover to cover before you proceed. It is both short and excellently written, and will tell you pretty much everything you need to know, and it’s written at a very basic, easy-to-read level that assumes very little in background knowledge. I recommend it very highly, and it is my standard answer for people who want to know what book to read first about electronics. Also available from Radio Shack is a book which I believe is titled “Getting Started With Arduino” or something similar which may give you a useful overview of getting simple stuff running on Arduino.

    Unfortunately, the bulbs in my sets of lights are a different type than the one on the page you linked to, so I can’t help you with measurements. Perhaps someone else can.

  40. Mr. RGB says:

    Hmm. Annoying, This forum software omitted some stuff in my ASCII text diagrams above, apparently thinking it was supposed to be HTML. I’m going to try this again using parentheses instead of greater-than and less-than symbols. You’ll just have to imagine that “–)” is an arrowhead. Anyway, those should be:

    Computer (–[usb cable]–) 3.3V FTDI board (—) (ColorNode or JeeNode) (–[wireless]–) ColorNode —) lights

    or

    Computer (–[usb cable]–) 3.3V FTDI board (—) (ColorNode) —) lights

  41. Paul says:

    Mr. RGB-

    Thanks for the suggestions and thanks for helping out others with the questions – you’ve been responding faster than I’ve been able to. I agree that the default hole/pad size in Eagle were too small. I will definitely look to enlarge those since I had the same problem inserting the stranded wires from the GE cables. The 78mm length corresponds to a 1/4 wavelength whip at 915MHz. Antenna theory states that antennas (specifically mono-pole antennas like this one) perform best when their lengths are tuned based on the frequency of the signal being applied so that they can support proper resonance (http://en.wikipedia.org/wiki/Quarter-wave_antenna#Quarter-wave_antenna). If you need maximum range, you can create a better antenna or extend it straight out of the box, but if the transmitter is within 50′ or so, looping the wire within the box seems to work ok. I like the idea of an SMD version. I have done SMD assembly at home in the past using hot air and I have been interested in trying it out using the griddle method. I wanted to keep this first version more accessible so that’s why I used through-hole parts. But if I decide to do the Kickstarter thing, a fully-assembled and programmed SMD version would be a nice option. I am still looking around to see if any places online have some close-outs of these strings so I can pick up a few more for me and for Kickstarter.

    Paul

  42. Paul says:

    Michael, others-

    Regarding power for the ColorNode boards. My first revision of the board had 5V on the 6-pin programming connector. What I found was that, with the strings attached and without the 5V power supply plugged in, I could power the LEDs (albeit dimly) via my USB-to-serial converter. I did not think that was safe for either the converter or the strings or the PC for that matter, so I switch to putting 3.3V on the programming connector. This then forces you to use a 3.3V FTDI cable/board instead of a 5V one. Both the supply to the ColorNode and the I/O voltage must be 3.3V. The ATmega device can handle 5V without issue but you would risk damaging the radio if you apply 5V for supply voltage on the 3.3V line. Again, there is still a slight issue when the strings are connected since, when you feed 3.3V from the programming connector, it might back-feed the 5V line through the LDO regulator. I don’t remember the lights turning on in this state, but it is still undesirable. The best way to operate the ColorNode during programming/debugging/serial communication would be to only connect DTR, RT, TX, CTS, and GND on the programming connector to your USB-to-serial converter and power the board and the strings with the GE 5V supply that came with the lights. If you use the USB-BUB-II board, you can add jumpers to select I/O and supply voltage (3.3V versus 5V). Removing the jumper for supply voltage disconnects that completely. I soldered the regulator on the back of mine so the wimpy 3.3V supply from the FTDI chip wasn’t being used when I wanted to power the ColorNodes. You would probably be fine (and I have done it many times) connecting the 3.3V line to the programming connector while the GE supply is supplying 5V. The 3.3V line on the board will be fed by two sources, but it shouldn’t cause any problems. When you are using one ColorNode as a transmitter, you don’t need to use the GE 5V supply and you can just use the 3.3V supply from the FTDI board. I will make sure to include a diode on the next revision to isolate the two supplies from each other to avoid these issues.

    Paul

  43. roboengr says:

    Any help on getting the code to compile on the arduino 1.0? I am getting a errors like :

    …arduino1.0\libraries\g35/g35.h:1 error: stray ‘/357′ in program
    ..arduino1.0\libraries\g35/g35.h:1 error: stray ‘/273′ in program
    ..arduino1.0\libraries\g35/g35.h:1 error: stray ‘/277′ in program

    I am not finding any information on tracing this error. I have added the Arduino.h in some places in the library files that where causing an error. Wprograms.h was the original.

    Can you suggest a way to correct this or steps to set up the lybraries if that is my problem?

  44. roboengr says:

    The libraries file in g35 does not support the new compiler. theWprograms.h is no longer available and must be changed along with other things to the arduino.h. Perhaps the wrong file was included in the zip from the one Paul compiled.

  45. roboengr says:

    Ports.h file is missing in the zip. However the one at http://jeelabs.net/projects/cafe/repository/entry/Ports/Ports.h works for the compiler 0023

  46. Michael says:

    Mr. RGB, thanks so much for your last comment. That information has answered alot of my questions, and I now have a clear idea of how the system works. I’ve just received the PCBs, most of the component parts from Newark, and am just waiting on a few more items from SparkFun, and the GE lights … and then will actually build this (whereby Paul’s information on voltage considerations and such will also be helpful). Thanks!

  47. Michael says:

    Paul, which large three-wire inline audio plugs did you use? I’m actually planning to modularize my project as much as possible (including cutting the wires between bulbs and adding in three-wire plugs for more, or less, wire extensionsn between bulbs).

  48. Michael says:

    ( ^ that question was actually meant for Mr. RGB, tho of course, any feedback Paul or anyone else has on three-wire plugs and extending the length of wire between bulbs is most welcome. thanks )

  49. Rob K says:

    The Audio connectors, are likely XLR style connectors. I did the same for my setup, although I put the male connectors on the source side by accident… oh well.

Leave a Reply

(required)

(required)

© 2012 DigitalMisery.com Suffusion WordPress theme by Sayontan Sinha