This instructable guides you through the steps in building a ceiling-mounted light that controls thousands of addressable RGB LEDs, reacting to sound and creating visually spectacular animations. A project to inspire your night club with sound-reactive lights, or a project to create a soothing ambient light for your study. The possibilities for customization are endless if you can just write a bit of custom arduino code.
This project has been a collaboration with GitHub's @daterdots, and stands on the shoulders of giants like arduino, pjrc, and the fastled community.
Step 1: Mechanical Design
The shape of the pendant is defined by the curvature of the LED strips as they are supported at a few places along the axis of the pendant. The top and bottom pendant supports are circular platforms that also house some of the system's embedded electronics. I like the simple cylinder shape we get from having only two support platforms - one at either end of the LED strip, but you can add rings at any point along the pendant's axis to control the curvature of the LEDs.
Step 2: Electronics Platform
The top support platform houses:
Teensy Microcontroller: https://www.pjrc.com/teensy/
Octo WS2812B - Ethernet to LED data management: https://www.pjrc.com/teensy/td_libs_OctoWS2811.htm...
AC->DC power supply: https://www.amazon.com/gp/product/B014018EWA/ref=o...
Screw terminals to help with power management: https://www.amazon.com/gp/product/B010UDG6NG/ref=o...
Pig tail DC connectors: https://www.amazon.com/gp/product/B0054D80LE/ref=o...
The ratsnest of power and data wires
Microphone for sound responsive animation: https://www.adafruit.com/products/1713?gclid=Cj0KE...
Eight strips of 4-meter WS2812B (60px/m) addressable LEDs. From what I understand, these are the same strips that adafruit sells under the Neopixel name. https://www.adafruit.com/products/2842 protip: adafruit has a hefty markup on these puppies, so with a bit of searching for international sellers you can cut costs in a big way.
These support platforms are designed to be cut out of 1/8" plywood on a 50W+ laser cutter, so they're assemblies of planar shapes brought together with machine screws and captive nut joints. You can find some creative examples of panel joinery here: http://makezine.com/2012/04/13/cnc-panel-joinery-... and the captive nut joint gives a great solution for assembling these planar geometries into 3D parts!
The ratsnest of wires on this platform looks pretty ugly, so I'd like to include a perimeter wall in future versions that keeps things looking tidy.
Step 3: Support Rings
The support platforms at the top and bottom of the pendant are designed to cradle the plastic housings of the LED strips on their rectangular cross section. In the third image above, you'll see 32 rectangular holes on the inner circumference where the LED strips are supported. The rectangular cross-section of these plastic LED housings are supported by sandwiching them between the inner and outer rings. The larger diameter ring supports the LED strips on the inner diameter and also on the outer diameter - causing the strips to arc from one support to the other. This is gives the top and bottom of the pendant a curved wrap-around look instead of leaving the LED ends dangling in the open.
Step 4: Lasercut Support Rings
Once you've spiffed up the basic support structure with some custom patterns, hit the lasercutter and make sure everything fits together nicely. Don't forget to account for the kerf of the laser cutter you're using - we want to make sure those LED strips are held snugly in place. Most laser cutters I've used have a kerf of about 0.1mm.
Step 5: Electronics: Power
First, we'll consider power. The LEDs and the teensy both operate on 5V, so you'll want to find a 5V AC/DC like this one. The current consumption of the teensy and the microphone are really small compared with the LEDs, so we'll just consider the LEDs. In Adafruit's writeup on best practices for wiring and controlling neopixels, they describe each LED consuming 60 mA of current at max brightness. https://learn.adafruit.com/adafruit-neopixel-uberg... With 1920 LEDs in the system, that would come out to 115.2 A. I'm not intending to power all of the pendant's LEDs simultaneously at full brightness, so I've undersized the power supply a bit, and settled on a 60 A supply.
To make sure we don't get too much voltage sag on the power bus, we'll need to make sure our connections from power supply to screw terminals is rated for the currents they'll be carrying. Using http://www.engineeringtoolbox.com/wire-gauges-d_419.html, we see that using 6 connections of 13AWG stranded wire will be sufficient for the maximum current the power supply can source. To ease connecting and disconnecting the LED strips, attach DC power male pigtail connectors to the screw terminals.
Step 6: Electronics: Data
To control thousands of LEDs with a refresh rate fast enough to satisfy the human eye, we'll need to up our microcontroller game from the basic arduino boards to the hyper-fast teensy 3.X (https://www.pjrc.com/teensy/). To manage data transfer to lots of parallel strands, pjrc makes a really cool board called the OctoWS2811 (https://www.pjrc.com/teensy/td_libs_OctoWS2811.htm...). The Octo board is specifically designed to mate with the teensy 3.X and pass data for 8 parallel strips of LEDs. PJRC has lots of good documentation on how to convert an ethernet cable to follow the Octo data protocol. Thanks PJRC - you're crushin' it.
You'll also want to wire up a microphone like this one from Adafruit https://www.adafruit.com/products/1713?gclid=Cj0KE... so the pendant can respond to its environment.
Step 7: String LEDs and Install the Brain
You'll want to clear some space in your workshop and get some good tunes playing in the background - this is going to take a while!
Start things off by suspending the top platform (brain) from the ceiling with some paracord. One strip of LEDs at a time, begin stringing the strips through their guide holes, attaching them to the outer diameter with 2mm zip ties. Make sure their power and data cables can reach the screw terminals and the outputs of the Octo. Repeat this for each strip until you've made a trip around the entire platform! Make sure to connect their data lines in a continuous string (clockwise or counterclockwise, your choice) so the output from the Octo will be orderly.
Once you've checked all your power and data connections, it's time to upload some code to the teensy and check your connections!
Step 8: Upload Code to Teensy
With the help of the fabulous people at http://fastled.io/. github's @daterdots and I have written code that maps visualizations onto the cylindrical surface of the pendant. The code is always being updated, so you can look at the Pendant repository on my github for the latest version of various scripts. https://github.com/martincowell/Pendant
The purple wave animation you see in the intro of this instructable is the "Pendulum Pony", and was written with the help of @jonaraphael. @daterdots has written a ton of other sweet animations, from stochastic twinkling, spectrum analyzer, and the classic shiny white chandelier look.
Best wishes with your project! There's plenty of room for customization with this pendant, and I'm looking forward to seeing your versions!