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.

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…