Hi All
I recently got my Snapmaker U1 and started to play around with it. My primary use case is printing Terrain for D&D. Remove the priming and base coloring of the model and leave it to the colored 3d print.
Seeing how the Prusa/Bondtec IDNX can print without a Primetower, I though well hey, the U1 is a toolchanger and it has some cleaning tooling available - why not try to replicate what the IDNX does and pruge/prime with the cleaning tools available.
The Results
TL;DR: It works. I essentially created some custom g-code macro that implements the cleaning routine, then configure OrcaSlicer to use it on a filament change.
Here are some pictures
Model Weight:
Model with with prime tower:
And now, my “custom” method of using the cleaning utensils to prime and purge the toolheads:
The Caveat
It certainly is quite the reduction in waste! So overall, I’m happy with it. Of course though, there is a caveat: It is somewhat messy:
You can see that on the toolhead facing surface, you’ll need to do quite the cleanup.
The macro
It’s a modification of the already existing PREEXTRUDE macro by Snapmaker that does the cleaning. Essentially adding a dwell param to improve speed and ensure retract_length is a float.
[gcode_macro CUSTOM_PREEXTRUDE_FILAMENT]
description: Towerless U1 pre-extrude and wipe
gcode:
{% set temp = params.TEMP | default(220) | int %}
{% set speed = params.SPEED | default(360) | float %}
{% set length = params.LENGTH | default(20) | float %}
{% set retract_length = params.RETRACT_LENGTH | default(0.5) | float | abs %}
{% set dwell = params.DWELL | default(1500) | int %}
SAVE_GCODE_STATE NAME=u1_preextrude
SET_ACTION_CODE ACTION=PRINT_PREEXTRUDING
MOVE_TO_DISCARD_FILAMENT_POSITION
M204 S10000
M109 S{temp}
M83
INNER_APPLY_FLOW_K EXTRUDER={printer.toolhead.extruder} APPLY=1
G1 E{length} F{speed}
INNER_APPLY_FLOW_K EXTRUDER={printer.toolhead.extruder} APPLY=0
G1 E-{retract_length}
M400
M106 S255
G4 P{dwell}
M400
INNER_CUTOFF_BASE_DISCARD
INNER_ROUGHLY_CLEAN_NOZZLE_BASE_DISCARD ACTION=4
INNER_DISCARD_FILAMENT_BASE_DISCARD
MOVE_TO_XY_IDLE_POSITION_EXTRUDER
M107
RESTORE_GCODE_STATE NAME=u1_preextrude
SET_ACTION_CODE ACTION=IDLE
On the OrcaSlicer side, I modified the Change Filament G-Code setting in the device settings.
I replace this code:
if previous_extruder != next_extruder and initial_extruder != next_extruder then
"SM_PRINT_PREEXTRUDE_FILAMENT INDEX=" + next_extruder + "
";
endif
With the following snipped:
if previous_extruder != next_extruder then
if layer_num == 0 then
"CUSTOM_PREEXTRUDE_FILAMENT TEMP=" + first_layer_temperature[next_extruder] + " LENGTH=15 RETRACT_LENGTH=0 DWELL=1500
";
else
"CUSTOM_PREEXTRUDE_FILAMENT TEMP=" + temperature[next_extruder] + " LENGTH=15 RETRACT_LENGTH=0 DWELL=1500
";
endif
e_retracted[next_extruder] = 0;
e_restart_extra[next_extruder] = 0;
endif
Essentialy, call the function when the extruder isn’t the one we just had, ensure temperature is correct for layer 0 and add some math for retraction, purge, etc.
Snapmaker retracts for 10mm at the end of a tool use. Then, on a tool change this function will extrude 15mm, 10 to compensate and 5 to prime and then lastly it’ll clean.
The conclusion so far
The result shows that it could work, it certainly requires some tuning. It also shows that the INDX purge/wipe tooling is made for this method and the U1 isn’t. The U1 is more a generalized cleanup/maintenance kit I suppose (The silicone scrubber thing).
I think with tuning and maybe a cleaning tooling modification (I.e. a V shaped silicone cleaner to “cut” the bugger off) it could actually work really well. But overall, I guess it’ll require tuning shrugs.




