June 7, 2025
Description
Printables didn't like the M117 gcode command (it works) so I had to upload the gcode via zip file. If you want to slice it yourself it takes some customization. At the time of writing this PrusaSlicer doesn't support adding color changes mid layer. That coupled with having only 5 extruders means you have to jump through some hoops. Here are the steps that I came up with:
1) Printers-->General : Increase number of extruders from 5 to 9
2) Printers-->Custom G-code : replace the Tool change G-code with the following:
; Change Tool[previous_extruder] -> Tool[next_extruder] (layer [layer_num])
{
local next_extruder_really = next_extruder;
if next_extruder>4 then
next_extruder_really = 4;
endif
local next_color = extruder_colour[next_extruder];
if next_color == "#000000" then next_color = "BLACK"
elsif next_color == "#FFFFFF" then next_color = "WHITE"
elsif next_color == "#FF0000" then next_color = "RED"
elsif next_color == "#FF8000" then next_color = "ORANGE"
elsif next_color == "#FFFF00" then next_color = "YELLOW"
elsif next_color == "#00FF00" then next_color = "GREEN"
elsif next_color == "#0000FF" then next_color = "BLUE"
elsif next_color == "#FF00FF" then next_color = "MAGENTA"
elsif next_color == "#00FFFF" then next_color = "CYAN"
endif;
local max_speed_toolchange = 350.0;
local wait_for_extruder_temp = true;
position[2] = position[2] + 2.0;
local speed_toolchange = max_speed_toolchange;
if travel_speed < max_speed_toolchange then
speed_toolchange = travel_speed;
endif
"G1 F" + (speed_toolchange * 60) + "
";
if next_extruder_really == 4 then
"M117 Check Color of extruder 5 is " + next_color + "
";
"M400
";
"T" + next_extruder_really + " S1 L0 D0
";
"M600
";
endif
if wait_for_extruder_temp and not((layer_num < 0) and (next_extruder == initial_tool)) then
"P0 S1 L2 D0
";
"; " + layer_num + "
";
if layer_num == 0 then
"M109 S" + first_layer_temperature[next_extruder] + " T" + next_extruder_really + "
";
else
"M109 S" + temperature[next_extruder] + " T" + next_extruder_really + "
";
endif
endif
"T" + next_extruder_really + " S1 L0 D0
";
}3) Filaments -->Minimal purge on wipe tower : set to zero (this was to prevent big blobs on the wipe tower - didn't work but I left it in)
4) Print Settings-->Output Options : Add the following regexp G-code substitutions:
5) Define the colors for each of the nine extruders and assign to appropriate model sections:
6) Slice and Print with extruders loaded with Black, White, Red, Orange, and Yellow
Note that it will still prompt to change the color on extruder 5 to yellow on the first layer so you can just pull it out and push it back in.
If you have selected the correct colors, there will be a human readable message on the next color to print. Otherwise you will get the hex rgb code. Unfortunately the message does not stay up for long - it get overwritten by the time remaining in a couple seconds. I have not found any way around this so it is easy to miss. If you do miss the cue, then just remember that the text prints in order (*) so the first color change on each layer will be to Yellow and then you will sequence in order: Green, Blue, Violet, Cyan
(*) Skip Violet on layer 3 (since it was printed last on layer2 it gets printed first on layer 3 without a color change) so the sequence for layer3 is: Yellow, Green, Blue, Cyan
I still get big blobs on the wipe tower and my fear it is could cause a stepper to skip as the toolhead tries to move through it and ruin the print. So I just peel it off as soon as it happens. Since you are only changing colors to layer 3 (0.6mm) it doesn't cause any problem on subsequent layers.
Finally, the extruder returns to the last position it was at after a color change and I have not figured out a way to prevent this. The result is it places a tiny dot of the wrong color on top of the prior color that can been seen. The only way I was able to over come it was to slide a piece of Kapton tap over the previous letter before clicking “Yes” to the “Was color change successful” prompt (and then pull it away after the extruder leaves the location.
License:
Creative Commons — Attribution
10