“Dad, can you make me a robot?”
On October 1, 2021, my 6-year-old son came to me with this request. It certainly wasn’t the first such request – but this time was different, because he had a specific idea in mind. In fact, he brought a “blueprint.”
“It’s a scarecrow,” he explained, “and a pumpkin. It has seven eyes, and a camera here, and it can make sound, and it has lights…” He went on and on about its size and shape and colors…
And that’s why I spent five weekends in October designing, printing, soldering, crimping, assembling, and programming a robot. The technical challenge was substantial but reasonable, and the exercise satisfied my desire to sharpen and maintain my technical skills. Most of all, I hoped that this adventure would inspire (or at least lay the foundation for) some technical curiosity and learning opportunities for my boy.
Here’s my write-up of the design, build, and lessons learned.
Based on the “blueprint,” we decided that the robot (named “ScaryBot” at my son’s request) would be mounted on a post in our front-lawn garden on Halloween to watch for trick-or-treaters and talk to them. ScaryBot would need a webcam and some light motion-tracking algorithms, as well as sound output. It should be able to move its jaw, flap its arms (like a scarecrow waving off birds), and turn on the vertical axis.
We made a few improvements to the blueprint. We moved the arms up to the shoulders, and moved the webcam to the base so that it could remain relatively stationary while the robot above it turned. Rather than a spherical body (since it’s difficult to 3D print a sphere cleanly), we chose a stepped shape. Otherwise, we stayed closely within the… er… client specifications, I guess.
The design required a lot of pieces and consumed about three weekends – half of the project time. I relied heavily on my experience with Autodesk Tinkercad and 3D printing from past projects, as well as a selection of drop-in components – bolt and nut holes, mounts for the electronics, etc.
This was my first project involving non-trivial robotics, and hence servo design.
The jaw servo (above left) was easy: the jaws are hinged by a rod, and the servo rotates the lower jaw.
The body servo (above middle) was tricky. I used an elevator design – a little shuttle that moves up and down a vertical rod, with some rotatable pivots that cause the arms to move in the opposite directions. The range of motion is limited just because the top of the elevator is only a bit higher than the shoulders. I had to upgrade the servo to provide enough torque to avoid stalling.
The base servo (above right) was also tricky because I didn’t want the servo to bear the weight of the robot. Instead, the servo is suspended from the bottom of the body, and it fits into and counter-rotates against a bracket in the stationary base. The bulk of the robot rests on a ring-shaped thrust bearing so that it can freely rotate within a stationary housing provided on top of the control box.
The control box contains a substantial number of components, as well as a compartment for a large power supply. It’s pretty tightly packed, especially with wires from all of the components above. Since the electronics are horizontally stacked, I added two fans and some lateral airflow through the stack.
- RGB LEDs: While my last Halloween project involved a big RGB LED cube, this one needed individual RGB LEDs for the eyes. The LEDs were easy, but the wires had to run from the head through the body and base and into the control box – a lot of wiring! I used some four-wire cabling to reduce the chaos.
- Servos: One MG90S servo for the jaw, one DS3225MG servo for the body (to move the arms up and down), and one DS3225MG servo for the base (to rotate the body around the vertical axis). One 105mm thrust bearing to support the weight and allow base rotation.
- Microprocessor: Raspberry Pi 4B. Reasonably fast detection and responsiveness to motion demanded the quad-core, 1.5 GHz capabilities of the RPi 4.
- PWM: Two Adafruit Raspberry Pi PWM Servo Hats. One provides 50 Hz PWM for the MG90S servo and five LEDs; the other provides 333 Hz PWM for the DS3225MG servos and the other two RGB LEDs.
- Audio: One Adafruit MAX9744 class-D amplifier and two 4Ω speakers.
- Video: One Logitech C615 Full HD webcam. Probably overkill for this project, but I had it laying around from a past project.
- Power: One 12V / 8A power supply (from a previous project) and two Henge 8A UBECs (one to provide 5V for the fans, and one to provide 6V for the power input of the servo hats).
- Cooling: Two Noctua NF-A4x10 5V fans, one for intake and one for exhaust. Definitely overkill for this project, but… I really like Noctua fans, and the idea of a Noctua-cooled pumpkin robot was too much to pass up.
Printing was performed on a Prusa i3 MK3S+ with filament by Hatchbox (orange and green) and Superfila (brown). Lots of incremental refinement to address issues during testing: the back teeth rubbing together as the jaws closed, the body servo was applying too much lateral force on the rod, the collar was too tight around the rotating base, etc. The assembly process created additional issues and required a specific order in which the parts should be coupled.
Lots of soldering, heatshrink, and cabling just for the head…