LED Glass Desk V2.0





Introduction: LED Glass Desk V2.0

After being invited to exhibit the desk at Maker Faire, I decided to ramp it up a bit. So I took all the  ideas that had been floating around in my head since version one and put it together. This version has an embedded server in it and can receive event notifications from the network. It no longer requires a computer attached and is completely stand alone. By the way, here's a link to the first version: https://www.instructables.com/id/LED-Glass-Desk/

Here's a video:

Step 1: Parts List

To start, you'll have to choose your desk, picture frame, box, or whatever you want to use. Take some measurements and decide how many lights you'd like to include.

I used an Ikea Galant desk, which just happened to have the perfect frosted surface to diffuse the lights. That is really the most important part of the project.

Assemble the desk according to the normal instructions. We can easily work with the completed desk from underneath.

Additional Parts:
Arduino Uno Ethernet
Arduino Power Source (http://www.adafruit.com/products/63)
Addressable ws2801 or lpd8806 (I used http://www.adafruit.com/products/683)
Power supply for LED strip (http://www.adafruit.com/products/352)
peg board or foam core
100 zip ties
padded double sided tape

By the way, all my electronics for this version came from Adafruit.com. They were extremely helpful on their forums and I was able to get everything I needed in one order from one place. You can get one or more of the light strips and just connect them in serial.

Step 2: Arrange Your Lights

This step took some patience, but was very important. Cut your peg board or foam core to fit under the desk. The Galant has a very nice open area between the main two support rails. If you saw version 1, you'll know that I used the foam core and painter's tape to position the lights. That was a very flexible way to try out different positions and it worked for almost a year until I tore it out to redo it for version 2.

I used the double sided tape to attach the hinges to the desk and then bolted them to the peg board. The velcro keeps it closed, but provides easy access to open it up whenever needed. This was great for the Maker Faire, because I was able to show people the guts of the desk. 

Step 3: Add the Brain and Connectors

Now figure out where you want to place your Arduino controller. You'll want to make sure you have easy access to connect the signal lines to the first light in the strand. The lights on this model are marked with an "In" and "Out" side, so make sure you follow that.

The Arduino will connect to the lights using the ground pin and two other pins. pay attention to which pins you use because this will have to match the Arduino code. The default in the code is to connect the yellow Data wire to pin 2 and the green Clock wire to pin 3.

Once everything is placed, it is a good time to make your wire connections, by whatever means you prefer. I used RC servo connectors for the signal lines and Molex connectors for power. There were commonly available and easy to work with.

For the initial power connection to the lights I used a 2.1mm barrel connector with screw terminals. This matches the power supply in the parts list.

CAUTION: Both the Arduino and light power supplies use the same connectors. If you connect the larger power supply to the Arduino, it will be damaged. I marked the two connectors with different color electrical tape to make sure I did not do this.

Step 4: The Software

Now it's time for the software. You can download the Arduino code from my GitHub account.

You'll also need to download and install the Arduino tools to upload the code onto the microcontroller. http://arduino.cc/en/Main/Software

Open up the code in the Arduino software and modify the required lines. You'll need to change things to correspond to your selected hardware. The entries are all marked in the code with the word "update" so search for that and follow the tips in the comments.

You'll have to change the MAC address to match your Arduino ethernet shield, the IP address to match your network, the number of lights to match your light strand, and the grid function to match your physical layout.

The grid function may be the trickiest. It takes an x.y coordinate and maps it to the numeric index of the light in the strand. Luckily some experimentation makes it very obvious which lights are which.

Step 5:

Now double check your wiring and light it up. The code is set to run the test pattern immediately and the begin listening for incoming connections. If you don't see the test pattern, then verify your power and signal connections. If that doesn't help, make sure that the upload to the arduino went correctly.

Now you can control the desk by requesting a web page. Just send it one of the accepted commands. You can find a list of commands in the code. The format will look like this: http://desk_ip/alert?ffffff or http://desk_ip/skype

Once you've confirmed that is working correctly, you can set up any scripts you want to send commands to the desk. I've included a couple of AppleScript files that can be used to trigger the lights from a Mac app like Mail. There is also a Growl style that shows how to get Growl to trigger the lights.

Remember that since you can control the desk over the network, these events can come from almost anywhere...servers, render farms, mobile devices, voip phones...whatever can request a web page.



    • Pocket-Sized Contest

      Pocket-Sized Contest
    • Pro Tips Challenge

      Pro Tips Challenge
    • Paper Contest 2018

      Paper Contest 2018

    We have a be nice policy.
    Please be positive and constructive.




    Got all the way up to this part. Not super familiar with the Arduino Ethernet but I have it hooked up and it has an ip. I loaded both Libraries and am now down to only a few errors when verifying (cannot upload yet and hoping it just will upload when I complete squashing this problem.

    call of overloaded 'Adafruit_WS2801(int, int&, int&, int)' is ambiguous

    Adafruit_WS2801 strip = Adafruit_WS2801(STRIPLEN, dataPin, clockPin, WS2801_GRB);

    I got it figured out pretty quick... must have had some out of date code:

    Change int to uint8_t:

    static uint8_t mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0x27, 0x05 }; // update this to match your arduino/shield

    static uint8_t ip[] = { 10, 10, 16, 211 }; // update this to match your network

    This gave me some trouble too. It looks to be a mismatch between the demo I used when making my code and some changes contributed to the module's GitHub repo. I believe this comment thread at Adafruit has the solution you are looking for:


    The suggest changing the int to uint_8t like so:

    uint8_t dataPin = 2; // Yellow wire on Adafruit Pixels
    uint8_t clockPin = 3; // Green wire on Adafruit Pixels

    If you can post back and confirm that works for you, I'll try and update the code.


    Glad you got that. Sorry I couldn't comment sooner, I was traveling for a conference. I had run into that also and I thought the published version was corrected. I'll have to update the code.

    When I try to 'Verify' the code on the Arduino software I get "'WebServer' was not declared in this scope" how can I fix this?

    So what if I wanted to connect all this through a witless connection. Wifi...

    That requires different hardware. The Arduino that I used only supports wred networking. You would have to use a different Arduino and get a "wifi shield", possibly like this one: http://www.adafruit.com/products/1491?gclid=CN6qtJ...

    I'm currently working (a little slowly) on the next version. So many people have asked about using a Raspberry Pi that I'll probably move to that which has easier wifi capabilities.