3D Printer Circular Nozzle Cleaner

Introduction: 3D Printer Circular Nozzle Cleaner

About: Avid 3D printer builder, currently completing my 3rd printer design. If you like what you see and maybe even implement what provide, consider supporting subscribing to my youtube channel https://www.youtube.co…

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

Be the First to Share


    • Make it Glow Contest

      Make it Glow Contest
    • Cold Challenge

      Cold Challenge
    • Game Design: Student Design Challenge

      Game Design: Student Design Challenge