Introduction: Darth 3.0: a 3D Printed Animated Darth Vader Helmet.

About: Our grandkids keep me busy!

I designed and 3D printed "Darth 3.0: A 3D Printed Animated Darth Vader Helmet" for our grandkids who are Star Wars fans! This 3.0 version incorporates an ESP32, stepper motor drivers and stepper motors to provide a more complicated and programmable animation sequence.

As in my previous Darth animated helmet design, the only contact between each slice must be the pins in the slots, thus careful 3D printing (no warping) and assembly (bearings completely flush with the top and bottom of each slice) are required to successfully 3D print and assemble this model.

As usual I probably forgot a file or two or who knows what else, so if you have any questions, please do not hesitate to comment as I do make plenty of mistakes. Designed using Autodesk Fusion 360, sliced using Ultimaker Cura 4.8.0, and 3D printed in PLA on Ultimaker S5s.

Step 1: Parts.

I acquired the following parts:

  • One Adafruit Feather ESP32 board.
  • One "6PCS 28BYJ-48 Stepper Motor Kit".
  • Two roller lever micro switches (Cylewet 20Pcs Momentary Hinge Metal Roller Lever Micro Switch AC 5A 125 250V SPDT 3 Pins (Pack of 20) CYT1096).
  • Twenty "uxcell 6700-2RS Deep Groove Ball Bearings Z2 10mm x 15mm x 4mm Double Sealed Chrome Steel".
  • Four M2 by 20mm cap screws.
  • Four m2 nuts.
  • One USB power supply with connector compatible with the USB connector on the ESP32 board.

I 3D printed all parts at .1mm layer height with 20% infill. I 3D printed 4 "Bolt, 4mm.stl", 4 "Bolt, Base.stl", 15 "Spacer.stl" and one each of the remaining parts.

This mechanism is a high precision print and assembly using at times very small precision 3D printed parts in confined spaces with highly precise alignment. I 3D printed all parts using the Ultimaker Cura 4.8.0 "Engineering Profile" on my Ultimaker S5s, which provides a highly accurate tolerance requiring minimal if any trimming, filing, drilling or sanding. However, prior to assembly, I still test fitted and trimmed, filed, drilled, sanded, etc. all parts as necessary for smooth movement of moving surfaces, and tight fit for non moving surfaces. Depending on your slicer, printer, printer settings and the colors you chose, more or less trimming, filing, drilling and/or sanding may be required to successfully recreate this model. I carefully filed all edges that contacted the build plate to make absolutely certain that all build plate "ooze" is removed and that all edges are smooth using small jewelers files and plenty of patience.

This mechanism also uses threaded assembly, so I used a tap and die set (4mm by 1 and 8mm by 1.25) as required for thread cleaning.

Step 2: Lower Plate Assembly.

To assemble the lower plate assembly, I performed the following steps.

  • Attached "Slice01 Switch, Lever, Roller, Retainer.stl" and one of the roller lever micro switch to "Plate, Lower.stl" using two M2 by 20mm cap screws and two M2 nuts as shown.
  • Attached "Slice18 Switch, Lever, Roller, Retainer.stl" and the remaining roller lever micro switch to the plate assembly using two M2 by 20mm cap screws and two M2 nuts as shown.
  • Attached the slice01 stepper motor to the plate assembly using two "Bolt, 4mm.stl" as shown.
  • Attached the slice18 stepper motor to the plate assembly using two "Bolt, 4mm.stl" as shown.
  • Pressed "Gear, Motor, Slice18.stl" onto the slice18 stepper motor as shown.
  • Rotated this gear until the arm was centered on the slice18 roller lever micro switch, then carefully positioned the switch and retainer such that the switch activated with the arm centered on the roller, deactivated with the arm off the roller, and the roller did not bind with the arm. When aligned, I tightened the cap screws to hold the switch and retainer in the proper position.
  • Pressed "Gear, Motor, Slice01, Arm.stl" onto the slice01 stepper motor as shown.
  • Rotated this arm until the arm was centered on the slice01 roller lever micro switch, then carefully positioned the switch and retainer such that the switch activated with the arm centered on the roller, deactivated with the arm off the roller, and the roller did not bind with the arm. When aligned, I tightened the cap screws to hold the switch and retainer in the proper position.

Step 3: Wiring.

From the ribbon cable jumpers included in the stepper motor kit I created two ribbon cables, each having the colors blue, green, yellow and orange, and cut the female headers from each cable such that a 70mm length of wire was attached to the female header.

To wire the ESP32, I performed the following steps:

  • Soldered one blue, green yellow and orange female connector assembly with the blue wire soldered to A0, the green wire soldered to A1, the yellow wire soldered to A5 and the orange wire soldered to 21 on the ESP32 board.
  • Soldered the remaining blue, green, yellow and orange female connector assembly with the blue wire soldered to A6, the green wire soldered to A7, the yellow wire soldered to A8 and the orange wire soldered to A9 on the ESP32 board.
  • Soldered a 80mm length of black wire to the GND pin on the ESP32 board, and a 80mm length of red wire to the USB pin on the ESP32 board.
  • Soldered a 100mm length of yellow wire to pin 13 on the ESP32 board.
  • Soldered a 100mm length of green wire to pin 27 on the ESP32 board.

To wire the slice01 motor driver, I performed the following steps:

  • Connected the blue A0 female connector to pin IN1 on the motor driver.
  • Connected the green A1 female connector to pin IN2 on the motor driver.
  • Connected the yellow A5 female connector to pin IN3 on the motor driver.
  • Connected the orange 21 female connector to pin IN4 on the motor driver.
  • From the remaining ribbon cable I removed a red jumper, cut the jumper such that 100mm of wire was attached to the female connector, then plugged the female connector to the + pin on the motor driver.
  • From the remaining ribbon cable, I removed a black jumper, cut the jumper such that 100mm of wire was attached to the female connector, then plugged the female connector to the - pin of the motor driver.

To wire the slice18 motor driver, I performed the following steps:

  • Connected the blue A6 female connector to pin IN1 on the motor driver.
  • Connected the green A7 female connector to pin IN2 on the motor driver.
  • Connected the yellow A8 female connector to pin IN3 on the motor driver.
  • Connected the orange A9 female connector to pin IN4 on the motor driver.
  • From the remaining ribbon cable I removed a red jumper, cut the jumper such that 100mm of wire was attached to the female connector, then plugged the female connector to the + pin on the motor driver.
  • From the remaining ribbon cable, I removed a black jumper, cut the jumper such that 100mm of wire was attached to the female connector, then plugged the female connector to the - pin of the motor driver.

To complete the wiring, I performed the following steps:

  • Soldered a 140mm length of black wire from the switch01 common terminal to the switch18 common terminal.
  • Soldered a 100mm length of black wire to the switch01 common terminal.
  • Soldered the yellow wire from pin 13 on the ESP32 board to the switch01 normally open terminal.
  • Soldered the green wire from pin 27 on the ESP32 board to the switch18 normally open terminal.
  • Soldered the free ends of the four black wires (one from switch01, one from each stepper motor controller, and one from the ESP32) together and covered the solder joint with heat shrink tubing.
  • Soldered the free ends of the three red wires (one from each stepper motor controller, and one from the ESP32) together and covered the solder joint with heat shrink tubing.
  • Plugged the slice01 stepper motor cable into the connector on the slice01 stepper motor controller.
  • Plugged the slice18 stepper motor cable into the connector on the slice18 stepper motor controller.

Step 4: Software.

I wrote the software "DarthThreePointZero.ino" for "Darth 3.0: A 3D Printed Animated Darth Vader Helmet" in the Arduino 1.8.13 environment on MacOS Big Sur. I designed the software for no external libraries (dependencies) in the hope that it was easier for everyone to compile and download.

To compile and download the software to the ESP32, I connected a USB cable between my computer and the ESP32, loaded "DarthThreePointZero.ino" into the Arduino environment, then pressed the right arrow button to compile and download the software into the ESP32.

The software is divided into a number of sections, the first of which is the "Constants" section defining pin numbers, interrupt service routines timer modes and submodes, animation commands, and stepper motor parameters.

The second section "Global Variables" defines global variables for interrupts and slices.

The third section "Interrupts" contains the interrupt service routine "onTimer". This routine performs all aspects of homing the slices and executing step commands received from the Arduino "loop" function.

The third section "Arduino" contains the standard Arduino setup and loop functions. In the setup function, pin assignments are created and the interrupt service routine is established and created with a semaphore for the Arduino loop function. The Arduino loop function is designed to execute an array of animation commands. It steps sequentially through the "AnimationCommands[]" array and executes each animation command in sequence upon completion of the previous animation command as determined by receiving a semaphore from the interrupt service routine "onTimer".

The final section "Utilities", contains subroutines designed only for the interrupt service routine including "MotorSlice01Off()" designed to turn the slice01 motor off, "MotorSlice01Step" designed to step the slice01 motor one step, "MotorSlice18Off()" designed to turn the slice18 motor off, and finally "MotorSlice18Step" designed to step the slice18 motor one step.

Step 5: Final Assembly.

For final assembly, I performed the following steps:

  • Positioned the three circuit boards in "Base.stl" as shown.
  • Positioned both motor gears such that the arms were centered on their respective micro roller lever switch rollers
  • Positioned the lower plate assembly over the base assembly as shown.
  • Pressed "Axle, Slice18.stl" into "Gear, Slice18 (1m24t, .5nl).stl".
  • Positioned the slice18 axle assembly on the base assembly as shown with a flat side of the hexagonal axle facing straight forward.
  • Positioned "Plate, Upper.stl" over the base assembly as shown.
  • Pressed "Gear, Motor, Slice01.stl" onto "Gear, Motor, Slice01, Arm.stl".
  • Slid "Gear, Slice18 (1m 24t .5bl).stl" onto the upper plate tower as shown with a flat side of the hexagonal facing straight forward.
  • Positioned "Cover, Top.stl" or "Cover, Top and Sides.stl" over the assembly as shown, then secured in place using four "Bolt, Base.stl".
  • Placed "Slice01.stl" onto the slice18 gear.
  • Pressed one bearing into "Slice02.stl" through "Slice17.stl", making certain the bearings were perfectly flush with the slices.
  • Slid the Slice02 assembly onto the upper plate tower as shown.
  • Slid one "Spacer.stl" over the slice.
  • Repeated the previous two steps for Slice03 through Slice16 assemblies.
  • Slid Slice17 onto the upper plate tower as shown.
  • Pressed "Slice18.stl" onto the top of the slice18 axle assembly.

With assembly completed, I plugged the USB cable into the ESP32 and USB power supply, plugged the power supply into mains power, and off it went!

And that is how I 3D printed and assembled "Darth 3.0: A 3D Printed Animated Darth Vader Helmet".

I hope you enjoyed it!

Toys & Games Contest

Runner Up in the
Toys & Games Contest