Tuesday, August 26, 2014

Daft Punk Thomas Helmet

Four years ago, the office where I worked had a really big, professional 3D printer (a Fortus 400MC). I was able to print a lot of cool things while I was there, including both Daft Punk helmets (Guy and Thomas). My friend Alex, a true Solidworks guru, took about a month of his spare time to model each helmet flawlessly. We printed Thomas over a few weekends (some of the pieces took 30+ hours to print each). After it was printed, we both got very busy and Thomas started collecting dust on a shelf. These are pictures of the prints a few days after they came out of the machine. These parts are extremely strong and light, as the Fortus printed in polycarbonate material. However, as with all FDM prints, there is a heavy ridged texture on the parts that must be filled, sanded, and polished smooth. Years later, when I realized I would never have more time to work on it, I gave the printed parts to another friend (Shaggy) to finish.

It wasn't until June of 2014 when I was browsing through Sparkfun's New Product Post and I saw some LEDs that caught my eye. Now, I know the WS2811/2812 LEDs have been the craze for the past few years, but I have been out of the loop for a while. For my last LED project (Mau5head 2.0 for Deadmau5) completed in 2012, I designed custom flexible PCB strips that held 5mm SMD LEDs at a 10mm pitch. Each pixel had its own LPD-6803 controller IC, which I had to order custom from China in a QFN-16 package to get it small enough. It was a 6-month long project. Maybe some day I will write up a post about it.

These days, WS2811 LEDs have built-in controllers and apparently come in all shapes and sizes. When I saw the 5mm thru-hole LEDs on Sparkfun, I immediately thought about the Thomas helmet. This was the missing link I needed to make a really awesome display for Thomas. I called Shaggy and told him to get sanding. With the goal of bringing it to DragonCon 2014, we had to hurry.

While the sanding and painting was taking place at my friend's house in Ohio, I started fabricating the parts for the LED matrix. Fortunately I have access to some really awesome tools at my office, including this brand new Epilog Fusion 60 laser cutter. I grabbed some 3/32" PETG sheets (McMaster #85815K34) leftover from the Guy helmet and threw them on the laser. PETG is a great plastic that is easily reshaped with low heat. Alex was thoughtful enough to have designed the LED mount ages ago, so exporting a DXF from Solidworks was easy. Good thing I cut two of each part, since I was a bit rough with one of them and it cracked.

By now, my bag of LEDs had arrived and I could get started soldering. I sent Shaggy the laser cut parts for test fitting and he confirmed they fit well. I also started thinking about the main controller for the LEDs. For past projects, I've created a custom PCB that uses a PIC18F microcontroller to load animations from an SD card. I wrote a custom Windows-based program to convert JPG sequences into the proper format for LPD-6803 LED controller ICs. While that would have worked, I would have to change the code to output the correct data for the new WS2811 LEDs.

Searching for a quicker solution, I came across Paul Stoffregen's OctoWS2811 library. The library is designed to run on PJRC's Teensy 3.1 board, which contains a 32-bit Freescale ARM Cortex M4 processor. Normally getting a completely new microcontroller up and running would be a giant time waster, but the Teensy comes with a bunch of code that makes it essentially Arduino compatible right out of the box. The Teensy packs an amazing amount of power into a board the size of an Arduino Mini -- perfect for the Thomas helmet. OctoWS2811 even includes a VideoDisplay example, which lets you stream movies from your computer over USB to strips of LEDs. This is good, but I don't want to carry around a computer. Apparently neither did Paul, because for Maker Faire 2014 he built a display that instead runs off an SD card. Perfect!

With the PETG laser cut already, I wanted to form it into the proper shape as a template for soldering the LEDs. I hopped into Solidworks and drew up a quick fixture to hold the PETG sheet. The fixture is laser cut out of 6mm black acrylic sheet and then glued together with epoxy. Using a heat gun at a fair distance, I was able to heat the PETG sheet evenly as it was held in its shape by the fixture. When it cooled, it retained that shape.

The plan is to solder each LED to the next, and the pin layout of these LEDs makes that very easy. There are 4 leads on each LED, from left to right: Data In, +5V, Gnd, and Data Out. With this layout, I could bend the two power leads toward the top of the screen, and the data lines out to each side. Each row of LEDs would daisy chain, and no pins would have to cross each other.

To solder each LED, I quickly 3D printed a small fixture with eight 5mm holes in a line. Below you can see the layout of the LEDs as the screen starts coming together. The green and yellow leads were temporary and I was able to run the screen off a solderless breadboard during initial testing.

With all the LEDs installed, I was able to run larger (~18 AWG) wires across the top of the screen like a power bus to each column of LEDs. I used an 8-pin ribbon cable to bring the data line for each row over to the Teensy. Trying to avoid having to design a custom PCB for the project, I chose a Sparkfun MicroSD Shield as my platform to build upon. This board is nice because it only has a Micro-SD socket a large prototyping area, perfect for the Teensy and other components.

In order to choose which animation to load from SD, I knew I wanted to add Wifi capability. The RN-XV WiFly Module is an inexpensive way to add WiFi capability to a project. It is extremely easy to hook up, and it can create an ad-hoc network that a phone can join. Lastly, the LEDs required 5 volts, and experiments showed that the screen was capable of drawing 6 or 7 amps at times. I chose Turnigy 1600mAh 2S Lithium Polymer batteries which are small, lightweight, and can supply more than enough current for the LEDs. With two cells in series, these packs provide a nominal 7.4 volts. This needed to be stepped down to 5V, so I chose a Pololu 9-amp switching regulator. The Teensy can run on 5 volts, but to provide 3.3V to the Wifi module, I had to use an additional 3.3V linear regulator because the Teensy's onboard regulator cannot supply enough current.

After seeing how easy it was to control WS2811 LEDs, I knew I wanted to make the ears light up as well. Alex's original solid model only had one solid part for each ear, not allowing for light to pass through. I revisited Solidworks and split the body into three pieces. A clear acrylic ring would be sandwiched by two printed parts. To save time and avoid needing much finish work, I used our Objet24 3D printer, which provides a much nicer glossy finish than FDM.

After iterating on the acrylic ring a few times, I finally settled on a shape that diffused the light well enough. I beadblasted the edges of the acrylic to help diffuse the light further.

With about a week until DragonCon, I was starting to get nervous about the entire helmet coming together in time. Shaggy was working for countless hours filling, sanding, painting, and polishing the 3D printed plastic parts. When they were ready, I pressured him into shipping them to me as soon as possible for the final assembly. Unfortunately, in the rush, the last clearcoat he had put on the helmet had not fully dried. Combined with some rough handling, when it arrived a few days later, things did not look good.

Fortunately, most of the bondo and primer underneath the paint was still in good condition. I was able to use acetone and a bunch of rags to wipe off the runny paint. After some sanding to touch up a few areas I damaged, it was ready for new primer.

From here it took about 10 more rounds of primer and wet sanding before it was ready for the paint. I really wanted to have the helmet chrome plated, but there just wasn't enough time. I will probably do that after DragonCon.

The clear visor in the pictures above needed to be tinted, so I started experimenting with that while each layer of paint was drying. The last helmet I made, we used automotive spray-tint from Autozone. While this provided a decent finish for the Guy helmet, it was hard to get the right level of transparency for the LEDs on Thomas. The spray always came out splotchy and uneven. Reading a thread on the Replica Prop Forum about tinting visors, I decided to try dying the clear plastic with Rit black fabric dye. Heat was recommended, so I purchased a large metal baking pan from Target and placed it on the stovetop so it would be easy to access.

I quickly realized the stove burners were causing the plastic to cloud up and deform in specific areas. Moving the pan of dye into to the oven solved that problem. Ultimately the dye never worked out. After baking the PETG for hours and hours with 3 packs of dye, it never took on a dark enough color. I was about to go buy a bunch more dye when my friend said "Why don't you use pretinted acrylic?" I initially had dismissed that idea because I figured acrylic would never flex into that shape without cracking. I was wrong about that (sort-of). We had some 1/16" tinted acrylic on our material shelf and a few minutes later I had a visor. The dye was just a colossal waste of time.

Interestingly, after sitting overnight in the helmet, the new acrylic visor had started to show tiny stress cracks all over the entire surface when illuminated by the LEDs. This caused a bunch of reflections that didn't look good at all. I eventually cut another visor and heated it with a heat gun thoroughly before bending it into place. This seems to have helped greatly and the current visor does not have the microscopic cracks.

I decided to paint the helmet with the same paint as my Guy helmet. It doesn't look great, but who's paying attention once the LEDs turn on anyway.

At this point, everything was starting to come together. I installed the LEDs (with a bit of a hassle and redesign on some of the parts) but it was starting to look good. Now I just needed to mount the electronics and tidy things up a bit.

Mounting the electronics turned out pretty easy. Most things are held in place with Velcro or hot glue. I added a power switch, some connectors, and two fans in the front for ventilation. For padding I used some 3/4" adhesive-backed closed-cell foam and built it up in layers until it felt good. It's not pretty, but it does the job. I did not put much time into this because it will likely come out soon when I send the helmet off for plating.

This wraps up the hardware build for the project. I will be adding another segment to this post soon that explains all of the software and firmware for the helmet. In the meantime, check out this video where I explain and demo all of the features.