Meet my familiar, Archimedes! He’s a robotic owl who sits on my shoulder and detects the emotions of people around me. Then he gives feedback via colored lights and little beep-boops. He can move and look around, too — thanks to a pan/tilt servo gimbal with an Arduino controlling the motors.
The first part of the build is assembling the Google AIY Vision kit. This “DIY AI” introductory kit forms Archimedes’ brain and sensory system: a Raspberry Pi Zero W with “bonnet” add-on, camera, piezo speaker, and multicolor light-up button. Its fold-together cardboard enclosure is really fun to assemble.
Just follow Google’s official instructions to put the kit together, and test the setup to make sure it works. You should be able to run the default Joy Detector demo without any extra coding, but of course, you can tweak it if you want — it’s written in Python. The Joy Detector uses machine learning to detect if a person is smiling (the button turns yellow) or frowning (the button turns blue). For really big expressions, the buzzer will sound too. If the camera sees more than one face, it adds up their joy scores.
TIP: Make sure you install the plastic standoffs to protect the Pi and bonnet from mechanical stress. Mine broke when I took the kit apart later, so maybe get extra standoffs.
Two servomotors allow Archimedes to tilt his body up and down and rotate his head side to side. I started with a pan/tilt mechanism from HackerBoxes’ “Vision Quest” kit but you can use any pan/tilt gimbal setup; there are 3D-printed parts available on Thingiverse, if you already have a couple of servos lying around. Make sure the “tilt” part is on the bottom and the “pan” on top — since owls don’t usually pivot on their legs.
Do a quick calibration on your servos and check their tolerances. What’s the furthest they can go in either direction? (If they start humming or buzzing, they’re pushed too far.) Edit the Arduino sketch to match that; you can download the code. Right now the Arduino just moves the servos randomly so Archimedes can look around for faces. But you can modify the code for different behavior or, even better, figure out how to make the Raspberry Pi do it!
I do recommend servos with metal gears; they’re a bit heavy, but they can definitely handle controlling a robot like this. If you’re using 3D-printed mounts instead of metal mounts, you might be able to get away with plastic-gear servos. Plus, the whole robot would be a bit lighter, which might be nice.
The two servos are connected to the Arduino.
Take the time to solder everything together, and once everything’s working, you can cover it in hot glue to insulate and stabilize the connections.
I used a small protoboard from another project to make the branching connections, to ensure that nothing would short out.
I used Onshape, a browser-based CAD modeling tool, to design Archimedes’ 3D-printed body parts. He comes in five pieces: the head, top hat, left and right wings, and front feather accent.
The STL files are available from my write-up on Hackster. You can also use a service like 3D Hubs or Shapeways if you don’t have your own 3D printer.
Want to mod the design? Please do! The main considerations are:
- The “brain” electronics must fit inside the head (the cables are long, but not long enough to reach down below the servo gimbal).
- Make sure you can easily accommodate the piezo buzzer and camera modules — especially the camera. If you resize the models, they’ll need some extra tweaking.
My owl head came out a bit funny when I printed it, because the beak wasn’t well supported.
So I used an old CD to give him a shiny cybernetic beak. It looks great! To do this, put the CD in a bowl and cover it in boiling water. Let it sit for 5 minutes, and you’ll notice that it has delaminated a bit – the two layers have started to split apart, with the shiny memory foil on one side. Split it the rest of the way and you can cut it apart with scissors to form your preferred beak shape; I did it in two symmetrical pieces.
Then hot-glue it to his face. Put the bare plastic side facing out. This is surprisingly durable, but keep the CD on hand for repairs.
Once you’re ready to put the whole robot together, grab your 3D-printed head and top hat. Install the button in the top hat, threading the cables down through the hole, and seal it in place with hot glue. Then, glue the hat to the top of the head.
The camera looks out through one eye, and the piezo buzzer through the other; I’ve hot-glued them in place such that the glue is hidden. They’re quite sturdily attached (I tend to get enthusiastic about the glue). The status LED just kind of dangles down; I think it looks kind of cool that way, and it hasn’t caught on anything yet, but you might want to secure yours in place.
Grab your armature wire — this is a sturdy wire, typically used for supporting sculptures, which can be found at art stores. Find a good spot on the top servo mount to attach a couple of loops of it, which will support the head. Once you’ve done that, slide heat-shrink over the wire so it doesn’t short out the electronics.
Next, if your servo mounts are made of metal, put some electrical tape on top to insulate them from the Pi. Then put a piece of double-sided foam tape on top, and put the Pi on top of that. This will hold it in place pretty sturdily. Place the head over the top of the electronics.
Now, use two pieces of armature wire to attach the wings. Loop one end through a hole in your bottom servo mount, thread the wing onto it, and then loop the wire back through another hole in the servo mount.
The wire thickness should be compatible with the wing loops, and they should be pretty sturdy; just don’t apply too much torque, and they should work fine for months to come. Turn the robot’s head to make sure it doesn’t crash into the wings, causing damage and unhappy servos. Check the extremes in your Arduino sketch, too.
Now for the final 3D-printed piece: Attach the feather puff loosely to the front of the bottom servo. I used a loop of thin wire, fashioned into a bow tie.
You might want to secure the head to its wire loops, since it can flop around … but that also makes it harder to show off the brain to curious friends.
Finally, it’s time to rig your robot for wearability!
Take a piece of armature wire about 6 feet long (or a bit more). Wrap one end around and through the base of the servo mount, so that it supports the servo stably. In the future, I plan to model a custom 3D-printable shoulder mount, because the wire can get loose and wiggle around, but it’ll do for now, and a robot with lighter servos/supports might have better luck.
Double up the remainder of your armature wire. This is where the bike inner tube comes in: Cut off the part with the valve, and you’ll have a long, hollow tube. (A little powder might come out.)
Create a loop to go around your arm at the shoulder and secure it to the bottom servo mount. Then, thread your doubled wire through the tube. It shouldn’t go all the way through. Split the top end of the inner tube and tie it to the base of your robot.
Now crisscross the tube across your chest to create a harness.
I used a soft bandana to wrap the shoulder loop and servo mount, which cushions them and makes the harness much more comfortable. I also knotted it around the Arduino and its cable, to support it against strain — I plan to add a 3D-printed enclosure as well, but it will still hang down the back inside the scarf knot.
OWL SYSTEMS GO
Your robot is ready to wear. Place it on your shoulder, with the loop around your arm, then wrap the wire and tube around your torso so it’s sturdily supported. Keep wrapping and tuck or tie the end of the rubber so that it doesn’t get tangled with your wires. Have fun!
[photos: Alex Glow, Lady Red Beacham]