Made it! With just minutes to spare. Had to make some compromises (e.g. no EL wire), but the wings are done, they move, and have been delivered to Erin now for Halloween events. The different pieces of the costume look amazing together!
Previously, I had wings, a backpack with mounting points ready for the wings, a random assortment of RC hobby servos, two days to finish and only a vague idea how to get there. Erin, meanwhile, was wrapping up the helmet, adding NeoPixel lighting, a paint job and some nifty lighted control buttons.
I did not want to attach wings directly to the servos. No factual technical reason for this, it just intuitively felt wrong hanging that much weight directly off the servo axle. Separating them meant that the servos could sit flat against the back plate and wouldn’t have to stick out. The linkage between servo and wing might break under high stress…but, as with RC cars and planes, sometimes you want that to fail instead of damaging the servo or the model. Linkages can be replaced, everything else is a lot harder.
To that end, I hastily designed some servo mounts in Autodesk 123D, printed them at 100% infill and used a tap wrench to cut #4-40 threads:
I was uneasy about using a 3D-printed part as a fastener like this (normally would want the screws joining with nuts), and especially as the bore is parallel to the printed layers (the weakest direction), but it seems to be doing okay so far. The load is spread across four screws which probably helps. (One can get nice metal servo mounts, but there was no time for shopping, it was improvise or fail.)
Find myself cutting more threads lately. I’m treating myself to a really nice tap wrench after this. No more Harbor Freight junk.
The servo mounts then screw into the back plate with #6 screws (there was room for matching nuts on these):
The Velcro® access flaps worked perfectly for this. Could access the screws, then the screw heads were covered with the backpack padding, no pokey bits.
For the lower, smaller wings, I’d initially used some smaller metal gear servos, but this presented a problem. The servo horns (the plastic arms to which things are attached) were too thin for the push rods, and too short for sufficient ‘throw.’
Printed up two more full-size servo mounts. I moved the ‘regular’ servos from the upper pair of wings to the lower pair, and then installed beefy metal gear servos for the larger wings.
Seems kinda overkill with a separate servo for each wing, but in the future I’d like to have some movements that aren’t symmetrical…each wing would need to be independent anyway. Initially though, they’ll all move together.
DRAMATIC PAUSE FOR SERIOUSNESS.
This next bit is potentially a bit dangerous, and one should really understand all the issues before attempting something like this.
All the LiPoly batteries in the Adafruit shop are either single-cell or balanced multi-cell 3.7V units with a protection circuit built-in. This is on purpose. The protection circuit cuts power in case of a short circuit, excessive current, discharge or over-charging. These are important features for wearable projects.
The lithium-polymer batteries used in RC cars and helicopters have no such protection. They’re designed for racing…no extra weight, 100% of the power going to the model. They’re also usually not strapped directly to peoples’ bodies. With no protection circuit, these batteries can be a huge safety risk…in fact, they’re usually charged inside special fireproof bags!
Erin already had a big 3-cell (11.1V) LiPoly pack for her LED mermaid tail and wanted to re-use that, because big batteries are expensive. But also, Erin understands the risk. She works professionally as a fire performer, and always has spotters and helpers who know what to watch for and what to do when there’s trouble.
For most folks, a single-cell battery with protection circuit, along with a boost converter (such as one of the PowerBoosts in the shop) would be a much better choice. For the sake of a complete explanation, here’s what we’re doing, but don’t try this at home:
Notice the fuse, first thing off the battery. That’s the extent of our “protection circuit” — it’ll cut power if there’s a major short circuit, but not much else. Always have a fuse.
5V and 6V are provided by two separate UBECs from the 3-cell battery. Could have done everything at 5V but servos are a bit stronger and faster with that extra 20%. Could have gotten 5V using a low-dropout regulator off the 6V supply, but I didn’t have this on hand and there was no time for shopping…but I did have lots of UBECs so that’s what I used for now. There wasn’t time to add EL wire, but that’ll come later, using a 12V inverter directly off the 3-cell voltage (the inverters usually work over a range of voltages, e.g. 9 to 14 V, so this is acceptable).
The “smarts” are a Teensy 2.0 microcontroller and an RF clicky-button receiver:
I chose the Teensy 2.0 because it’s small, has USB serial support (necessary for a later calibration step) and works at 5V. Also, I have a ton of them.
To mount the flat circuit board on the not-flat back plate, I quickly modeled and printed a platform for it and held things on with a combination of hot glue and double-stick foam tape (major shame, but I was out of time) (also, I ran out of silver filament mid-print, hence the color change):
Yuck, but it was down to the wire. As I wrapped this up, I had a major benefit of hindsight moment: this platform, the wing mounts…any time I had to mount a flat thing to a non-flat thing…I did this all wrong and missed an opportunity to “work smarter.”
For the helmet, we made a 3D scan of Erin’s head for size reference. I should have done this with the curved back plate too, then worked out my servo planes and everything in software and simply printed optimal “wedges” instead of the weird collimator screw arrangements. Oh well, too late now, it’s done, but I do have another tool now for whatever next project comes along.
3D printing really is the hero of this project. It may be tagged “#ElectronicHalloween” but “#3DprintedHalloween” might be more accurate.
All wired up:
The visible wiring is kind of ugly, but does have a certain Doc Brown DeLorean charm to it. Erin and I had discussed early on that we were okay with the design looking a bit prototype-y, as the Wasp outfit seen at the end of Ant-Man wasn’t even complete.
Wings were installed on their axles (1/4″ bolts, actually) and held on with nylon locking nuts, with these little 3D-printed caps so they wouldn’t look quite so hardware-store-y:
Because there’s a lot of mechanical chaos in the system (servos at slightly different angles and positions, hand-bend pushrods, etc.), each wing would require slightly a slightly different range of motion from its corresponding servo. That’s what the trim pot on the driver circuit is for…calibration. I’d turn the pot to move the wings to different angles, and would note for each one what the corresponding “top” and “bottom” values are, then interpolate between those positions. So the wings appear to move the same, but really all have different numbers.
Right now they just open and close. We’d like to have some other movements…a slow flap, and perhaps adding sensors so they can change position in response to body motion…but for now, this is what it is.
Cubic interpolation (ease in/out) is applied between positions…it’s not just a straight line at constant speed. This avoids a hard “jerk” on the servos, and looks more interesting. Tried different timings…the above video shows a 4-second opening, later tuned this down to 2.5 seconds (any faster I felt was too much stress on the linkages).
Here’s another hugely important thing with servos and wearable projects: when the sketch starts, the servos are not yet “attached” in code (no PWM signal is sent). The wings should be in a specific parked position (moved manually, if necessary) before pressing a button on the remote to make them go live. This is because servos have no smarts of their own…when given a position, they will move there as fast as they physically can, fingers or hair be damned…and the microcontroller has no idea of the servos’ positions at startup either (unless it’s a special feedback servo with an extra analog output, but that’s not what was used here). There’s a corresponding “park” button to put the wings back in this position before powering off. If not for this, the wings would move very violently on startup and potentially injure someone and/or break the servo linkages.
Here’s a closer view of the servos & linkages, with the wings now at a 2.5-second opening, 2-second closing:
The wings are now in Erin’s hands (or more accurately, on her back) doing Halloween-y things, so additional photos and videos will have to wait.
In the meantime, I’ll be cleaning the garage…