Interactive Light Display

This page is still under construction.

In 2021, we introduced our interactive light display, a 3-dimensional matrix of LED pixels with various controllers to interact with the lights. We anticipate this being an ongoing project over time and will hopefully be a canvas we can expand upon each year.

TODO: put picture of display in action here

How It Works


The display consists of 1000 pixels, arranged in a 3-dimensional matrix 20 wide x 10 high x 5 deep. The pixels are spaced 6 inches apart in the width and height directions, and are roughly 1 foot apart in the depth direction.

There are three controllers (a Guitar Hero guitar, a Guitar Hero drum kit, and a Logitech steering wheel / gas pedal) and each one offers unique ways to interact with the lights as described below.

The display is subdivided in the width direction so that each active controller has its own section to control. When a controller goes active or inactive (based on whether any input on it was detected in the last 15 seconds), the pixels in the display are re-allocated to the remaining active controllers. If none are active, then the Interlude pattern is played (see below).


When the display starts up, and any time that none of the controllers are active, an “interlude” pattern is played across it. This is meant to be colorful and to attract attention, hopefully enticing people to stop and play. The moment an input is detected on any of the controllers, the interlude stops and that controller gets allocated the full display.

Drum Controller

The drum controller supports 2 modes: static and moving. The light color matches the color of whatever drum head is played.

The instruction sheet for controlling the drums

Static Mode

In the static mode, each of the 4 drum heads is allocated 1 quarter of the display and each hit of the drum causes a pulse of colored light to play. The kick drum pedal gets an overlapping “quarter” that is centered in the display. Whenever the kick drum and another drum play at the same time, the colors of the overlapping pixels are merged together.

Moving Mode

In the moving mode, each hit of a drum head causes 2 pulses of colored light to shoot across the display from opposite corners. The kick drum causes a pulse to start in the center and expand outward. Whenever pulses intersect, the colors are merged.

Guitar Controller

The guitar controller sets all of the pixels on the display to whatever color or colors are pressed on the guitar when the strum bar is played. The controller actually has 2 sets of color buttons on the fretboard. The ones closest to the headstock behave as expected, causing their color to be put on the display. The set further up the neck cause white to also be added to the list of colors that go on the display. The “start” button on the guitar adds “black” to the list of colors that go on the display.

The whammy bar serves as a dimming control and will dim the lights proportionally to how far the whammy is pushed.

The instruction sheet for controlling the guitar

The various modes control how multiple colors are arranged or how they move across the display. The “back” button on the guitar cycles through the modes and the left/right buttons on the D-pad select the direction of movement for a given mode. The up/down buttons on the D-pad are mapped in the controller to the same signal as the strum bar and thus cannot be used independently. The speed of movement is controlled by a 4-position slider switch (technically the switch has 5 positions but the middle position doesn’t register a unique value for some reason).

Static Block Mode

In this mode, multiple colors are arranged into blocks on the display and remain stationary.

Static Alternating Mode

In this mode, multiple colors are alternated pixel by pixel on the display and remain stationary.

Moving Block Mode

In this mode, the colors are arranged as blocks and the blocks move in the direction dictated by the settings selection using the D-pad.

Moving Alternating Mode

In this mode, the colors are alternated by pixel and move in the direction dictated by the settings selection using the D-pad. This mode is somewhat useless since all movement tends looks identical regardless of direction since there are no visual patterns larger than a single pixel for the brain to process the movement.

Wipe Block Mode

In this mode, the colors are arranged as blocks and the blocks wipe on/off in the direction dictated by the settings selection using the D-pad.

Wipe Alternating Mode

In this mode, the colors are alternated by pixel and wipe on/off in the direction dictated by the settings selection using the D-pad.

Car Controller

The car controller offers two modes currently, but we expect to develop more as time goes on since it lends itself very well to playing simple games.

The instruction sheet for using the car controller

Light Control Mode

In this mode, you use the controller to “drive” the lights in various directions. The steering wheel shifts them left and right, with the speed increasing as the wheel turns further. The gas pedal makes the lights scroll up and the brake pedal makes the lights scroll down, with speed increasing as the pedals are pushed further down. The paddle shifters control the speed in the forward/backward direction.

The starting configuration is green and black arranged in blocks, but the colors can be randomly changed by pushing the upper-right button. Toggling between block mode and alternating mode is controlled by the bottom-left button, though alternating mode is not overly interesting since it is hard to distinguish the direction of movement (just like mentioned with the guitar above).

Chase Game Mode

In this mode, you play a game similar to Pac-Man with the goal of moving your chase pixel (blue) to the target pixel (green) using the steering wheel, gas pedal, and paddle shifters. The brake pedal is unused as the gas pedal is used to set how high up the display the chase pixel is with gravity fighting to bring it back down to the bottom. When the chase pixel reaches the target, the display pulses green and a new board is generated for the game to continue.

To increase difficulty, the upper-right button can be used to add wall pixels (yellow) to the board, which block the movement of the chase pixel. Pressing the button more times will generate new boards, each with an increasing density of walls, making movement more challenging.

To add even more challenge, the upper-left button is used to select the number of enemy pixels (red) that are also moving around the board trying to catch the chase pixel. They move at a measured pace always aiming to close the distance between themselves and the chase pixel. If an enemy pixel catches the chase pixel (or if you run into an enemy), then the display pulses red and a new board is generated.

This game is surprisingly fun to play and the ability to change the difficulty through adding walls and enemies makes it great for players of various ages and experience levels.

How It Was Built

PVC Framing

The framework of the interactive display is built from 1/2 inch PVC pipe spray painted black. It is constructed as a series of 10 panels, each containing 100 LED pixels. 2 panels connect together to make a single grid in the display, and the 5 grids are connected together in the “depth” axis by short 12 inch sections of PVC pipe.

Each panel is roughly 66 inches high by TODO inches wide. Panels that make up grids 1, 3, and 5 have a center vertical support, while the panels that go into grids 2 and 4 do not. The intent of this was to reduce the visual clutter as much as possible and avoid blocking pixels with support structure. Since everything is connected at the top and bottom, this seems to work well enough and those panels do not sag significantly.

The 3-dimensional nature of the structure required purchasing some specialty PVC connectors that were not available at Home Depot or other local hardware stores. We found these 4-way and 5-way connectors (intended for use in modular shelving/furniture construction it appears) on Amazon and they were relatively inexpensive. We originally attempted to make our own “Frankenstein” connectors by combining ones we could buy at Home Depot but no amount of glue or even epoxy was strong enough to hold together. That was a frustrating few days before we realized we could just buy what we needed online.

Because the 2 adjacent panels that make up a grid share a common center post, we have 5 extra posts with connectors to use when it comes time to store the panels and keep them square. The plan is to hang the panels on the wall of the shed in the off-season and store the short segments that connect the grids in a tote.

Pixels and Webbing

The LED Pixels are standard 12V WS2811 bullet-style pixels with black wires. We ordered them from Ray Wu on aliexpress and requested a non-standard cable length of 7 inches between pixels so that we could mount them at a 6 inch spacing. There was no extra charge for the increased cable length and that spacing worked perfectly for our needs.

The pixels are mounted into PixNode ExtremeStrip webbing from Holiday Coro. This is the first time we have used pixel webbing and are very pleased with this product and it feels like it will last a long time. We use webbing with 1 inch spacing, though only put pixels every 6 inches. We could have purchased webbing with just holes every 6 inches and this would have cost slightly less but we wanted the flexibility to change our minds on spacing and also like the slightly increased visibility due to the extra holes.

The webbing runs in 10 vertical strips per panel and is zip tied to the top and bottom segments of PVC. Pixels are inserted every 6 inches, starting from the second hole at the top. There is about a foot of un-pixeled webbing at the bottom of each strip to allow for snow to accumulate without blocking pixels.

Inserting the bullet pixels into the webbing can be a very tedious and painful process on the hands and fingers. Holiday Coro does sell a tool to make it easier, but we again went the DIY route and used a set of channel locks to grab each pixel and push it through the hole in the strip into a large socket (from a socket wrench set) on the other side. This gives some resistance to the webbing so that the pixel can slide through and lock into place while also giving it room to do so.

Electronics and Wiring

The electronics consist of a Raspberry Pi v2 single-board Linux computer, two 12V 30A power supplies, a router, and a Sandevices E682 Pixel Controller. These live in a clear tote box next to the display with a few holes cut into the sides to allow all the wires to pass through.

Each panel of the display contains 100 pixels and is its own DMX universe. 2 panels make up a grid and the display consists of 5 grids for a total of 1000 pixels across 10 universes. Power is injected at the back of each universe and that seems sufficient for good pixel behavior and color accuracy.

TODO: wiring diagram of the box and example panels

TODO: labeled picture of the electronics box


The software is written entirely in Python and runs on the Raspberry Pi computer. Because Python is awesome, there are already libraries out there for talking to pixel controllers using DMX over ethernet (E1.31) (the sacn library) and for interacting with gaming controllers (the xbox360controller library). This made it relatively easy to get up and running.

The code uses multiple threads to keep track of controller inputs, check for inactivity, and to update the lights. The light updating thread is the main worker and runs 20 times a second to ask each controller for its respective inputs, merge them together, and output the pixel instructions to the pixel controller. If necessary, we can reduce this polling frequency to improve performance, though we aren’t sure at what point the frequency would get slow enough that the change would be noticeable. So far, the Pi can keep up well enough, though there is some lag detectable when a player goes crazy on the drums.

The software is protected by a GNU General Public License and is available on here: We would be honored if people would take our starting point and make it even cooler!

Other Stuff

The Controllers

We acquired all of our controllers from thrift stores, which makes us a lot less worried about leaving them outside with the possibility of damage or theft. For the car controller, we built a simple wooden frame so that the steering wheel could be mounted at the proper height above the pedals.

We have not done anything to waterproof the controllers, which is concerning but thankfully our first year has been unseasonably warm and dry. We will likely have to just bring them inside or cover with a tarp for nights when it snows. Over the off-season, we may spend some time taking the controllers apart to determine if there is any way to effectively waterproof the electronics without rendering the buttons unusable.


One of the biggest challenges was figuring out how to communicate to people how each controller works and the things they can do with it. We made single page instruction sheets (see them above in the sections dedicated to each controller) and hung these from the car controller frame. At the suggestion of a neighbor, we also made larger poster-sized versions of these same sheets (printed across multiple pieces of paper, taped to corrugated plastic board, and “laminated” extensively with packing tape) and staked these into the grass right in front of each controller.

In future years, we would like to have a user interface on an old computer monitor we have laying around that can show not just the instructions but also give feedback as to the current mode, the next mode, related options, etc. We briefly tried to get that going for this year but experienced some software problems and ran out of time.