Bottleship

So far, a concept for an overcomplicated moodlight that's putting a few hundred tiny LEDs in a bottle as a stack of transparent flexible PCBs. It might all go horribly wrong.

A ray-traced preview of an open clear glass bottle lying on its side on a table. The body of the bottle is filled with a stack of twelve transparent boards each filled with a spiral pattern of warm-white small LED lights all facing towards the viewer. Connectors are visible below the bottle, as in the preview they are not correctly bent to fit to the base board. Likewise, the base board is floating below the neck of the bottle, and is a long and thin PCB that has components on the end facing the opening, including a processor, memory, and pin header connections for data and power.
An early Blender rendering of what it might look like.

Prototypes

Progress

2026, March

Decided to start by making the matrix prototype boards on FR4 using the CH32V003 processor as a matrix controller. I'm making prototypes with 61 and 91 LEDs that I imagine could be easily paired with a cheap and cheerful ESP32 board to make cute little badges, home-assistant driven mood lights, or displays. Keeping them cheap (and somewhat realistic for assembly into a larger thing) by only including the minimal components, and expecting an external board to provide power and program more complicated patterns using the I2C bus.

2026, January

It took a few weeks but I eventually got the 90-LED charlieplexed matrix on the test board to run at reasonable speed on the Ch32V003 including PWM using DMA transfers to toggle the pins set to Open Drain output mode (toggling between "off" and "high impedance" state). Thanks to tomn for the hint or I would still be trying to toggle both the pin modes and output levels to achieve the same thing!

2025, December

I made a "big-bad-bottleship-test-board", spending about £60 to get it assembled by JLCPCB, partially to learn the process of getting a PCB ready for assembly. The board has several microcontrollers, LED drivers, an accelerometer, and two styles of matrix arrangement. The process was significantly simplified by using KiKit to predictably produce the gerbers, bill of materials, and position files (as well as correcting some chip orientations where KiCad footprints differed from JLC's).

Out of the microcontrollers, the CH32V003 was the easiest to get started with, thanks to cnlohr's excellent ch32fun project.

2025, November

Playing around in KiCAD and Blender to produce some pretty renders of flexible PCBs with dense LED matrics being aligned perfectly. I used the IPC API to generate small python scripts to automatically place footprints and some tracks that were procedurally generated. Got a bit side-tracked with attempting to programmatically optimise the LED placement to reduce the number of track cross-overs. However, I also realised that most likely there won't be enough space to pack them as tightly as I'd like, the LED's would probably pop off the matrix flex PCBs when attempting to insert them (or the bottle opening would need to be sufficiently large to allow a bigger bend radius), and it's a lot of LEDs that may need more than a small battery for power.

2025, October

First sketches, some 3D prints, some cost calculations, and bought a few small bottles.

For a first attempt I thought of using an established I2C controlled LED driver like the IS31FL3731, because it can control two charlieplex matrices of 72 LEDs each, and has 2 configurable address bits, so one I2C bus can control 8 matrices. Each matrix uses 9 pins and could use zero-insertion-force connectors and gold fingers to connect a base board containing parts other than the LEDs.

I also considered a complicated arrangement where panels could be inserted into the bottle and then rotated and snapped onto a base board and the whole thing spun around to make a persistence-of-vision display…