Update: I no longer recommend this design because the servo gets damaged from the way the arm is pushed when the nozzle is being cleaned. I have a new design that isn't affected by this, which I'll upload and link once more testing has been performed.
There are v0.2 mods created to wipe the nozzle using wire brush heads, but why not use the Bambu Labs' approach on the X1 to use a PTFE tube?
This model simply adds a new arm to an existing mod to replace the brush arm.
Please make sure to download and print, the servo mount and, optionally, the case from the original author.
BOM for wiper arm:
For the BOM for the rest of the mod, as well as the installation and servo configuration, see the original model.
Example gcode_macro:
[gcode_macro WIPE_NOZZLE]
gcode:
{% set num_wipes = params.WIPES|default(3)|int %}
{% set wipe_speed = params.SPEED|default(3000)|int %}
{% set extrude = params.EXTRUDE|default(10)|int %}
{% set retract = params.RETRACT|default(-5)|int %}
{% set start = ({"x":15,"y":120}) %}
{% set end = ({"x":2,"y":120}) %}
G90
G1 X{start["x"]} Y{end["y"]} F7800 ; Starting position, close to wiper in extended position
NOZZLE_WIPER_ON
{% if printer[printer.toolhead.extruder].can_extrude %}
G1 E{extrude} F120 ; Extrude some extra to create more weight and avoid smearing the filament on the sides of the nozzle
G1 E{retract} F3600 ; Retract to avoid more ooze and making it easier to detach the hanging filament.
{% endif %}
{% for i in range(num_wipes|int) %}
G1 X{end["x"]} Y{end["y"]} F{wipe_speed} ; Wipe left
G1 X{start["x"]} Y{start["y"]} F{wipe_speed} ; Wipe right
{% endfor %}
G1 X{end["x"]} Y{end["y"]} F{wipe_speed} ; Finish on left to leave filament on the right
G1 Y100 F7800 ; Move towards the front to allow nozzle arm to retract
NOZZLE_WIPER_OFF ; Retract wiper arm (which should brin the filament with it if it's not yet fallen)
[gcode_macro NOZZLE_WIPER_ON]
gcode:
G28 ; Homing (replace with conditional homing if available)
{% if printer.toolhead.position.z < 20 %}
G1 Z20 F3000 ; Make sure the bed isn't in the way of the servo
{% endif %}
SET_SERVO SERVO=nozzle_wiper angle=80 ; 80 is 90° servo arm location for me
[gcode_macro NOZZLE_WIPER_OFF]
gcode:
SET_SERVO SERVO=nozzle_wiper angle=0
The author remixed this model.
None, as this remix simply replaces the brush arm part.