November 4, 2024
Description
As many of you have, I personally struggle with the tiny space of my printer's poop chute, as large multicolor prints generate a lot of waste (even at my minimal 0.4x purge multiplier), so I looked for a better solution. When I couldn't find any, I decided to come up with one myself: A platform on which the nozzle can print that will take the filament waste (which would otherwise form a large hollow cylinder) and let it ooze onto itself, creating a perfectly compact disc/blob of filament. This can then be carried back to the filament purge chute and printing will resume as normal. This solution will immensely reduce the space taken up in poop chutes, meaning you can make many more filament swaps before having to empty out the chute.
How to use:
WARNING: Because this module is situated in the upper-right corner of the build plate, it is strongly recommended to move the prime tower during multicolor prints from its default position (also in the upper-right corner) in order to avoid collision during filament changes. This message can be ignored if the height of the overall build is less than the height of the nozzle's silicone sock.
Additional note: Because of the methods used in the attached gcode, there will likely be small amounts of residual filament on the nozzle after filament changes, so prime towers are recommended for optimal seam quality.
Full custom gcode for those of you who cannot access the linked Google Doc:
----------------------------------------------------------------------------------------------------------------
M620 S[next_extruder]A
M204 S9000
{if toolchange_count > 1 && (z_hop_types[current_extruder] == 0 || z_hop_types[current_extruder] == 3)}
G17
G2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift
{endif}
G1 Z{max_layer_z + 3.0} F1200
G1 X70 F21000
G1 Y245
G1 Y265 F3000
M400
M106 P1 S0
M106 P2 S0
{if old_filament_temp > 142 && next_extruder < 255}
M104 S[old_filament_temp]
{endif}
{if long_retractions_when_cut[previous_extruder]}
M620.11 S1 I[previous_extruder] E-{retraction_distances_when_cut[previous_extruder]} F{old_filament_e_feedrate}
{else}
M620.11 S0
{endif}
M400
G1 X90 F3000
G1 Y255 F4000
G1 X100 F5000
G1 X120 F15000
G1 X20 Y50 F21000
G1 Y-3
{if toolchange_count == 2}
; get travel path for change filament
M620.1 X[travel_point_1_x] Y[travel_point_1_y] F21000 P0
M620.1 X[travel_point_2_x] Y[travel_point_2_y] F21000 P1
M620.1 X[travel_point_3_x] Y[travel_point_3_y] F21000 P2
{endif}
M620.1 E F[old_filament_e_feedrate] T{nozzle_temperature_range_high[previous_extruder]}
T[next_extruder]
M620.1 E F[new_filament_e_feedrate] T{nozzle_temperature_range_high[next_extruder]}
{if next_extruder < 255}
{if long_retractions_when_cut[previous_extruder]}
M620.11 S1 I[previous_extruder] E{retraction_distances_when_cut[previous_extruder]} F{old_filament_e_feedrate}
M628 S1
G92 E0
G1 E{retraction_distances_when_cut[previous_extruder]} F[old_filament_e_feedrate]
M400
M629 S1
{else}
M620.11 S0
{endif}
G92 E0
{if flush_length_1 > 1}
M83
;move to custom module
G1 Y230 F12000
G1 X210 F12000
G1 Y250 F12000
G1 Y265 F500
G1 Z4
;move to custom module
; FLUSH_START
; always use highest temperature to flush
M400
{if filament_type[next_extruder] == "PETG"}
M109 S260
{elsif filament_type[next_extruder] == "PVA"}
M109 S210
{else}
M109 S[nozzle_temperature_range_high]
{endif}
G1 E4
M106 P1 S255
G4 S10
Z5
G1 E3
M106 P1 S255
G4 S10
M106 P1 S0
G1 Z7
{if flush_length_1 > 23.7}
G1 E23.7 F{old_filament_e_feedrate} ; do not need pulsatile flushing for start part
G1 E{(flush_length_1 - 27.7) * 0.02} F{50*0.3}
G1 E{(flush_length_1 - 27.7) * 0.23} F{old_filament_e_feedrate*0.3}
G1 E{(flush_length_1 - 27.7) * 0.02} F{50*0.3}
G1 E{(flush_length_1 - 27.7) * 0.23} F{new_filament_e_feedrate*0.3}
G1 E{(flush_length_1 - 27.7) * 0.02} F{50*0.3}
G1 E{(flush_length_1 - 27.7) * 0.23} F{new_filament_e_feedrate*0.3}
G1 E{(flush_length_1 - 27.7) * 0.02} F{50*0.3}
G1 E{(flush_length_1 - 27.7) * 0.23} F{new_filament_e_feedrate*0.3}
{else}
G1 E{flush_length_1 - 10} F{old_filament_e_feedrate*0.3}
{endif}
; FLUSH_END
G1 E-[old_retract_length_toolchange] F1800
G1 E[old_retract_length_toolchange] F300
{endif}
{if flush_length_2 > 1}
G91
G1 Z-3 F12000; move aside to extrude
G90
M83
; FLUSH_START
G1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}
G1 E{flush_length_2 * 0.02} F50
G1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}
G1 E{flush_length_2 * 0.02} F50
G1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}
G1 E{flush_length_2 * 0.02} F50
G1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}
G1 E{flush_length_2 * 0.02} F50
G1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}
G1 E{flush_length_2 * 0.02} F50
; FLUSH_END
G1 E-[new_retract_length_toolchange] F1800
G1 E[new_retract_length_toolchange] F300
{endif}
{if flush_length_3 > 1}
G91
G1 Z-3 F12000; move aside to extrude
G90
M83
; FLUSH_START
G1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}
G1 E{flush_length_3 * 0.02} F50
G1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}
G1 E{flush_length_3 * 0.02} F50
G1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}
G1 E{flush_length_3 * 0.02} F50
G1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}
G1 E{flush_length_3 * 0.02} F50
G1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}
G1 E{flush_length_3 * 0.02} F50
; FLUSH_END
G1 E-[new_retract_length_toolchange] F1800
G1 E[new_retract_length_toolchange] F300
{endif}
{if flush_length_4 > 1}
G91
G1 Z-3 F12000; move aside to extrude
G90
M83
; FLUSH_START
G1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}
G1 E{flush_length_4 * 0.02} F50
G1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}
G1 E{flush_length_4 * 0.02} F50
G1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}
G1 E{flush_length_4 * 0.02} F50
G1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}
G1 E{flush_length_4 * 0.02} F50
G1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}
G1 E{flush_length_4 * 0.02} F50
; FLUSH_END
{endif}
; FLUSH_START
M400
M109 S[new_filament_temp]
G1 E2 F{new_filament_e_feedrate} ;Compensate for filament spillage during waiting temperature
; FLUSH_END
M400
G92 E0
G1 E-[new_retract_length_toolchange] F1800
M106 P1 S160
G91
G1 Z-3
G90
M83
G4 S15
M400 S3
G1 Z(z_after_toolchange + 5)
G1 Y245 F12000
G1 X70 F21000
G1 Y265 F30000
G1 E-5
G1 E15
G1 X70 F5000
G1 X90 F3000
G1 Y255 F4000
G1 X105 F5000
G1 Y265 F5000
G1 X70 F10000
G1 X100 F5000
G1 X70 F10000
G1 X100 F5000
G1 X70 F10000
G1 X80 F15000
G1 X60
G1 X80
G1 X60
G1 X80 ; shake to put down garbage
G1 X100 F5000
G1 X165 F15000; wipe and shake
G1 Y256 ; move Y to aside, prevent collision
M400
G1 Z{max_layer_z + 3.0} F3000
{if layer_z <= (initial_layer_print_height + 0.001)}
M204 S[initial_layer_acceleration]
{else}
M204 S[default_acceleration]
{endif}
{else}
G1 X[x_after_toolchange] Y[y_after_toolchange] Z[z_after_toolchange] F12000
{endif}
M621 S[next_extruder]A
License:
Standard Digital File License