<p>Sunflowers arrange their seeds in interlocking spirals that follow the golden ratio. This pattern, called <em>phyllotaxis</em>, appears across nature—in pinecones, succulents, the unfurling of ferns. Engineer Jagi Natarajan turned that geometry into a physical object: a circular LED display where each light sits in a cell of a Voronoi tessellation derived from the same spiral math.</p>
<h2>From mathematical sketch to physical object</h2>

Paragraph 2 describes the algorithm that generates the display's geometry: points placed along a radial line and each successive point rotated by the golden ratio angle of about 137.5 degrees. This plot shows those points forming the familiar double spiral, which is then tessellated into the Voronoi cells that hold the LEDs.
<p>The pattern begins with a simple algorithm: place points along a radial line, then rotate each successive point by an angle derived from the golden ratio (approximately 137.5°). When plotted, the points form the familiar double spiral. A Voronoi tessellation of those points yields irregular, seed-pod-like cells—a natural partition for individual LEDs.</p>

Paragraph 3 explains how Natarajan exported the cell boundaries from a Processing sketch into CadQuery, building the full volume of merged cells, thinning the walls, and carving a centered hole for an LED in every cell. This FreeCAD render shows the resulting faceplate model before it was split into quadrants for the 3D printer.
<p>Natarajan exported the cell boundaries from a Processing sketch into Python using <a href="https://github.com/CadQuery/cadquery">CadQuery</a>, a parametric CAD library. The script constructs the full volume of all merged cells, then subtracts the shrunken outline of each cell to leave thin walls, and finally carves a centered hole for an LED in every cell. The resulting geometry was split into four quadrants to fit a consumer 3D printer bed.</p>

Paragraph 4 describes the first hardware version: 89 hand-soldered NeoPixel LEDs on a 3D-printed backplate, driven by an STM32 board with an I2S microphone. This photo shows the initial enclosure that housed that hand-built perfboard circuitry.
<p>The first version used 89 WS2812B (NeoPixel) LEDs, each hand-soldered to a 3D-printed backplate. A translucent mulberry paper faceplate diffused the light, screwed into the cell walls. An STM32 "Black Pill" board drove the strip via SPI, and an INMP441 digital I2S microphone fed audio into the microcontroller. Using ARM's CMSIS-DSP library, the firmware ran a Fourier transform with automatic gain control and split the spectrum into multiple bands, giving the code frequency-resolved energy data to work with.</p>
<h2>Audio-reactive patterns</h2>
<p>With frequency data in hand, the firmware can map sound to light in ways that feel alive. Natarajan describes a radial spiral pattern where brightness at each LED is a sine wave combining its polar angle and radius, modulated by time. Low frequencies pulse the center; high frequencies ripple the edges. The first track that "brought it alive" was Jon Hopkins' "Neon Pattern Drum."</p>

Paragraph 7 describes the second version's design: five identical PCBs arranged in a ring to leverage the standard five-board minimum order from fabrication houses, with 18 LEDs per board for 90 total. This photo shows that five-board radial arrangement.
<p>The animation framework treats each frame like a fragment shader: a lookup table gives every LED a normalized (x, y) position on the unit circle, and a per-pixel function computes color from position, time, and the current audio bands. This design later became the foundation of the SDK's animation ABI.</p>
<h2>Second version: PCBs, five-fold symmetry, and a web playground</h2>
<p>After showing the piece at a New Year's party, Natarajan set out to build a sturdier, more replicable version. Instead of four unique 3D-printed quadrants, the new design uses five identical PCBs arranged in a ring—leveraging the standard five-board minimum order from fabrication houses. Each PCB carries 18 LEDs (90 total) and the cell walls clip onto the board as separate 3D-printed parts.</p>
<p>Hand-soldering NeoPixels remained difficult because their pads sit underneath the package. At a programming retreat at <a href="https://www.recurse.com/">Recurse Center</a>, a friend with a hot-air rework station helped complete the assembly. The controller migrated from the STM32 to an ESP32 for Wi-Fi connectivity, and the firmware was rewritten in Rust.</p>
<p>The ESP32 now serves a local website. Visitors on the Recurse Center network can write sketches in Rust, C, or AssemblyScript, compile them to WebAssembly (limited to a 32 KB module and ~120 k fuel units per frame), and upload them to one of several sketch slots. The board runs the selected WASM module at 60 fps, gamma-correcting and power-limiting the output. The SDK exposes three capability flags—<code>NONE</code> (generative art), <code>AUDIO</code> (six bands plus transient/sustain envelopes), and <code>INPUT</code> (knob and button)—that the sketch declares at load time.</p>
<h2>Open challenges</h2>
<p>Natarajan notes several unsolved problems: NeoPixel hand-soldering is still tedious; the paper faceplate is fragile and hard to repair; and the assembly process overall is not yet streamlined for gifting or small-scale production. Ideas for a version three include LEDs with top-side pads for easier soldering, professional PCB assembly, a clear acrylic protective layer over the paper, and magnetic faceplate attachment.</p>
<p>For now, the installation runs at Recurse Center—a physical manifestation of a mathematical pattern that listens to the room and translates sound into light, open for anyone on the network to reprogram.</p>