Moneylender Professional Store AutoPay Login MLP Online Nixie
Whitman Technological Corporation
The Museum · Exhibit Nº 3

The Lightshow

A ten-foot-tall, twenty-foot-diameter ring of light in the front yard — and anyone on the internet can take the controls.

Live now

The ring is online. The simulator runs year-round, and the controls are open to anyone on the internet — right now.

Take the controls
The ring, running in falling snow

How It Started

The lightshow project began from four motivations. First, I wanted to see how much weatherproofing I really needed to put some electronics reliably outside in the Western New York weather. I had a few 3D printed parts that were surviving quite well outdoors and a lot of the outdoor electrical housings I’ve seen can be quite minimal on waterproofing. Second, I wanted to build a little physics engine for fun. I’ve always loved physics and it has some really neat math and trigonometry, and I hadn’t had a solid opportunity to play with sines and secants since doing GIS work for the State of South Dakota. Third, I wanted to test the WiFi bandwidth and performance of cheap ESP-01 wireless microcontroller boards. And fourth, I wanted to do something a little unique for my holiday lighting on my house.

Saturn built of blue and white lights at NASA's Galaxy of Lights display
NASA’s Galaxy of Lights — where the seed got planted.
Josh standing among the illuminated displays at the Galaxy of Lights
It was really beautiful. We estimated a minimum of 25 million lights in the display.
3D printed holder gripping a pool brush and skimmer outdoors
3D printed holder for pool brush and pool skimmer
3D printed lamp base installed outdoors
3D printed lamp base to replace the metal one that rusted out

I had some background messing around with RGB LEDs. I played with a little 16x16 LED matrix in the past, goofing around with an Arduino Nano to draw some simple animations. I made a little fireworks show for it, and it even got a few updoots on Reddit’s Arduino sub. Today, the matrix is sitting on my workbench in the basement, siphoning a little power from my 3D printer, still playing the last fireworks program I made for it.

Reddit thread with upvotes on the LED matrix fireworks project
A few people approved of my project and/or wanted the source code.
16x16 NeoPixel panel - still happily blinking away today.

I wanted to go big for the lightshow in the front yard, so I let myself spend $500 for 25 x 5m LED weather-shielded strips. I bought another ten the following year as I needed to replace some strips that had not survived the harsh winds and melting snow. Since the ring I built is 2.5m tall, I had to cut the strips, solder my own leads, and seal the ends with silicone.

Reels of weather-shielded RGB LED strips
The last few reels from the 35 I bought for this project.
The ring lit at dusk with panel 0 dark, its strips and electronics removed
Panel 0 with its strips and electronics pulled for replacement — the rest of the ring plays on.

Design and Build

Powering all these lights was no small feat. At full brightness, the whole ring could draw perhaps 100A at 5 volts. Fortunately, the difference in brightness from 80% bright to 100% bright was almost imperceptible, and the current draw at 80% was around half the full-bright draw. I put in a software limit that the system never instructs full bright.

I bought three 80A 12V power supplies, and intended on running the ring off two, with the third as a backup for when something inevitably went wrong. But with the 80% brightness fix, the whole ring runs happily off one 12V supply. The LEDs need to be fed at 5V, and the ESP-01 needs solid juice at 3.3V. I eventually had to buy a dozen high quality 5V all-weather regulators, and the 3.3V draws off the 5V supply with a LDO regulator.

Cheap adjustable 5V regulator boards
Bought 80 of these adjustable regulators, but 30% of them pop like matches instantly
Close-up of a scorched, burnt-out regulator board
One of the casualties — scorched the moment it was powered.
Weatherproof 5V regulator module
These beefy 5V regulators are already built for the outdoors and can easily handle the load from one panel.

Structurally, I used four 9’ tall fence posts to hold the ring up in the air. Some strips of pressure treated planks at the top and little bamboo sticks for the three lower horizontal braces. The scaffolding is woefully underengineered, it turns out. A smart person would have used two bamboo sticks!

LED panels hanging along a wall during development
For six weeks, I had one, then two, and eventually many more panels hanging along my wall during development.
Wooden lattice panel on sawhorses with LED strips draped over it
Lattice panels on the sawhorses, getting their strips fitted.

Try to imagine the worst possible way to attach the LED strips to the scaffolding. Got a picture of it in your head? Yep, that’s what I did. I designed a 3D printable system to allow each strip to be independently oriented so the strips would provide “the best view” to passing cars. Each attachment to bamboo was a three piece “spaceship”, and the top attachments were a four piece system. Each bamboo section attached to the fence post via a 3D printed bracket, and the ends of the bamboo and pressure treated segments attached to each other with more 3D printed segments. Each ESP-01 and board was protected by a 3D printed hat, too. With 12 panels of 4 drops per panel, this means I had to 3D print 684 individual parts. My main 3D printer was taking too long so I bought the cheapest Ender 3 I could find to help shoulder the load. The Ender3 is actually a really solid machine – worked beautifully right out-of-the-box.

Wireframe render showing direction vectors radiating from a viewpoint through the ring
The aiming model — every strip oriented for “the best view” from the street.
Bracket that holds up the top of each string of lights — drag to inspect.
“Spaceships” that hold the middle and bottom attachments.
Parts that link the panels together.
Large-format 3D printer mid-print
My main 3D printing workhorse
Ender 3 printer printing lightshow parts
A new Ender printer to help get the job done before the holidays arrived.
3D printed spaceship clips holding an LED strip to a bamboo support
Some spaceships holding a LED strip to a bamboo support.

To make the connections to the ESP-01, its 3.3V regulator, and the 5V power and data lines running to the LED strips more manageable, I designed and cut 12 custom PCBs on my homemade CNC router — the FerrousCNC, Exhibit Nº 1.

PCB trace layout for the panel controller board
The circuit board I made on my CNC router to link all the components of a panel together.
Same board design in the 3D viewer
KiCad schematic of the panel: 12V input, 3.3V regulator, ESP-01, and ribbon connectors
The panel schematic — 12V in, a 3.3V regulator for the ESP-01, and ribbon connectors chaining power and signal.
Under the hat — the ESP-01 plugged into the custom-cut board.
Side view of the 3D printed cap on a panel top, open on the side and bottom where the wires run out
The hat that protects each panel's electronics — open on the side and bottom, decidedly non-hermetic, worked like a charm.

I programmed up a little website to drive the whole thing, which also served as practice making a Razor Pages website, which I had not really done before. The website runs the physics simulation on a background thread, and reads the parameters that govern the environment of the simulation from settings that can be controlled in real-time. The settings page quickly became a monstrously overwhelming mass of input controls. None of my neighbors dared to fiddle with the settings directly, but stuck to switching between presets I had pre-made. If idle for 15 minutes, the system will switch to another preset at random, with some being suitable for daytime and others for late night. The ring automatically decreases the max brightness based on the time of day so it doesn’t blast my neighbors all night long.

Website showing the live output for the “Dripping With Gold” preset
Most of the parameters you can set for the physics engine. (each option has a hidden set of animation controls, too)
Website showing the live output for “Lumpy Rainbow” preset

The Light Ring Lives!

“Tropical Seafloor”
“This Way to the Emerald City”
“Neon Dreams”

Perhaps my biggest mistake (ok, this whole thing was probably a big mistake) was not knowing I needed to connect the +5 and GND wires at the bottoms of the RGB drops. I only connected the data wire, letting the +5 and GND flow down from the top of the strip. This was a problem because bright LEDs would pull the GND up above 0V and pull the +5V down as we move farther from the supply point at the top of each strip. If one strip had lots of bright lights, and the next didn’t, a data signal that looks like solid 1s and 0s to the bottom of one strip might read all 1s to the next strip. And when it got the signal to do all 1s, everything went full 100% bright, which pulled up the ground even farther, making the strip get stuck in all on ultrabeam infinity brightness mode. A UPS driver handed me a package and told me that my lights were triggering his epilepsy when he was delivering to our street a few nights earlier. Not the desired viewer experience. Connecting 5V and GND at both ends of the strip finally eliminated the flickering nightmare brightness problem.

The ring strobing when the signal would get corrupted across the ends of the strips.
Bottom of an LED strip showing the blue data wire and newly added red and black power wires
Blue data wire was the only wire initially. Red and black power wires added to fix the strobing.
Basement ceiling hung with prepped LED panels, coiled strips ready to go
Panels prepped and hanging in the basement, ready for season two. All bottom links have +5 and GND wires added.

Wind. Wind was rough. It would make the strips fold up, sometimes cracking the thin conductor ribbon inside the flexible PCB ribbon. Then I’d be stuck cutting into the middle of a strip, splicing in a segment of a few LEDs, and then sealing it again with silicone – which was terrible. The second year (2025-2026 winter season), a big wind storm right after New Year’s pulled over one of the posts, snapping the bamboo rods and leaving the light ring in a pitiful way. I dismantled the ring for the year about a month earlier than I planned.

The strip is broken where it's held by the spaceship. As the ring changes color, you can see exactly where the signal is cut and the strips aren't changing.
The ring collapsed in the snowy yard after a wind storm
Ring has collapsed under heavy winds.
Daylight view of the collapsed ring structure leaning over
Daylight after the storm — the ring in a pitiful way.
Snapped 3D printed bracket
Bracket snapped in half when the ring collapsed.
Other half of the snapped bracket
Other side of that same bracket.

The ESP-01s work great until there’s a lot of them. With 6 panels running (6 little WiFi devices) everything runs smoothly at 30+ FPS. Once I add the other 6 devices, at least three devices will start tripping on all the noise and their FPS will drop to 1 or 2 FPS, and sometimes get stuck looping the old set of frames. With Claude’s help, perhaps I can find the spot where my firmware can be tightened up, and we can get 12 or more panels to stream their color updates in lockstep at 30FPS consistently.

ESP-01 WiFi microcontroller board
An ESP-01 WiFi enabled microcontroller board. Very capable little guys!
Outdoor WiFi access point mounted near the ring
I tried many things to get all the ESPs talking at full speed, even installing an outdoor WiFi hotspot just a couple dozen feet from the ring.

Wrap Up

This was a super fun project to do. I loved seeing it changing a bunch because one of my neighbors was pushing buttons on the website. The physical ring comes back with the snow, but the simulator never sleeps. The website runs year-round, and has a page that shows the live state of the panels, whether they’re connected or not. Feel free to hop in and mess around. There are guardrails all around the system so you can’t command it to burn anything out. It can run full white, max brightness continuously (because it gets scaled before it goes out to the panels) so you don’t have to be afraid you’ll mess anything up. There’s also buttons to reset the whole sim, if you’ve messed up the physics and don’t know what setting needs to be changed.

I hope you have a similar project you’re getting ready to tackle. Good luck to you!

The dismantled ring hanging bundled from the basement ceiling
Off-season: the whole ring hangs bundled from the basement ceiling.
Coils of LED strips, bamboo, and 3D printed parts in storage
Strips, bamboo, and 3D printed brackets, waiting for winter.
The “Lonely Comet” preset.
← All exhibits