This automatic nozzle wiper is designed to remove the little pieces of filament that come out of the nozzle of the MK4(S) during heating and cooling at the beginning and end of each print, so that the printer doesn't leave any residue on the printbed during bed leveling. It drops the filament between the printbed and the z-axis motor on the right. So a bin like this one will perfectly catch them.
Update 01.05.2025: I again increased the clearance to the z-bottom-right motor holder to also support thinner build plates, like the powder-coated one. If you had problems with this model during bed leveling bevore, this should solve the problem.
Disclaimer:
It is designed to be easily added to and removed from the 3D printer. No modifications to existing components are required. It is operated by moving the print head to the x-coordinates 248-250, so while it is installed, your usable bed size is effectively 2 mm smaller. If you need the whole bed size, it can be uninstalled by just removing three screws and taking it off, which takes under a minute.
Required parts:
It can be built with just the replacement parts from the MK4(S) printer kit (so not the assembled version, which doesn't come with these spare parts), a rubber band, and the PTFE tube part that is used in the filament guide of the spool holder. The rubber band can be of variable length because the design features an adjustable hook for the rubber band. Aside from the 3D-printed parts, these are all the hardware components required:
If you don't have these spare parts exactly, @ThorstenLach_1801966 mentioned some alternative parts in this comment.
All printed parts can be printed without supports in the given orientation (except the part ‘Back’ in some cases, see the comment in the next paragraph).
The printed parts are separated into three folders:
General parts: Parts in this folder are the same for both the MK4 and MK4S, so, independent of your printer model, you will have to print these.
For the part ‘Back’ there are two files that contain the same stl-file but in different orientations, you only need to print one of these:
OrientationA will require some supports to print the pin in the middle (See provided gcode if you are unsure where) but it visually matches the layer line orientation of the other parts and the layer lines are orientated to better absorb the strain created by the screws.
OrientationB doesn't require supports and prints in 10 minutes less.
Parts specific for the MK4S: Print the parts in this folder if you have an MK4S.
Parts specific for the MK4: Print the parts in this folder if you have an MK4, the parts are slightly different because the nozzle of the MK4S is about 2.5 mm further to the front than the nozzle of the MK4.
I recommend a layer height of 0.15 mm so all overhangs print smoothly and the tolerances work out as intended.
I also recommend printing the parts ‘Scoop’ and ‘Slider’ from ASA or some other heat-resistant material, and the rest can be printed from whatever you like that holds its shape, like PLA or PETG. If you print with materials that require a high temperature often or you don't have a silicon sock for the heater of your printer, printing the part ‘Arm’ in the same heat-resistant material is probably a good idea.
If you are unsure if this modification is something you like, you can also print all parts first in PLA and test them out. I printed my prototype out of PLA+, and it still holds up well after 50 cycles of printing PLA parts.
Assembly instructions:
Lay the thin metal cylinder into the groove of the ‘Arm’.
Push in the long metal pin from the side to secure the metal cylinder. The metal pin should be held in by friction against the ‘Arm’. These two metal parts will act as a bearing to redirect the rubber band.
Push the short metal pin into the ‘Slider’. This pin will be the contact surface to the ‘Lever’.
Push the PTFE tube into the ‘SliderHead’. Make sure that at least the side where the nozzle will cross the border of the tube (in the picture exactly where arrow 4 points) sits flush with the surface of the part. This is important so the nozzle gets properly wiped.
Push the ‘SliderHead’ into the ‘Slider’. This will require some force. I recommend using the edge of a table to push from below against the ‘Slider’, to guarantee it is pushed in straight. The ‘SliderHead’ also has to sit flush with the ‘Slider’, see the picture for reference.
Push the 25 mm screw into its position in the ‘Arm’. This has to be done now because it will be blocked later by the ‘Slider’.
Use the hook at the end of the ‘Slider’ to fix one end of the rubber band, then thread the rubber band through the center of the ‘Arm’ and around the bearing at the end, pulling the ‘Slider’ behind it. Using the Hex key can help with that. Make sure that when you are done, the rubber band still sits well in the hook end of the ‘Slider’. If it doesn't, you can use the hex key to push it into position.
Push the ‘Front’ into the ‘Arm’ from the top. Make sure to thread the rubber band through the respective hole.
Use a hex nut from the top and the 40 mm screw from the bottom to fix the ‘Front’ and the ‘Arm’ together.
Put the ‘Hook’ in the respective hole for your rubber band and hook the rubber band onto it. The rubber band should be only slightly tensioned in this position. If the force pulling the ‘Slider’ back is too strong, the print head will be unable to move the ‘Slider’. I recommend choosing the longest rubber band you have that is still short enough to be under slight tension when installed. This ensures that the force doesn't increase too drastically with the ‘Slider’ extending.
Put the ‘Lever’ into position. At the bottom, it should sit in the hole of the ‘Slider’, which is reinforced with the short metal pin. Push in the thick metal cylinder to secure the ‘Lever’ in place. This is also a friction fit. It might be that the hole is a little too tight, in which case you might need to use a small file or knife to slightly trim the edges. If you have trouble aligning the hole in the ‘Level’ with the metal cylinder you can use the slit on the backside of the ‘Front’ to see how the lever is currently positioned relative to the metal cylinder.
Push in the two square nuts into the ‘Back’
Push the hex nut into the ‘Back’.
Slide the ‘Back’ onto the x-axis of the printer. The rectangular pin of the ‘Back’ should slide into the rectangular hole of the x-end-idler.
Push the assembly onto the x-axis from the front. It should loosely hold in place even without the screws. Use the two 30 mm screws to secure the assembly to the ‘Back’. Don't forget to also tighten the 25 mm screw that was already in the ‘Arm’.
Push against the ‘Lever’ on top and make sure the required force isn't higher than what the print head can produce. If you roughly want to know how much force the print head can produce, just (cautiously) try moving the print head while the motors of the printer are on. If the force required to push the lever is too high, try moving the ‘Hook’ to a lower hole or use a weaker rubber band. Ideally, the rubber band has just enough strength to pull the ‘Slider’ back and hold it in its position, which is all it should do. Since the lever roughly has a ratio of 1:6, you have to keep in mind that the force on the print head is six times stronger than the force the rubber band produces. When pressing on the ‘Lever’, the ‘Slider’ should be able to move at least 15 mm outwards, and when letting go, the ‘Slider’ should fully return to its position.
Required gcode:
To make use of the nozzle wiper, I modified my start- and end-gcode so it removes the filament that oozes out of the nozzle during heat up and cool down. Since the nozzle wiper is on the right side, I also moved the purge line to the right side of the heat bed.
Start gcode:
( […] represents the lines of the default start-gcode, which I didn't modify, so you can't just copy this gcode and replace your whole start-gcode with it, but must only replace the lines starting from the “; MBL” comment! )
[...]
;
; MBL
;
M84 E ; turn off E motor
G29 P1 ; invalidate mbl & probe print area
G29 P1 X200 Y0 W50 H20 C ; probe near purge place
G29 P3.2 ; interpolate mbl probes
G29 P3.13 ; extrapolate mbl outside probe area
G29 A ; activate mbl
; prepare for purge
M104 S{first_layer_temperature[0]}
G0 Z15 F4800 ; move up
G0 X250 Y-4 F4800 ; park above wiper and ready for the purge
M109 S{first_layer_temperature[0]}
G92 E0
M569 S0 E ; set spreadcycle mode for extruder
;
; Extrude purge line
;
G92 E0 ; reset extruder position
G1 E{(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning
G1 X240 F4800 ; wipe
G0 E10 X225 Z0.2 F500 ; purge
G0 X220 E2 F500 ; purge
G0 X215 E2 F650 ; purge
G0 X210 E2 F800 ; purge
G0 X207 Z0.05 F8000 ; wipe, move close to the bed
G0 X204 Z0.2 F8000 ; wipe, move quickly away from the bed
G92 E0
M221 S100 ; set flow to 100%
End gcode:
G1 E-.8 F2100
{if layer_z < max_print_height}
G1 Z{z_offset+min(max(layer_z+10, 30), max_print_height)} F2400 ; Move print head up
{endif}
M140 S0 ; turn off heatbed
M107 ; turn off fan
{if layer_z+10 <= max_print_height} ; to ensure the wiper doesn't crash into the printed part
; wipe routine:
G1 X250 Y170 F5000 ; park above wiper
G1 E3 F500 ; extrude
G4 S3 ; wait 3 seconds
G1 E-3 F1000 ; retract
M109 T0 R{temperature[0]-30} ; wait for a bit to cool down 30 degrees
G1 X241 F5000 ; wipe
G1 X250 F5000 ; shake the wiper to get rid of potentially stuck fillament
G1 X241 F5000
{else}
G1 X241 Y170 ; park without wiping
{endif}
M104 S0 ; turn off temperature
G4 ; wait
M572 S0 ; reset PA
M593 X T2 F0 ; disable IS
M593 Y T2 F0 ; disable IS
M84 X Y E ; disable motors
; max_layer_z = [max_layer_z]
The most important thing is to keep in mind that when extending the ‘Slider’ will extend up to 7 mm into the print area, so we have to make sure it doesn't crash into the print bed or the printed part. This is why I check for ‘layer_z+10’ since the ‘Slider’ is 8 mm tall, and I add 2 mm for tolerance. The reason why I park at least 30 mm high at the end is so the oozing filament can freely hang without touching the build plate, which improves how well it is separated from the nozzle.
Some parameters you might need to change:
Because the homing of the printer doesn't create results 100% consistent for all printers, you might need to change the x-axis value 250 used to park the nozzle above the wiper to values like 249.5 or 250.5 to park the nozzle properly.
Other parameters you could change in case the wiping doesn't work or the filament drops in undesired spots are:
The amount of filament extruded before the wiping process at the end.
The temperature you cool down to before the wiping process at the end.
The speed/feedrate/acceleration at which you wipe.
The position of the nozzle before the wipe. (So not centering it above the PTFE tube, but having the nozzle start slightly closer to the left or right border of the PTFE tube.)
Since the wiping process is influenced by relatively small differences in the construction of your printer and the type of filament used, it is hard to create values that fit everyone. I tested the gcode primarily with the high-flow nozzle and PLA filament. You are welcome to leave recommendations in the comments for different values that worked for you.
Important notes:
It is very important that your nozzle is installed correctly, meaning that it is pushed as far up as it can and should be. Otherwise, the position of the wiper relative to the nozzle is wrong! You can test that after installing the wiper and moving the printhead to the right by hand to see if everything lines up correctly.
The wiper gets within 0.5 mm of the part z-bottom-right, which holds the right z-motor. So there can be nothing on top of this part, or else the wiper will crash into it. If you want to keep filament from potentially falling into the hole around the z-axis screw, you can either just put a piece of paper there or replace the pieces holding the z-motors with this modification (this will require you to partially disassemble the printer).
It often happens that the piece of filament from the wiping process at the beginning of a print stays attached to the PTFE tube. This is not a problem during the print, and the wiping process at the end should remove that piece.
Thank you to:
@wutang36 for helping me with the development for the MK4S and giving feedback on tolerances and dimensions.
@Eccomi_197509 for feedback on tolerances and dimensions, and suggestions on improved geometry.
@Justn1352_1362403 for the OrientationB of the ‘Back’ part.
@ThorstenLach_1801966 for providing some alternatives to the used hardware parts.
Without these people, the model wouldn't be what it is now, so thank you for your help.