1 / 2
Retractable Nozzle Cleaning Brush for Voron 2.4 350 — zdjęcie 1
1 / 2

Retractable Nozzle Cleaning Brush for Voron 2.4 350

Zamów wydruk tego modelu

Obliczymy ostateczną cenę na podstawie wybranego pliku. Sprawdzisz ją i zaakceptujesz przed płatnością.

Zapisane na tym urządzeniu.

A retractable brush that rises above the bed to clean the nozzle

Ocena
0 / 5
Polubienia
8
Pobrania
27
Wydruki
0
Wyświetlenia
372
Oceny
0

Aktualizacja u źródła:

Informacje o modelu

Źródło
Printables
Licencja
Creative Commons — Attribution — Noncommercial

Voron Nozzle Brush – Servo Driven Mechanism

This project is a simple mechanical nozzle cleaning system for Voron printers.
It uses a small tray with a brass brush that is moved in and out of the print area using a lever mechanism powered by a micro servo.

Features

  • Compact brush holder mounted on standard Voron extrusion

  • Lever mechanism keeps the brush level during movement

  • Servo-powered deployment and retraction

  • Power switching for the servo to prevent jitter and overheating

  • Fully compatible with Klipper macros

 Hardware Setup

  • Servo: 9g micro servo (tested with Goteck GS-D9025MG)

  • Power: +5V via step-down converter

  • Control board: BTT Octopus (pins must be adjusted for your setup)

Wiring:

  • +5V → from PSU via step-down

  • GND → switched via MOSFET (fan output)

  • Signal → any free GPIO pin

This allows the servo to be powered only when needed.

Printing Settings

  • Material: ASA (recommended for enclosed printers)

  • Layer height: 0.2 mm

  • Infill: 40%

  • Perimeters: 4

  • Nozzle: 0.4 mm

  • Supports: only where necessary

Increase infill for mechanical parts (arms, servo mount).

 Assembly Notes

  • Install all heat-set inserts before assembly

  • Set servo position before mounting arms

  • Make sure the brush stays level during motion

  • Check all clearances (bed / nozzle collision)

  • Trim carbon rods or pins so they don’t protrude

Klipper Macros

Below is a working example of the brush control and cleaning macro:

# --- BRUSH MACROS ---

[gcode_macro _BRUSH_STATE] variable_deployed: 0 variable_saved_temp: 0 gcode:

[gcode_macro _ENSURE_BRUSH_RETRACTED] gcode: {% if printer["gcode_macro _BRUSH_STATE"].deployed == 1 %} BRUSH_OUT {% endif %}

[servo nozzle_brush] pin: PA15 maximum_servo_angle: 180 minimum_pulse_width: 0.0005 maximum_pulse_width: 0.0025

[output_pin servo_power] pin: PD15 pwm: False value: 0 shutdown_value: 0

[gcode_macro BRUSH_OUT] description: Move brush to the safe retracted position gcode: SET_PIN PIN=servo_power VALUE=1 G4 P300 SET_SERVO SERVO=nozzle_brush ANGLE=45 G4 P600 SET_SERVO SERVO=nozzle_brush WIDTH=0 G4 P200 SET_GCODE_VARIABLE MACRO=_BRUSH_STATE VARIABLE=deployed VALUE=1

[gcode_macro BRUSH_IN] description: Move brush to the active wipe position gcode: SET_PIN PIN=servo_power VALUE=1 G4 P300 SET_SERVO SERVO=nozzle_brush ANGLE=132 G4 P600 SET_SERVO SERVO=nozzle_brush WIDTH=0 G4 P200 SET_PIN PIN=servo_power VALUE=0 SET_GCODE_VARIABLE MACRO=_BRUSH_STATE VARIABLE=deployed VALUE=0

[gcode_macro CLEAN_NOZZLE] description: Clean the nozzle using the brush variable_brush_y: 340 variable_brush_z: 21.705 variable_brush_x_min: 32 variable_brush_x_max: 72 variable_safe_z: 30 variable_wipes: 6

gcode: {% if "xyz" not in printer.toolhead.homed_axes %} G28 {% endif %}

SAVE_GCODE_STATE NAME=CLEAN_STATE
G90

G1 Z{safe_z} F3000

BRUSH_OUT
G4 P200

G1 X{brush_x_min} Y{brush_y} F20000
G1 Z{brush_z} F1200

{% for i in range(wipes) %}
    G1 X{brush_x_max} F12000
    G1 X{brush_x_min} F12000
{% endfor %}

G1 Z{safe_z} F3000
BRUSH_IN

RESTORE_GCODE_STATE NAME=CLEAN_STATE</code></pre><hr><p>⚠ Important</p><ul><li><p> Pins (<code>PA15</code>, <code>PD15</code>) are specific to my setup → adjust for your board </p></li><li><p> Servo angles (<code>45 / 132</code>) must be calibrated </p></li><li><p> Brush coordinates must be adjusted to your printer </p></li><li><p> Macro naming and logic are kept exactly as in my setup </p></li><li><p> Movement direction may differ depending on servo orientation </p></li></ul><p>Always test movements manually before first use</p><p>&nbsp;Use at your own risk</p><p>&nbsp;Demo</p><p>See the mechanism in action here:<br><a target="_blank" rel="noopener noreferrer nofollow" class="editor-link" href="https://www.youtube.com/@romankocurek5817/shorts">https://www.youtube.com/@romankocurek5817/shorts</a></p>

Tagi