(the exciting conclusion of this series)
>>>>> Here's where you volunteer.
Note: If you're short on time, just flip through the pictures and read the captions. Maybe also look at the "What went wrong" sections.
Why a projector?
On Batkid's big day, every danger he faces, we face together. That's the deal. We're both stronger that way.
So when the Chief of Police calls (yep, the real one; thanks Greg!), he wants to talk to both of us, face to face. If I pull out a smartphone to answer it, that's when I stop being a superhero and become just a grownup on a phone. A tablet would be slightly better, but won't survive five minutes stashed in my... um, where exactly?
Right. No off-the-shelf tech. We need to build something cool. Miles deserves that for sure.
Batman's tech is always...
...armored so it can survive adventures
...and then used in ridiculously impractical ways
Sounds about right to me. Let's get started.
Step 1: Proof of Concept
- Make a wearable projection system which can run all day on batteries, but is bright enough to see in daylight.
Pico-projectors are awesome. A few years ago, the brunette and I did a Rhinestone Cowboys & Aliens Halloween costume, with a working arm-gun. (Halloween parties tend to be dark, so a tiny projector is bright enough to look great.) It was great fun, and it's been sitting in a display cabinet in the lab since then.
That projector was only 7 lumens, which is not really enough for this project. Luckily, I had recently acquired TI's new top-of-the-line model (see the next step for details).
...so the first thing I did was to stuff the projector into a mobile-phone exercise case, strap it to my arm, and go to the locations we were planning to use.
What went wrong
- At the "damsel rescue" intersection, I had planned to project the Chief's call for help onto a shiny gold shop door (the one in the photo). On the actual day, there were hundreds of people between us and the door. Luckily there was a silver car parked right there, so we watched the Chief's message on the car.
Step 2: The Projector Core: TI DLP
For this project, I used the LightCrafter Development Kit. It actually contains an on-board computer with everything from a micro-SD slot to a camera input. (These projectors can do amazing things for machine vision... imagine projecting an active grid onto the surface you're looking at.)
Smooth and easy
Even better, TI has an E2E Forum (that's "engineer to engineer"), and they take it seriously. Before this project had started, some of my older units malfunctioned. I posted to this forum, and very quickly got a response directly from TI. One thing led to another, and pretty soon I had a replacement, some new friends, and a chance to try out their brand new kit (the one used in this project). Thanks guys! I owe you.
- During our battle with the Penguin, I smashed the entire unit on the concrete hard enough to leave pieces of the case everywhere. Once I got back in the Batmobile, I used Velcro to strap the bare projector unit onto my arm. In the pictures from City Hall, if you look closely, you'll see the bare DLP on my arm. Funny thing: it still worked. That's because the TI folks are great at what they do.
Step 3: The Computer: Gumstix
What's a Gumstix?
The Gumstix itself is so small there's nowhere to put I/O ports, so I attached it to a Summit board, also from Gumstix. It just clicks into place, and it's the smallest board they make which has all the ports I need (USB, HDMI, power, audio). Really, the design of this thing is quite clever.
Some of their machines have on-board WiFi, but I just plugged a USB hub into this one, and used a USB WiFi adapter to get it onto the web.
- Availability: I had used this processor before on a Halloween costume, so I had one already.
- Circuit work: I had already soldered two push-buttons to the board.
- Audio: Remember, we need to play sound. This has a standard audio jack.
- Simplicity: It just looks good. I could actually have used a hidden phone to serve the video, but I didn't want to have to fuss with the device when there's crime to fight. The Gumstix is easy to set up and use.
The program just needed to play videos in response to button pushes, so it could be done any number of ways. I chose C++ as personal preference. I've attached the source code to this step, so you can read it, or use it.
- Three days before the eventI destroyed my only Gumstix. I messed up. Linux experts can begin laughing at me in 3.. 2.. 1.. my actual error was forgetting a "&" in my init.d startup script (which launches my program at machine startup). Without the "&", my program starts, and the rest of the system waits for it. My program wasn't set to quit, ever, and it wasn't finished.
Impossible: Three days? No way. It's the Kobayashi-maru of Batman events. There's no solution. There won't be a projector. Miles will still have a great day, and I'll just know for the rest of my life that I could have done better. Just in case, I ordered another Gumstix, and sent email saying "Please please ship this today. We're doing this Make-A-Wish project..."
Miracle: One hour later, thanks to a lovely woman (Susan) who saw my email, I got a phone call by Gordon, the CEO of Gumstix. He has a replacement Gumstix setup hand-carried to me the next day. Thank you Commissioner Gordon, and Susan. Thank. You.
...also, I added a "panic exit" button press to my code immediately, so this never happens again.
- Everything else was minor. For example...
- ...it turns out that if your program launches via init.d, then you can't call mplayer (the video player) because the window system wasn't set up when you launched. I switched mplayer to direct-screen-write mode ising the "-vo fbdev" argument. Not ideal (that's why the logo is still visible behind him), but it got the job done.
- ...the "display" command (to show the bat logo) wasn't working, so I just set my desktop to be the bat logo. That way it's there before the videos play.
- ...the Gumstix came loose from the Summit board when I did a flip on the trampoline. This was also my fault, as I hadn't used the handy plastic fasteners which come with the board. Snap them in place, all good.
Step 4: Power System: Utility Belt!
We just need 6 volts (for the TI DLP and also the Gumstix). Four D batteries should give more than enough juice, and I can keep extra batteries in the car, just in case.
Smartest decision ever
- First, I bought a $12 Batman costume belt. Actually, I bought two of them so I'd have extra pieces.
- Then I bought a pair of dual D battery holders and some USB extension cables at Radio Shack.
- Then I went to Cliff's and bought some gold paint and a lot of black Velcro.
What went wrong
- The whole system ran perfectly ...for about 45 seconds, and then it froze. It turns out that the D batteries don't provide enough constant current to run both the projector and the Gumstix.
Solution: I split the power circuit onto two separate USB cords, and plugged the Gumstix into a small USB phone-charger battery, tucked discreetly into my gauntlet. With separate power, everything ran with no trouble.
Step 5: Sound System
Radio Shack had the perfect thing: rechargeable expanding speakers. I couldn't have come up with a better fit.
- They're self-powered (no more load on the bat-belt)
- You can pop the top off with a screwdriver, exposing that cool-looking shiny blue disc.
- Integrated power switch and volume control.
What went wrong
- Just before lunch on Batkid's big day, the projector came on by accident. The chief's voice came booming out of my arm, and I quickly shut it off. Miles grabbed me and said "That was the Chief! What did he say?!" I gave him a pensive look (not easy through the mask) and told the truth. "Something about the Penguin, I think. What could that mean?" Whew.
Step 6: Designing the Case
Sneaky shortcut #1: Given the thermal issues involved in running a projector, I decided to leave the sides of the case open (really hoping it wouldn't rain). Here's what I did...
- Place all the parts together and fuss with them until the whole thing was reasonably compact.
- Measure the locations of the screw-holes on each board.
- Build outlines of each component in Illustrator, in a layer called "components".
- Trace a cool-looking outline around them, in a separate layer called "shell".
- Duplicate all of the screw holes from "components" into "shell".
- Add a bunch of extra screw holes, anywhere the components aren't in the way.
- Add a bunch of Velcro-strap slits in the lower shell.
- Add a bunch of hexagonal holes in the upper shell.
With the case cut and ready, it's time to put it all together!
What went wrong:
- The holes I cut in the top shell made it way too fragile. For the final shell, I removed many of them, and made others much smaller.
- Stacking the DLP and the Gumstix seemed like a neat idea, but it turned out to be much simpler to separate them. I didn't figure this out until the device failed two nights before the event.
Step 7: Test It All Together
What went wrong:
- This step actually went more smoothly than I expected.
Step 8: Final Assembly!
I used a thin black acrylic as the material. I also placed some window-tinting film on top of the electronics, just for a little extra protection and spiffification.
One unusual step: For laser cutting, it's very important to focus the beam, for a nice sharp cut. In order to make the bat logo spiffy and deep, I actually de-focused the laser by more than an inch, and left it in high-power mode. This made a nice wide outline, cut deeply but not all the way through.
What went wrong
- Acrylic is handy and easy to laser-cut, but breaks easily. In the picture, you can see that I've cut three copies. That's because I've broken two of them. The damsel/muse has recommended rebuilding this part from anodized aluminum, and she's right. It'll take longer (and different tools), but will make it last forever.
Step 9: All Systems Go!
The video messages were expertly recorded by John Crane and his crew.
Here's a clip of it in action
...and here's a the final result again, via CNN:
- Miles and his family, who wished for something amazing
- SF Police Chief Greg Suhr whose enthusiasm and authenticity made the day come alive
- Gordon Kruberg and Susan Lehman from Gumstix, for rescuing the project from certain doom
- Beth Stafford and Pascal Nelson from TI, for providing brilliant cutting-edge technology and support
- Patricia, Teresa, Jen, Lynne, John, Mike, Philip, and the rest of the Make-A-Wish Batkid team, for making it all happen
- Kristen, Christopher, Jersey, and the rest of the SF Opera staff, for making our outfits great
- Jennings, Xiaohong, Barry, Chris, and the acrobats at Circus Center, who gave Miles some real superhero training
- The entire city of crazy awesome fun people, known as San Francisco, who took time out of their schedules to make Miles' dream real
- ...and most of all, my muse, for her inspiration and great shop tools.