Introduction: Add a Second (Servo Switching) Hotend to an Ender 3

I added a second hotend to my Ender 3. A servo is used to switch between the two hotends. A magnetic bistable mechanism is used to hold the hotends in place during the printing. Here's an attempt at a guide...

Warnings/Disclaimers

This project is not fully tamed, so if you decide to undertake it, you will probably face some bugs you'll have to fix. This is intended as a guide to get you going in the right direction, not as a set of instructions you can follow blindly. For these reasons, I'd say its difficulty level is intermediate. There are two known issues that I have yet to fix (figured I'd burn those bridges when I needed to):

  1. The servo has difficulty switching between hotends when the whole hotend assembly is at an extreme X coordinate (when the assembly is all the way over in the 0mm or 230 mm areas of the X-axis). I think this is because I didn't use long enough bowden tubes, which is resulting in the bowden tubes pulling on the whole rocking part of the assembly and making it harder for the servo to move it. Possible solutions include using longer bowden tubes, adding code to the T0/T1 switching commands to cause the hotend assembly to move to the middle of the X axis before switching (before moving back to it's original position to print), or redesigning the Mounting Part to use a larger, stronger servo.
  2. One hotend is still lined up with its original mounting holes, which means no build volume is lost in the X direction. However, since the hotends were moved out in the Y direction by about 1cm, some build volume is lost in the Y direction. There's also probably some lost in the z direction because of the bowden tubes only being able to bend so far. I think that keeping the y axis build volume shouldn't be too tricky. It seems possible to get back some of the lost volume through reconfiguring the bounds of the Y axis in Klipper. It also doesn't seem like it would be that tricky to move the whole Y axis extrusion forward a bit.

Finally a warning: During this project, there were many times when components (particularly fans) were left hanging by their wires. This caused the wires to break from my part cooling fan. These broken wires then proceeded to short circuit during a print, which killed my mainboard. Now, I make sure to reinforce the wire connections to fans with some hot glue. I recommend this or something similar to help protect those connections. At the very least, CHECK YOUR WIRES before powering on!

Supplies

Hotend Assembly, Extruder, & Mainboard Parts

  1. 1x Ball Bearing
  2. 1x Ball Bearing Ball
  3. Hight Torque Servo
  4. Wire (for the servo)
  5. Second Hotend
  6. Second Extruder Stepper Motor
  7. Cable for Second Extruder Stepper Motor
  8. Metal Extruder Kit
  9. Bowden tube: I used 50 cm of tubing for each hotend when I moved the extruders to the top of the frame, but as stated in the Intro, a known problem might be the result of the bowden tube not being long enough...
  10. Mainboard that supports 5 stepper motors and 2 hotends (I used this SKR 3 with a separate TMC2209 kit, but you're probably fine to use this SKR bundle)
  11. Second 40 mm hotend fan
  12. 16x 8mm diameter, 3mm thick neodymium magnets (will probably wind up not using all 16)
  13. 2 mm thick aluminum to cut the Hotend Mounting Part out of
  14. PLA to print all the parts out of
  15. kapton tape
  16. paper clips
  17. blower fan


Mounting Hardware

  1. 2x M2.5 x16mm (at least; longer works too; these are the bolts that go in the Mounting Part to hold the Magnets in place; see below)
  2. 3x M2.5x4mm
  3. 8x M3x5mm
  4. 4x M3x8mm
  5. 1x M3x8mm countersunk
  6. 8x M3x12mm
  7. 6x M3x20mm; 16mm length works but only just (no extra length)
  8. 1x M4x25mm
  9. 2x M5x30mm: should be able to use the two M5x30 on the printer that are being used to hold the top two roller bearings
  10. 1x M6x40
  11. M6 locking nut: probably optional
  12. between 4x and 8x aluminum extrusion nuts and bolts in the M5x10 to M5x16 range; this is for bolting the Ender 3 E Mount Top Version UP.stl to the top frame; there's holes for 4 bolts per part, but I just used two bolts per part
  13. M5x16 bolt and M5 nut to bolt the two filament spool holders together


Files

  1. Mounting Part.stl
  2. bearing holder.stl
  3. rocking magnet part top.stl
  4. rocking magnet part bottom.stl
  5. hotend fans.stl
  6. Spur gear (8 teeth).stl
  7. ring.stl
  8. Part Fan Mounting Part.stl
  9. Part Fan Duct.stl
  10. Part Fan Duct(Mirror).stl
  11. Hotend Mounting Part.stl (probably will need to be converted to another file kind for CNC milling)
  12. Ender 3 E Mount Top Version UP.stl (will need to be printed twice-- once as is and once mirrored)

I'm using Klipper (which is what's covered in this guide) and housed the mainboard and rpi in a remixed version of this. Not sure which remix I used, but there's the original.



Power Supply Upgrade (maybe optional. I couldn't find very concrete numbers on how much current a hotend and bed use but figured that the stock Ender 3 power supply wasn't enough to handle a second hotend)

  1. 480W Power supply
  2. Power supply rocking switch
  3. 10 AWG Wire
  4. XT60 connectors
  5. Crimping connectors (used fork connectors to plug into power supply)


Mounting Hardware

  1. 3x M4x8
  2. 2x M3x8 and 2x M3 nuts
  3. 2xM5x8
  4. Something in the range of 4x M5x8mm to 10mm and 4x aluminum extrusion nuts for mounting the PSU to the aluminum extrusion


Files

  1. Ender 3 500W PSU Bottom Holder.stl
  2. Ender 3 500W PSU Top Holder.stl
  3. Ender 3 500W bracket.stl



Additionally you will need a soldering iron and a metric thread taping kit.

Ideally you have access to a CNC machine and can use it to mill out the Hotend Mounting Part. You can also do what I did and cut it out by hand using a 3D printed template, a drill, a saw, some pliers, and a file.

Step 1: Create Parts

  1. Set printer to printing and then order pizza. Don't forget to print Ender 3 E Mount Top Version UP.stl once normal and once mirrored so it looks like the picture.
  2. Cut Hotend Mounting Part out of aluminum sheet.

Step 2: Install Helper Parts

Mainboard

  1. Disassemble existing hotend (remember to be careful with having parts hanging by their wires)
  2. Feed second hotend wires and an appropriate length of wire for the servo through the hotend wire tubing.
  3. Replace existing part fan with blower fan
  4. Solder the servo to the wire from step 2
  5. Remove existing mainboard
  6. Install mainboard in rear mounted case and connect up everything including the second hotend and excluding the two extruder motors.
  7. Flash firmware to mainboard
  8. Connect new longer bowden tubes to both hotends (remember the length I used of 50 cm might not be long enough)


Power Supply Install (see photos)

  1. Install power supply rocking switch in Ender 3 500W PSU Bottom Holder.stl with 2x M3x8 and 2x M3 nuts.
  2. Solder XT60 female to length of 10 AWG wires (the whole power supply will be mounted on the aluminum extrusion so make sure you size the length of wire correctly).
  3. Connect fork crimping connectors to other side of wires.
  4. Stick forks in appropriate screw terminals on the power supply (I had to bend the forks a bit to get them to fit)
  5. Connect rocking switch to appropriate terminals
  6. Mount Ender 3 500W PSU Bottom Holder and Ender 3 500W PSU Top Holder to the power supply with 3x M4x8 (they should be fine, but make sure when installing these bolts that they aren't going too deep into the power supply casing; don't want to screw into an internal component)
  7. Mount Ender 3 500W bracket to Bottom Holder with 2xM5x8
  8. attach 4xM5x8-10 bolts to printed parts along with the nuts
  9. remove top aluminum extrusion from printer and existing power supply
  10. the gap in the prints between the power supply and the aluminum extrusion is a cable channel for the extruder cables so feed those cables through as you slide on the power supply down the extrusion
  11. tighten the M5 bolts to hold PSU in place
  12. solder male XT60 to another length of 10 awg wire and connect to mainboard and power supply


Extruder Motors

  1. Remove existing extruder motor from mounting
  2. bolt spool prints together with M5x16 bolt and M5 nut
  3. Place extruder motors in Ender 3 E Mount Top Version UP.stlsso they are oriented to have their cable connections facing in the direction of the power supply; otherwise the cables won't reach! (see picture)
  4. Mount them with the aluminum extruder kits
  5. Slide on to top aluminum extrusion on frame
  6. Make sure they are located in a spot on the top that the stepper cables can reach
  7. Mount to frame with between 4 and 8 aluminum extrusion nuts and something in the M5x10 to M5x16 range
  8. Connect extruders (make sure to connect extruder 1 to the stepper driver you're going to set for extruder 1 and extruder 2 to driver 2; see picture)

Step 3: Hotend Assembly Part 1: the Rocking Section

  1. Tap threads in aluminum Hotend Mounting Part
  2. Mount hotends (can also use 4x M3 nuts for extra strong connection instead of just relying on tapped threads)
  3. Mount Hotend Fan piece (the wires for the second hotend go through the channel in the hotend fan part (see pictures))
  4. Solder on the second hotend fan (make sure the wires won't get in the way of anything)
  5. Mount hotend fans

Step 4: Hotend Assembly Part 2: the Mounting Section

  1. Put ball bearing in Mounting piece and secure with Bearing Holder piece
  2. Stick magnets in channels in Mounting piece. 2x magnets per channel. Then use bolts to hold them in place.
  3. Disassemble top two M5x30 bolts of the original tool head that are holding the top roller bearings on the X axis
  4. Screw the two M5x30 bolts through the mounting piece and then through the original toolhead part
  5. Reattach the roller bearings while also attaching the whole thing back onto the X aluminum extrusion
  6. Stick magnets in channels in Rocking Magnet Part Bottom piece. 2x magnets per channel. Make sure the magnet polarities are so that they are attracted to their counterpart magnets in the mounting piece. The magnets should be basically flush with the surface when done. Maybe temporarily cover the channels with tape afterwards to stop them falling out.
  7. Slot the Rocking Magnet Part Bottom piece into the end of the Hotend Mounting Part
  8. Stick M6x40 bolt through ball bearing
  9. Stick Ring part on M6 bolt (goes between ball bearing and Hotend Mounting Part)
  10. Stick M6 locking nut in Rocking Magnet Part Top piece



Step 5: Hotend Assembly Part 3: Combining the Sections

  1. Thread M6 bolt a little bit through Hotend Mounting Part
  2. Place Rocking Magnet Part Top flush on top and lined up with M6 bolt
  3. Screw M6 bolt through everything. The M6 bolt is the axis of rotation and the mounting point between the rocking parts and the "stationary" parts. When partway screwed in, add steel ball to hole in bottom of the Rocking Magnet Bottom part. The ball should stick out a bit and roll against the Mounting part when everything's together. You maybe don't need the ball. Its purpose is to help prevent any wobble in the whole rocking part in the Y axis direction.
  4. put M4 bolt through both Rocking Magnet parts and Hotend Mounting part
  5. Reshape paper clips so they look like the picture. There should be a loop in the clip on one side to mount it to the Mounting part and a loop in the clip on the other side to wrap in kapton tape. The paper clips are there to stop filament from oozing out of the inactive hotend, so they should be positioned and shaped so the hotend tip is pressed into it when the hotend isn't active (see video).
  6. attach kapton tape to the paper clips
  7. mount the paper clips to the Mounting piece

Step 6: Firmware

Add T0 and T1 commands to the printer config file in Klipper (I have it set so extruder 1 is named in Klipper as "extruder" and extruder 2 is named "extruder1")


# Script to change to the 1st extruder/hotend

[gcode_macro T0]

gcode:

SET_GCODE_OFFSET Z=1 MOVE=1 # z height calibration

SET_SERVO SERVO=extruder_servo angle=167 # Lift extruder

SET_GCODE_OFFSET X=0 MOVE=1 # Clear X offset

SET_GCODE_OFFSET Y=0 MOVE=1 # Clear Y offset

ACTIVATE_EXTRUDER EXTRUDER=extruder


# Script to change to the 2nd extruder/hotend

[gcode_macro T1]

gcode:

SET_SERVO SERVO=extruder_servo angle=110 # Lift extruder

SET_GCODE_OFFSET Z=0 MOVE=1 # Adjust z-height

SET_GCODE_OFFSET X=47.3 MOVE=1 # X offset

SET_GCODE_OFFSET Y=2.6 MOVE=1 #Y offset

ACTIVATE_EXTRUDER EXTRUDER=extruder1


Also configure the servo with the pin it's attached to.


[servo extruder_servo]

pin: PE5

Step 7: Cura

The Ender 3 profile in Cura doesn't support two hotends. I created a generic printer profile and then copied over the Ender 3's settings. Also in the normal, single-color Ender 3 profile, I added a T0 command right after homing the axes in the start G-Code section to make sure that the right hotend is set. This Makertech guide helped.

Step 8: Calibrations

  1. Mount the servo in its spot. Make sure the servo wires aren't close/touching the second hotend. Set the servo to be in its T0 angle while the rocking hotends are also in the T0 position (so that hotend 2 isn't in position and hotend 1 is) and then install the servo gear. Then calibrate the T1 angle. If the servo isn't strong enough, you will need to remove a magnet or two (I had to remove at least 2)(easiest to remove from the Mounting piece).
  2. Attach Part Fan pieces (there are also mounting holes in the Part Fan Mounting Part for an ADXL345 accelerometer for Klipper; I haven't actually tested that the accelerometer mounts/fits with those holes)
  3. The bed will need to be leveled and appropriate Z offsets configured in the T0/T1 commands so both hotends can print a good layer. X and Y offsets also need to be set. This Makertech guide helped.
  4. Lastly, don't forget to modify the build volume dimensions/positions in Cura/Klipper to reflect the new reality of the smaller build volume that's a result of all the changes of this project.

Step 9: Conclusion

Here's hoping you found this guide at least somewhat helpful. Happy printing!