It was late spring in 2019 when Rosie and I decided we were going to go to Lady Gaga’s Enigma. She immediately started thinking of ideas for outfits for herself and I. One of them was a sort of cyborg with LEDs and wires and stuff everywhere. She tasked me with making the LED parts. I jumped on the idea of having an actual project with goals!

One of the ideas we had was a kind of light up bra. Naturally, I started buying parts from Adafruit almost immediately.

A picture of electronic parts

The basic idea was to have two larger sets of LEDs for the front and then possibly more LEDs elsewhere if possible. As with most cosplay it had to be battery powered. I also wanted some way of remote controlling it - at a minimum, Rosie wanted different patterns for different songs. Originally, I had planned to use some kind of radio on both ends so I could have more options for controls.

For the RGB LEDs, we wanted to be able to individually control each LED - so naturally the NeoPixel line from Adafruit was the best choice. I really liked the circular strips (inspired by Rezz’ glasses), so I found 3 sizes that fit together.

A picture showing a ring of LEDs lit up in a rainbow

I started with a single ring (since it was the easiest to solder) so I could start writing the microcontroller code.

The smaller two pieces were quite difficult to solder given how small and tightly packed everything is. A third (and fourth) pair of hands are indispensible for this.

A picture of small LED assemblies being soldered

The first set of rings I soldered used some somewhat thicker stranded wire - it was pretty stiff for a cosplay outfit. I had also planned on using some connectors so that the LED pieces could be disconnected from the controller board (and possibly replaced if necessary). These connectors ended up being too big to be comfortably worn all day, so that idea was scrapped (it also only needed to last for less than a day at a time anyway). Luckily, Adafruit has some really nice silicone covered wire. It’s amazingly flexible and comfortable to have against skin for extended periods.

Adafruit sent a small “perma-proto” breadboard along with one of the orders. I used this as the base for the main controller hub. One set of power rails was used to power all the LED modules, powered by a large battery. Stacking headers were used to mount an Adafruit Feather microcontroller.

A picture of the LED rings wired to the microcontroller

Each set of rings is divided in two - the large outer ring and the smaller ring combined with the “dot” in the center. Each piece has its own power wires and signal wire (total of 4 power, 4 ground, and 2 signals). I did separate power wires to spread the load out (I was somewhat worried about the current draw if the LEDs were on 100%). I used separate signal wires (instead of daisy chaining all 3) so that if there was a problem, at least part of the set would continue to work.

Originally, I had planned to use some kind of radio on both ends so I could have more options for controls. As time ran out, I ended up using a simple remote and receiver. The receiver is soldered on to the breadboard and wired to GPIO inputs on the Feather.

One thing I learned along the way is grounding is important! The LEDs are powered off one battery while the microcontroller is powered off another (I thought it would be important to be able to swap the big LED battery without “rebooting” the micro). The only thing connecting them (at first) was the NeoPixel control wire. Since they had independent grounds, the LEDs would “see” the wrong voltage levels on the signal wire and thus would interpret the data incorrectly. Adding a wire to connect the two grounds to each other instantly fixed that problem. Admittedly, it took longer than it should have taken to realize that problem - I have an EE degree I swear!

The code running this thing isn’t terribly interesting, but I’ll post it in the future.

Unfortunately, In early 2020 COVID-19 hit and everything got locked down and cancelled, including our Engima shows. 😭 Since the show was cancelled, work on the project stalled (exacerbated by getting laid off and moving to Colorado). Hopefully, some day Enigma will get rescheduled and I’ll have a deadline to hit again and the project will get finished.