I needed a purge bucket for my Neptune 4 printer, so I rolled up my sleeves and started drawing, it is quite simple, robust and works very well
NOTE: The screw holes on the model are a mirror reflection of the holes on the printer, by adjusting the position of the screws, you can position the part forward or backward.
Parts List :
4mm ptfe tube
2x screws for ptfe
2x m4 screw
2x m4 nyloc nut
Foil tape
Print Settings :
PETG
0.2 layer height
without support
brim
Additional upgrade:
I added a stopper to prevent the filament from coming into the print area
You can contact us if there is anything missing
////////////////////////////////
Config Upgrades:
[stepper_x]
rotation_distance: 40
position_max: 243
[gcode_macro RESUME]
rename_existing: BASE_RESUME
variable_zhop: 0
variable_etemp: 0
variable_color_change: 0
gcode:
{% if printer['pause_resume'].is_paused|int == 1 %}
SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1 ; enable filament sensor
SET_IDLE_TIMEOUT TIMEOUT={printer.configfile.settings.idle_timeout.timeout} ; set timeout back to configured value
{% if etemp > 0 %}
SET_HEATER_TEMPERATURE HEATER=extruder TARGET={etemp|int}
TEMPERATURE_WAIT SENSOR=extruder MINIMUM={etemp|int - 4} MAXIMUM={etemp|int + 10} ; wait for hotend to heat back up to print temp
{% endif %}
RESTORE_GCODE_STATE NAME=PAUSEPARK MOVE=1 MOVE_SPEED=200 ; go back to park position in case toolhead was moved during pause ; enable extruder stepper motor
G90 ; absolute positioning
G1 X242 ; go purge bucket
G91 ; relative positioning
M83 ; set extruder to relative mode
m106 S255 ; set cooling fan set %100
{% if color_change == 1 %}
LOAD_FILAMENT_COLOR_CHANGE
{% else %}
G1 E80 F200
{% endif %} ; extrude 80mm of filament to prime the nozzle
G4 P2000 ; wait for 2 seconds to stabilise pressure
M204 S4000 ; wiggle movement to ensure free movement of purge
G1 X-12 F21000
G1 X12
G1 X-12
G1 X12
G1 X-12
G1 X12
G1 X-12
G1 X12
G1 X-12
G1 X12
RESTORE_GCODE_STATE NAME=ZLIFT MOVE=1 MOVE_SPEED=60 ; restore to the zlift position above the print
G1 X-3 Y-3 F3000 ; Undo the pause Wipe out
G1 Z{zhop * -1} F900
RESTORE_GCODE_STATE NAME=PAUSE MOVE=1 MOVE_SPEED=60 ; restore to the paused position (lowers to final print location)
M400
SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=color_change VALUE=0
BASE_RESUME ; resume print
{% endif %}
[gcode_macro M600]
description: Pause for colour change
gcode:
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=color_change VALUE=1
SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=color_change VALUE=1
PAUSE
UNLOAD_FILAMENT_COLOR_CHANGE
[gcode_macro PAUSE]
rename_existing: BASE_PAUSE
variable_color_change: 0
gcode:
PAUSE_TUNE
{% set z = params.Z|default(2)|int %} ; z hop amount 2mm
{% if printer['pause_resume'].is_paused|int == 0 %}
SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE={z} ; set z hop variable for reference in resume macro
SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=etemp VALUE={printer['extruder'].target} ; set hotend temp variable for reference in resume macro
SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 ; disable filament sensor
SAVE_GCODE_STATE NAME=PAUSE ; save the current print position for resume, before z-hop
BASE_PAUSE ; pause print
G91
{% if (printer.gcode_move.position.z + z) < printer.toolhead.axis_maximum.z %} ; check that zhop doesn't exceed z max
G1 E-2 F2700 ; Retract 2mm
G1 X3 Y3 F3000 ; Wipe out
G1 E-2 Z{z} F1600 ; Retract 2mm more & raise z by z hop amount
SAVE_GCODE_STATE NAME=ZLIFT ; save the current print position for resume, after z-hop
{% else %}
{ action_respond_info("Pause zhop exceeds maximum Z height.") } ; if z max is exceeded, show message and set zhop value for resume to 0
SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE=0
G1 E-2 F2700 ; Retract 2mm
G1 X3 Y3 F3000 ; Wipe out
G1 E-2 F1600 ; Retract 2mm more
SAVE_GCODE_STATE NAME=ZLIFT
{% endif %}
G90
#G1 X{% if color_change == 1 %}242{% else %}{printer.toolhead.axis_minimum.x+5}{% endif %} Y{printer.toolhead.axis_maximum.y-5} F6000 ; park toolhead
#G1 X{printer.toolhead.axis_minimum.x+5} Y{printer.toolhead.axis_maximum.y} F6000 ; park toolhead at the rear left of the bed
G1 X242 Y220 F6000 ; park toolhead at the rear right of the bed
SAVE_GCODE_STATE NAME=PAUSEPARK ; save the parked position
SET_HEATER_TEMPERATURE HEATER=extruder TARGET=200 ; cool down hotend to no-drip temp
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=color_change VALUE=0 ; reset color change state
SET_IDLE_TIMEOUT TIMEOUT=43200 ; set idle timeout to 12 hours (in seconds)
{% endif %}
[gcode_macro UNLOAD_FILAMENT_COLOR_CHANGE]
variable_unload_distance: 70
variable_purge_distance: 15
gcode:
SET_HEATER_TEMPERATURE HEATER=extruder TARGET=230
TEMPERATURE_WAIT SENSOR=extruder MINIMUM={230-4} MAXIMUM={230+40}
{% set speed = params.SPEED|default(300) %}
{% set max_velocity = printer.configfile.settings['extruder'].max_extrude_only_velocity * 30 %}
SAVE_GCODE_STATE NAME=unload_state
G91
G92 E0
G1 E{purge_distance} F{speed} ; purge
G1 E-{unload_distance} F{speed} ; fast-unload
RESTORE_GCODE_STATE NAME=unload_state
[gcode_macro LOAD_FILAMENT_COLOR_CHANGE]
variable_load_distance: 70
variable_purge_distance: 50
gcode:
{% set speed = params.SPEED|default(300) %}
{% set max_velocity = printer.configfile.settings['extruder'].max_extrude_only_velocity * 30 %}
SAVE_GCODE_STATE NAME=load_state
G91
G92 E0
G1 E{load_distance} F{max_velocity} ; fast-load
G1 E{purge_distance} F{speed} ; purge
RESTORE_GCODE_STATE NAME=load_state
The author marked this model as their own original creation.