I have finally gotten the hardware in (mostly) working order for my wacky fiber optic light suit. Let's check out what I've done!
Pretty much as long as I've been playing with electronics I've been working on this wacky Light Suit project to wear out to festivals to light up the night. I've learned so much along the journey. I've made so many Enginursday posts about it that at this point you may be getting sick of the project, but I feel an obligation to keep folks updated all the way through the end.
When I arrived at SparkFun, I was in the second iteration of the project and I needed to fix a few 3D parts. I wore this updated version to a few shows and quickly broke the gesture sensing that I had soldered into my hands. I came back into the office on Monday and bang! The SparkFun Qwiic Flex Glove Controller was born in order to isolate the exceedingly fragile solder points on the Flex Sensor. From here, I decided to scrap the second version as the 1-mm thick fibers I was using were brittle and hard to work with.
In the third version I got a lot closer to the vision in my head. I designed some custom PCBs to mount addressable LEDs to instead of individually PWM-ing each Common-Cathode LED (I still have unplaced anger at whoever let me live so long without knowing about the WS2812). I was also able to use the SparkFun Qwiic Flex Glove Controller that I had designed after the failure of the second iteration. I sourced new fiber to test some neat audio-reactive and gesture-reactive code.
However, I had one major flaw: the LED modules I had were connected via Qwiic cables as I had this strange obsession with making the system solderless for easy repair out in the wild. This worked for a little bit, but some of the cables had a little bit less friction with their receptacles, so exuberant movements would promptly unplug things. Also, the cables would occasionally break from the connector after a lot of movement.
The moral of the story here is that you'll need some pretty sturdy plugs if you want to use them with any sort of wearable. Qwiic cables, while useful and readily available, were not necessarily the right choice for this application. I was also having problems figuring out how to create multiple I2C ports to listen to all of my gesture sensing equipment. However, I solved most of these issues in the fourth iteration of the suit.
To control the whole operation I made a custom board with an ESP32-WROOM. I started my design from SparkFun's ESP32 Thing Plus design. From here it was a matter of changing a few things to suit the board to my purposes. I substituted the CP2102 Serial Converter for a CH340G, as it's easier to hand place/rework. I also added breakouts for I2C and LED data lines in each corner of the board to control each limb of the suit. I tossed on a MEMS microphone for audio reaction. I also gave it two 18650 batteries in series and a 5V 3A LDO to give me voltage for my LEDs. I admit that this could've been done far better (at full charge, the LDO has to drop 3.4 volts, gross) but give me a break, I've got a strip of these LDOs and they're not gonna place themselves in designs.
In the future, my plan is to put the batteries in parallel with some sort of charger IC that I haven't had the time to source, as well as the beefiest Boost regulator I can find. Anyway, there's always room for improvement, but check out the board below.
This guy then sits in a small 3D-printed box that sits right where a belt buckle would go, I send my belt through part of the box to anchor it to my body.
Now that we have control figured out, we'll have to get some LEDs mated up to fiber optic. For this, we'll use an itty bitty custom PCB with two APA102 LEDs on each side.
This fits in between two identical 3D-printed parts, which align the PCB and LEDs with four strands of 5mm diameter fiber optic. Screwing these together clamps down on PCB, fiber and control/power lines all at once for a secure fit.
This 3D part is then sewn onto some custom adjustable armbands (shout out to Mom for letting me use her sewing machine). We cut up a ton of fiber optic to the proper lengths and connected it all up.
I go through a detailed analysis of my gesture controls in this blog post about using multiple I2C ports on ESP32. However, I basically have two of the SparkFun Qwiic Flex Glove Controller sewn onto each hand. In each foot I have a custom board, based on the same ADS1015 Analog->I2C conversion chip as the gloves, that senses how my weight is balanced on each foot. I have two I2C buses broken out from my ESP32, one for the hand controls and another for the legs. As I was monkeying around last night, I realized that I'd bent a few of the sensors in travel (the demo always works, right?) and they don't really sense so well anymore. Due to this, all I really got to look good for video was the audio buffer portion. Check it out below and stay tuned for a final code update.