While on a 48 hour long drink/blackout, the idea was posed that the sofa should have under lighting. Seemed like a reasonable request. With the installation of a projector, the room had to be kept as dark as possible. A few dented shins and it was evident that some kind of low-level lighting was required. Jump to having 2 large pieces of MDF cut to 10mm narrower to the sofa outline and we’re half way to victory. Looking through Ebay it was easy to find LED strips that would be sufficient to wrap around the perimeter of the MDF; it was just a matter of controlling the colours.
For a while I’d been playing around with JeeNodes, a small device which is basically a mash-up of an Atmel chip (Arduino UNO compatible) and a RF12 radio. Incidentally the guy who made the JeeNode – Jean-Claude Wippler – wrote a blog showing different ways to use his product from low battery sleep to how his RF12 library was optimised. I say used as he threw in the towel to do other projects. Anyway, the JeeNode range had a new member – the JeeNode LED.
The JeeNode LED was based on the same Atmel chip and radio, but also had three MOSFETs connected to PWM pins on the 328 allowing a common-anode LED strip to be dimmed and colour mixed. JCW even wrote an article on how to fade between different colours when requested; it couldn’t be easier. I needed 2, one for the centre cabinet and one for the sofa.
After soldering together the set, I connected everything up, programmed the board and I was away, at least for the front cabinet. This JeeNode would be connected to my always-on media PC/server Ubuntu box but the JeeNode didn’t have a USB -> serial chip on board. Fret not, after a quick visit to Ebay, I had a FTDI board which had the ability to output 3.3v which the JeeNode needed. The 12v for the LED strip was stolen from the PSU of the server and soldered into place.
The default JeeNode code assumes that you’ll be sending bytes and bits containing the colour to fade the LED’s to next, but I was far to dumb to understand bit-shifting so I modified the code to monitor the serial port for ASCII data which described the palette in a much more friendly manner. Yeah its less efficient, but it worked.
Now that the non-wireless JeeNode was in place, I could connect up the second module. Easy enough, and using the RF12 library it wasn’t long until I had the 2 talking like an old lady knitting group.
Unfortunately, solar flares or EMP would mean that occasionally a packet wasn’t received by the sofa device and you’d end up with one strip one colour and the other flickering or just plain off. I had omitted the ACK method of the RF12 library where a message is only counted as sent if the sender receives an acknowledgement (ACK) from the receiving node. I went back to the drawing board, and changed it so that the cabinet module would get the new colour, send it to the sofa module, wait for an ACK, then action the fade. The result was synced fading.
Unfortunately software can only get you so far, and the 2 LED strips I bought – even though they were from the same seller – had a slightly different colour temperature. And the sofa LED strip – as it has to stretch the full 5m – changes hue from tip to tail. Minor things in the grand scheme, but still annoying. I played around with removing some of the red from the cabinet node, but it caused other issues which finally made me give up.
At the end of it all, I had myself cheap stripclub lighting in my living room. Score.
- Arduino code on GitHub: https://github.com/SorX14/Arduino/tree/master/JeeNode/jServer