Introduction: Automatic Tool Changing 3D Printer

Enroll in my 'Electronics in a nutshell' course here:

Also check out my youtube channel here for more projects and electronics tutorials:

Imagine a machine that sits on your desk. One click on your computer and the machine starts to 3d print a car you designed. Midway through your print the printer docks the extruder and picks up a robotic arm. The robotic arm gripper goes to the side of your printer and picks up a motor and accurately places them inside your half printed object. After placing your motor, the printer docks the robotic arm and picks up the extruder and continues to 3d print. As finish your 3d print, your printer docks the extruder and picks up a laser engraver that engraves a serial number and prints some safety information like “do not swallow” you could 3d print, add motors, nuts, engrave serial number and safety. Lastly, the robot docks the laser, picks up the robotic arm that it uses to pick up the part of the build plate and start the whole process again.

Now imagine, all the parts for achieving this dream could be printed by your 3d printer! Thanks to the magic of automated tool-change. This machine has replaced the a small scale manufacturing line in the space of a regular 3d printer. This is truly 3d printing 2.0. Tool changing has been used by large scale CNCs for years to automatically change the cutting head. The reason that it hasn’t been implemented in 3d printing is twofold. 1. 3d printers are not built as sturdily as huge cnc cutters that can ensure that the tool change process doesn’t introduce any accuracy or reliability issues(changing tool heads). 2. The software for ‘slicing’ such tool changes automatically and reliably doesn’t exist. What I have created solves the first issue of reliability since I designed my tool heads and carriages with a self-centering mechanism that virtually corrects for any shift/movement that might affect the accuracy of the part. My mechanism is also additionally modular to allow for any sized tools(laser cutters, low power cncs, pick and place arms etc.) The second challenge still exists however. All my gcode for operating the tool change so far is handwritten for every model. Companies have been building regular 3d printing slicers for many years and they still exhibit a little bit of reliability issues/ 3d prints not printing optimally. Being able to give a slicer a cad model and expecting it to automatically figure out when to tool change optimally and calibrate each tool introduces many more degrees of complexity and therefore the likelihood of failure.

Step 1: Self Centering, Locking Toolheads: the Heart of the Project

The self centering mechanism works by using semi circular lugs on a v shaped receptacle for docking(look at the picture for a visual explanation). When these 2 shapes intercept, they connect only 2 points and automatically correct in the x plane(the 2 surfaces interface by bringing them together on the z plane).
Using multiple self-centering lugs around the docking mechanism allows the tool change to fully correct for roughly 2mm of inaccuracy in the x axis, y axis, and even if the docked tool is rotated a few degrees.

This self-aligning mechanism needs pressure applied in the Z (mating) axis to function properly. I achieved this using a servo that rotates up an inclining track to lock the 2 parts in this place. Look at the pictures and videos for a better view and explanation on this mechanism. This locking not only mashes the 2 parts together but also prevents the toolhead from moving when in operation or being accidentally knocked over by someone’s hand.

Note that you want to print these parts in really high resolution (0.1mm idealy) since these parts apply friction when they are pressed together and rougher surface (low 3d print resolution like 0.3) resists the sliding of the toolhead and dock which is integral to the self centering mechanism. Furthermore, a lower resolution means that when the semicircular side slots into the v shaped lug, the point of contact will be thinner and closer to 2 1-dimensional lines of contact which helps with self centering.

Step 2: Materials

My implementation of the tool change is built around the creality cr-10 3d printer. I have posted the fusion 360 source files and .stls so you can modify or replicate this project. I chose the cr-10 since it's an incredibly popular and easy to modify printer.

Parts for carriage:

3D print of carriage (download available at the downloads page of this instructables article.

2xM3 bolts

M3or M4 Lock Nut + bolt (for calibrating the tool docking position)

Parts for Tool Head

3D print of Toolhead carrier(download available at the downloads page of this instructables article.

Servo with a ‘-’ shaped servo horn + 2 mini screws that come with the servo to secure it (i used the turnigy 9 gram servos)

4xM3 bolts + lock nuts

Micro push button (any small button works)

Toolhead dock(where the toolhead is parked when not in use)

3D print of toolhead printer mount (download available at the downloads page of this instructables article.

Servo with a ‘-’ shaped servo horn + 2 mini screws that come with the servo to secure it (i used the turnigy 9 gram servos)

4xM4 bolts + lock nuts

Micro push button (any small button works)

Other parts: Arduino uno(use any arduino that has enough pwm pins for your servos and digital pins for the buttons you use) Ribbon cables(Keeps things tidy, you can use any regular wire) Misc accessories such as zip ties, specific tool-toolhead mounting hardware etc.

Step 3: Code & Physical Installation

This step will differ based on the 3D printer you integrate this on. Nonetheless, I'll be detailing the steps for installing this on the Creality Cr-10 printer.

The tool head dock holder will be bolted to the top of the printer using 4 M4 nuts and bolts. The carriage tool head part will be bolted to the carriage where the extruder used to be mounted(You will have to remove the extruder and mount it to the tool-head carrier part).

The servos and micro-switches (used for docking) need to be wired to the arudino and flashed with the code downloadable down below. The code basically ensures that a toolhead can only be docked to an empty carrige that's not already carrying a toolhead. The code also ensures that the toolholder where unused toolheads are parked are not dropped when other tool-changes are occurring.

Every docking surface either has a micro-switch or a calibration screw attached to tell the servo when to rotate and dock the toolhead. During installation, and after testing the electronics, these calibration screws will have to be individually adjusted to ensure that docking happens at the right position.

Lastly you will need to calibrate the gcode responsible for switching toolheads. Depending on where you bolted the toolhead-carrier(where the toolhead is parked), your x coordinates for parking will be slightly different to mine. You can figure out the exact position by homing all axis on the 3d printer and then moving the carriage to the position where it docks. Once you reach the position where the toolhead successfully docks, note that x and z position.

Your g code for docking and undocking the toolhead from its parking position will then be:

G1 X90 (Your x position should be the same as the docking/undocking x position)

G1 Z360 (Now the printer will move up in the z axis to dock/undock the toolhead. Use the z position from your calculation above)

G4 P500 (This g code line will ask the printer to wait for half a second so the servo can physically move and dock/undock the toolhead)

That's it. Use a slicer to slice gcode for your 3d print and interject those 3 lines of gcode to initiate a dock/undock of your toolhead.

Step 4: Types of Tool-heads and How to Modify Their Carriages

So far my tool-head has the mounting holes for mounting a laser cutter, a pick and place claw, and the stock extruder. However since all these are mounted on a flat surface, virtually any tool head can be used to mount the parts you want to mount. Just modify my cad files for the holes your tool needs. Do note that since the toolheads stick in front of the carriage, you want to maintain the relative center of gravity close to the carriage to prevent excessive strain.

Step 5: File Downloads

Here you can find the .f3d (Fusion 360 file). You can open it in fusion 360 and convert it to any file type you want.

The code for the Arduino is available in the steps before this.

Step 6: Future Modifications

Geometrically, interfacing 2 surfaces over 3 points of contact is the most stable way of joining them. I forgot about this and used 4 points of contact (mating lugs used to dock) which still provides a relatively stable and secure docked position. However, if I were to revise this prototype, I would use 3, bigger interfacing lugs instead of 4 small ones. Nonetheless, the self-centering nature of my interfacing lugs worked perfectly.

Traditionally the z axis speed of a 3d printer is capped to a low speed since the printer spends very little time moving up and down the z axis and even when it does, it only moves up a layer at a time (0.1-0.3mm). Since the speed is capped by the firmware, I would recommend that you recompile the cr-10 firmware with a higher z axis speed limit since every tool change requires the printer to go to the top of the printer to pick up or drop a tool-head (roughly 35cm). This makes every tool-change take roughly 1.5 mins total. It could be cut down to 30 seconds.

Enroll in my 'Electronics in a nutshell' course here:

Also check out my youtube channel here for more projects and electronics tutorials: