Introduction: 3D Printer Circular Nozzle Cleaner
Created this circular nozzle cleaner for my CoreXY printer. The cleaner uses 10 Brass Brushes for a rotary tool.
brushes purchased on amazon (pack of 20) PHYHOO Cleaning Brass Brushes Kit for Rotary Tools
Cleaner designed in Fusion 360. You can download the model at GrabCad.com
Since this printer is coreXY with the Bed moving along the z-axis, the height of the Nozzle is stationairy in relation to the frame.
In order to account for changes in the nozzle (as it related to the actual extruder) the nozzle cleaner is adjustable via three screws accessible from the bottom. Screw and tension springs can be purchased at amazon:
screws: Uxcell M3 20mm socket head screw
springs: Swordfish 31070 200PC Extended and Compressed Spring assortment Case Kit
Step 1: Marlin Code Adjustments
The current printer this nozzle cleaner is added to is running Marlin 1.0.x which has experimental code around nozzle cleaning.
Cleaning can be initiated with the g12 code.
I choose for a circular cleaning pattern as I feel that will get all the nooks and crannies of a standard e3d nozzle.
in configuration.h you uncomment the #define NOZZLE_CLEAN_FEATURE line and set parameters.
NOZZLE_CLEAN_STROKES = 2 (nozzle will make 2 full circles inside the cleaner
NOZZLE_CLEAN_START_POINT= { 37, -54, (Z_MIN_POS + 1)} This happens to be the center coordinated of the circular row of brushes in my cleaner
NOZZLE_CLEAN_CIRCLE_RADIUS 8.2 (that is the radius of the circle of brushes in this design)
NOZZLE_CLEAN_CIRCLE_FN 20 set the number of steps in which a full circle is completed (each step represents a x/y coordinate on the circle).
As far as I can tell the original code for creation a circle in the nozzle.cpp code is not correct. It uses the M_2_PI c++ parameter when it should be using 2*M_PI.
old code:
float x, y; for (uint8_t s = 0; s < strokes; s++) { for (uint8_t i = 0; i < NOZZLE_CLEAN_CIRCLE_FN; i++) { x = middle.x + sin((M_2_PI / NOZZLE_CLEAN_CIRCLE_FN) * i) * radius; y = middle.y + cos((M_2_PI / NOZZLE_CLEAN_CIRCLE_FN) * i) * radius;<br> do_blocking_move_to_xy(x, y); } }
new code
float x, y;<br>for (uint8_t s = 0; s < strokes; s++) { for (uint8_t i = 0; i < NOZZLE_CLEAN_CIRCLE_FN; i++) { x = middle.x + sin((2* M_PI / NOZZLE_CLEAN_CIRCLE_FN) * i) * radius; y = middle.y + cos((2* M_PI / NOZZLE_CLEAN_CIRCLE_FN) * i) * radius; do_blocking_move_to_xy(x, y); } }
Step 2: Custom Gcode
Nozzles tend to ooze filament in the following cases:
At heat up time. As the hot-end temperature nears the desired temperature, existing filament inside the head tends to expand and extrude from the nozzle.
During Auto bed leveling the hotend continues to "leak" filament.
for the printer in question the hotend will heat will sitting at X=0, Y=-60 prior to auto leveling
while going into auto level the hot-end will pass over the nozzle cleaner (it so happens to be in the path). This pass-over will remove and strings of filaments that extruded while heating.
Subsequently it will perform auto bed leveling after which I call the g12 P2 command to execute nozzle cleaning.
This is the custom g-code that is inserted prior to printing
G28 XY (home for X and Y)
M109 T0 S220; pre heat so it can drop filament prior to moving to corner bed.
G28 //Home
G29 //Auto Level
G12 P2 S3 //Clean nozzle making 3 passes around the nozzle cleaner.
start print.......
If you liked this check out my other instructables or visit my website at https://core3d.tech