It's very common for tech companies to have booths at trade shows to show off what they have and how their products can benefit your application, and Digilent is no exception. With the ECEDHA conference coming up, Digilent Marketing Director Larissa Swanland decided we needed something big and flashy. We carry weatherproof strips of the WS2812 addressable LEDs in 1m lengths with 30 LEDs on each strip, so what better way to grab your attention than to build a display with 30 strips!
Yep, that's 900 individually addressable LEDs. This is gonna be awesome!
A small disclaimer - this was designed and built on the fly with some materials and tools at hand. That means that it is wide open for interpretation and redesign. The main challenge was figuring out the power for the LEDs, so do with it what you will, just be safe in your power connections and use of tools.
Step 1: Hardware
The initial design of this array is to play a version of Snake (see GIF at the top of the first page), though it will display any image that is 30X30 pixels. The list of materials and tools is related to that goal. It
- 30 1m strips of WS2812 addressable LEDs, 30 LEDs per meter
- chipKIT uC32 microcontroller
- 5V, 75A power supply - Each strip at 100% power (white light) required 1.4A, and 10 strips in parallel was consistent with that at 14A. 1.4*30=~42A. We went a little overboard with 75A, but at least we know we won't have power supply issues.
- various lengths of wire for connections - I went with 12-14 AWG wire, for reasons explained below.
For the hand controller:
- RJ45 Pmod connector pair
- 4 momentary push buttons
- 4 1k? resistors
- short wire lengths, solder, bare PCB, metal standoffs with screws, small acrylic panel
The optional materials are dependent on how you want to mount and display your array.
- 1/4" (6.35mm) clear, colorless acrylic sheet (plexiglass) - We want the display on top of a table at a booth, so it can't be opaque. I split the board into 3 panels with 10 strips each. Since I wanted the space between pixels to be the same in all directions, I measured the spacing between 10 LEDs and found it to be 13 1/8 " (33.3cm). Thus, 2 panels at 13 1/8" X 42" (33.3cm X 106.7cm) and the third panel 18" X 42" (45.7cm X 106.7cm). The third allows about 6" (15.2cm) for mounting the chipKIT, promotional materials, etc. I also needed some small scrap pieces, so ask your acrylic supplier if they have any they are willing to give you.
- 6 friction catches for cabinets. The spring was clipped to reduce the tension, making it easier to connect the panels
- super glue - hot glue will not stick to the weatherproof silicone sheath around the LED strips
- acrylic cement
- 1/" (6.35mm) particle board
- flat black enamel paint
The tools are more dependent on the mounting material chosen, but most will be needed however you decide to do it.
- saw - I used a band saw and a hand saw at various points
- sandpaper and sanding block
- drill press with 1/2" (12.7mm) and 1/8" (3.2mm) drill bits - a hand drill will work, but the holes are ugly
- rotary tool with cutoff wheel
Step 2: Designing
The data pin on each strip only runs in one direction, so I initially planned on one giant string of 900 LEDs. I first tested a few strips with a simple code to just turn them on at 100% white light, then strung them together end to end. That didn't work so well as the first strip used 1.4A but the last strip only received about 500mA, making it noticeably dimmer. Well, that's not going to work.
I decided to power the strips in parallel from two main bus lines on each panel, but then connect the data pins in series. The strips come with a connector on each end that connects power as well as data lines to allow for serial connection, but they also have a second set of bare wires for power connections. I used these bare wires to connect them in parallel to the bus lines across the bottom of the panel and the connectors to pass the data signal down the line. Since the data must be serial, the strips must be connected end to end. This means that when you look at the display, the data comes in from the lower left and runs up the first strip, then down the second, up the third, etc. in a zig-zag pattern across the board. As far as the power is concerned, the strips are totally ambiguous with how you connect the +5V and GND, so this worked perfectly. I built a proof of concept on the table with just ten strips and at full power it was really starting to hurt my eyes and I had to wear my sunglasses.
That was the hard part of the whole design, just getting the strips all powered evenly. The rest was just a matter of getting it all onto a board.