Step 1: A recap of past construction

This is mostly a recap of the results of my previous effort that ran CircuitPython.

The hardware was fine but once I moved from a 60 LED strip to a 144 LED strip, the M4 didn’t have enough memory to hold bitmaps in RAM anymore if I was using CircuitPython. So, after I’d carefully migrated the CircuitPython codebase to a Teensy 4.1, I decided it was time to turn my M4 into an Arduino board.

The board

Here’s what the circuit board looks like. The screw terminals on the bottom are for the strip’s power, which it turns out I don’t really need because a single USB brick is just fine for 144 LEDs at the brightness level I run at, so I’ve got a crude jumper. To the right is the LED strip connector. I added an electrolytic capacitor to smooth any voltage jumps and it’s got a OLED Feather and a M4 Feather on the board.


I probably want to add a big fat button to this design so it’s easier to trigger it in the dark.

The staff

I made the handles with some low-temperature thermoplastic and a aluminium extrusion.

The whole appeal to the thermoplastics is that it’s kind of like a clay-sculpting experience and I’ve already got a heat-gun. And if you smoosh it up against the strip while the plastic is still hot, it’ll just stick like glue. I made the first strip with a single handle at the top that wraps around the back and that worked really well most of the time, but I realized that it really helps to add a second handle at around the mid-point, so my current staff has both, so here’s what my staff looks like:


I started out with some random JST-SM connectors I picked up off of Amazon but they were too flimsy and so I’ve been using the JST-SM pigtails that SparkFun sells because they are thicker gauge wire.

I use electronics grade silicone to glue the wires down and then wrap it in heat-sink.


The firmware

My starting point was the firmware I’d already written for my gen3basic lightpainter board.

I’d initially tried to port it to the M0 Feather Express… but it turns out that FastLED doesn’t have a proper setup for that and I realized I’d probably need an M4 Feather anyway so once I had my Teensy board all tested, I just started using the M4.

One of the nice things about the Arduino framework is that I didn’t need to change anything, as long as the library support is there. I went from an 8 bit AVR to a 32 bit ARM processor and because it was between two boards supported by FastLED, nothing needed to change.

From there, I decided that the easiest way to get images that I’d been using in CircuitPython onto the board was just to convert them to a C++ header file for the time being. Google led me to img2c which I ported to Python 3 and tweaked a bit to get the results I’d wanted.

I did a rough pass of refactoring to make it work more like the CircuitPython version in a few ways, but I probably need to do some deeper refactoring. It doesn’t use the OLED nor does it offload files on the flash drive.

The chassis.


I whipped up a quick design in OpenSCAD using NopSCADLib and BOSL2 and then I printed it on my printer with clear PETG. It took a few tries to get everything right, but I ended up with a usable print:


The results

I spent a few hours in the studio two weeks ago with some lovely circus performers for a photoshoot and they all love my lightpaintings. I’d been rushing to get it operational so I didn’t need to have a 60 LED strip around anymore so that it would be easier to keep spares around.

Here’s Cola Claret:

Cola lightpainting

I like how now I don’t need to have any 60 LED strips. I just have two staves with 144 LED strips in them, plus a spare 144 LED strips in case one of them breaks.