So, New Orleans has this crazy vibe during Carnival season. On a scale between “a literal city” and “Burning Man”, it ranks somewhere around “the square root of WTF”, with parades running first on weekends, then increasing to every day as Mardi Gras approaches. So naturally, I figured the best way to experience this would be to dive right in. When I heard that the Kaiju Flambeaux Corps was looking for people to march in radio-synchronised LED suits, I jumped at the chance.
A good portion of any lit costume like this is finding a garment to use. Our parameters were something relatively-translucent and white. I found a dinner jacket on Amazon, then ordered it from the manufacturer’s website for about $10 less.
While waiting for it to arrive, I made myself familiar with the controllers which were already chosen — the Anarduino MiniWireless-W-915.
A side-note here: When naming your product or company, try an Internet search for that name first. If there are any “autocorrect” suggestions (where the search engine assumes you’re searching for something that already exists with a similar name), or if you’ve inadvertently chosen a name beginning with “a”, “an”, or “the” followed by an existing word, know that choosing that name will hinder your customers’ ability to find information on your product.
Naming choices aside, there was little documentation for this board, which made the initial research on the matter slow. There are precious few pieces of example code on the website, none of which used the “preferred” RadioHead library. It is not a controller I’d recommend for anyone without experience using the piggybacked HopeRF radio board (there are alternatives with better documentation).
After much reading on RadioHead and RF in general, I got it up and running. While RH provides a _very_ simple abstraction to use the radio in packet mode, it uses quite a lot of memory (over half a kilobyte — a quarter of the memory on an ATmega328p), so straight off the bat I knew I was in for a memory-optimisingly good time. The tradeoff seemed worth it for the simplicity of the interface, however.
As I understand it, radio transmissions work a lot like speech, in that the louder and slower you speak, the more clearly you can be heard. Keeping in line with such, I kept transmission power at maximum, and chose a FSK modem preset with a bitrate of 19.2kbps and a frequency deviation of 38.4KHz, corresponding to a modulation index of 2. The minimum-speed presets didn’t work for whatever reason, but once I had two units without antennae talking across my desk at a reasonably-low speed, I figured I’d pick my battles and focus on getting everything else working.
When I looked into antenna types, I had no idea how deep such a rabbit-hole could go. Instead of summarising, I’ll just say that there are numerous, incredibly specific reasons that each antenna looks the way it does. For simple projects like this, an ungrounded quarter-wave monopole antenna is sufficient. While that might sound complicated, it’s actually just a piece of wire. At the frequency we’re using (915MHz), a quarter-wavelength is roughly 78mm. I still have no idea what type of wire makes the ideal monopole (stranded / solid, thick / thin, etc), but the one I made from 24AWG stranded wire seems to work just fine. I cut it a little longer, stripped one end, then cut the wire at 78mm from the beginning of the insulation. This (hopefully) created a piece of wire with a resonant frequency which is the fourth harmonic of the centre frequency of the FM carrier wave.
As I said, numerous, incredibly specific reasons.
Handily, RadioHead gives the user the ability to seamlessly switch between transmit mode and receive mode. This means that the radios can sit in RX mode normally, until a momentary switch is pressed which triggers a local pattern change and calls
radio.send() with a message to change to the new pattern (transparently switching to TX mode). On the next program loop, the call to
radio.available() switches the radio back into RX mode. While this transition does take time, in this case it happens fast enough to be imperceptible.
The LEDs are mounted by way of metal grommets punched through some duck canvas (coarse, cheap, and relatively stiff). This was then slid in-between the lining and outer fabric, and positioned using safety pins. Some of the krewe members used fabric glue for the final attachment, but I saw that this left the fabric stiff and discoloured. Besides, one of my design goals was easy maintenance, so I decided to take the time to hand-stitch them in. I also added connectors between the LED strings in the back, sleeve and breast sections so that they could be removed.
The wiring is kept between the lining and the outer fabric. The reason for this is twofold: firstly for comfort, and secondly so that it doesn’t snag on the wearer. I’ll actually be wearing a small backpack underneath the jacket, which will hold the battery, regulator, and hydration pack (because we’ll be marching 6km), so the fewer potential snags, the better. There are a number of holes still in the lining, all toward the front of the jacket except for one down the centre of the back, to reduce the likelihood of accidentally putting my arms in between the lining instead of into the sleeve-holes.
The remainder of the electronics, which I have nicknamed “the spine”, connects to the two (left and right) LED circuits and the battery (these Li-pos are coming in pretty darn handy). For the trigger I bought myself a tin which fit snugly in my hand. For some reason it was full of mints, which I emptied into a baggy for later. One momentary switch later and I had a hand trigger. I could have spent money on another project box, but that would have cost at least as much, and I wouldn’t have gotten free mints!
For power regulation, I used the same SBEC I used for the denim LED jacket (which is ever-more-permanently decommissioned as I use its parts for other projects, despite my original intentions). The LED strings we used for this project are labelled as “12V”, but as with any RGB with a single LED per pixel, these internally run from 5V. Testing the dropout on the built-in regulators was easy enough using a variable voltage source; turns out the LEDs don’t drop in brightness below 5.5V. Luckily for me, this BEC has a jumper to select 6V output instead of 5V.
The final cut
So what was the result of all this? Here’s my jacket in testing:
And here it is, along with the 8 other members of Kaiju Flambeaux Corps marching in the Intergalactic Krewe of Chewbacchus 2015:
The radios worked brilliantly — at one point, two of us ducked a block away to a friend’s house to pee (the parade route was over 6km long), and watching the flambeaux and other suits in the distance on our way back, tested the range of the transmitter. Surprisingly, we had over 100m of effective range with this combination of radio configuration and antenna. Needless to say, I was impressed.
My battery lasted well through the night. I charged it to full the next day, putting in 1326mAh. As it is a 6S Li-polymer (22.2V nominal), this means 29.44Wh was used. The suit was run for 4.75 hours, meaning its average power usage, including conversion losses, was around 6.2 Watts.
Apart from some minor discomfort due to the LED wiring (running around the side of the shoulder instead of over the top), this project was all-in-all a huge success. I got to make something fun with some cool people, and will more than likely roll with them again in the future.