Better Ender 5 purge bucket
thingiverse
Update 15/09/2020: If you are using the gcode mods in this writeup then DO NOT install Cura 4.7 or 4.7.1. The devs have broken dual extrusion using a single nozzle using this method. Big discussion ongoing around how to fix it but no consensus yet so no idea what Cura release will see a fix. Update 08/07/2020: I'm currently working on mods to this process that will support 4 colour printing. If you understand what is being done with the current process then it should be easy to extrapolate but for those who prefer the copy/paste approach I will detail the tweaks required and upload the files. Update 06/07/2020 (South African date format): I forgot to mention in earlier posts that you'll need to also print and implement the "raise the bed mod" for the Ender 5 for this to work. It's a great mod that gives you around 25mm extra z printing height and makes the nozzle visible instead of being hidden by the frame. Get it here: https://www.thingiverse.com/thing:3890803 ---------------------------------------------------------------------------------------------------------------------- Update 12/05/2020: The methods mentioned in here have been tested and work with Cura 4.6.1 ------------------------------------------------------------------------------------------------ Before you continue, know that there be dragons but it will be worth it. Moving right along then... ------------------------------------------------------------------------------------------------ Short Version: This is a purge bucket for an Ender 5. The other designs are all made to be mounted on the right side of the gantry which clashes with the power cable feeding the bed thereby requiring you to rotate the bed which I did not want to do because then my strain relief adapter would not work. This purge bucket mounts to the left side of the gantry and does not clash with a thing. Seems like an obvious solution so I am amazed that nobody else did it. Anyway, here it is. Print the arm and the bucket. Use a high infil for the arm (60%+) since it needs to be rigid and strong where the T-nut secures it to the gantry. I configured my print so that I used an 80% fill only where the T-nut sits and then lowered the fill to 25% for the rest of the arm. You can do this in cura by using a support blocker and then changing the purpose of the shape to be "Modify settings for overlap". When you bolt the arm to the gantry you will need to secure it tight. Therefore, if you print it laying on its side so that you don't have to use supports it will probably break when you try to bolt it. Instead I suggest to lay it upside down, with the part that secures to the gantry flat on the bed and use supports to hold the part that the bucket bolts to. Print the bucket with a reasonable infill. I'd say 30% will do. To install the arm simply follow what I did in the pictures. Make sure that the arm is as tight against the tensioner as possible and that the tensioner is pulling the belt nice and tight. If you do then the v-slot wheel will hit the arm at exactly -22.6mm on the x axis which is enough for the nozzle to reach within the bucket. Use some silicone baking sheets (or whatever other silicone you can find) to make a lip above the bucket that the nozzle just brushes against as it passes. I installed my bucket and then trimmed the sheet down until it was just right. Install some aluminium foil within the bucket. I used a layer of prestik (blu tack elsewhere) to line my bucket and give me a sticky layer that the foil would adhere to. That's it for the bucket. If you want to find out about how to configure Marlin, Cura and the tool change g-codes then continue reading. ----------------------------------------------------------------------------------------------------- Long version: I purchased a dual extruder from bigtreetech because I thought the idea of being able to print in two colours was really neat and there were a few applications that I could think of where the aesthetic would be useful. Also, I can't stand to paint prints as I consider it to be a monumental waste of time unless absolutely essential. I then found out that the purge block eats sometimes as much filament as the print for small prints. Obviously filament is precious and I was not happy about this. One of the fundamental problems with a purge block is that is HAS to be printed each layer even if you are not doing a colour change. This is really what results in the huge filament waste. This got me thinking that it must be possible to purge the filament only when there is the need to change colours. After some research I found out about purge buckets but the internet is almost devoid of the information required to take a printer from a single extruder to a dual extruder using a purge bucket. There are patches of info here and there but they often result in poor prints if you try to put them all together. After much pain I am going to use this thing to share with anyone who is interested, how to convert your printer to a dual extruder and how to make it work with a purge bucket. Let's begin with the installation. If you are using an Ender 5 then I suggest that you use my Hero Me - bigtreetech 2in1out conversion (if that is the extruder you have purchased). If you are using an ender 3 then there are other mounts out there which have been designed for the same extruder and that printer. My Mount: https://www.thingiverse.com/thing:4147104 After it has been installed you will need to update Marlin to get it to work with a dual extruder. Enter the dragons. This took me a lot of time to figure out so if this helps you then feel free to buy me a coffee :) Note that the settings to configure the drivers on your second extruder have been left out here since that is trivial and will depend on the drivers that you are using. Marlin settings: Config.h --> Uncomment #define DISTINCT_E_FACTORS --> Add an additional extruder steps/mm value as shown #define DEFAULT_AXIS_STEPS_PER_UNIT { 80, 80, 800, 432, 94} --> Do the same for the max feedrate #define DEFAULT_MAX_FEEDRATE { 500, 500, 5, 25, 25 } --> Do the same for the max accel #define DEFAULT_MAX_ACCELERATION { 500, 500, 100, 5000, 5000 } --> Invert the axis if required #define INVERT_E1_DIR true That will allow you to configure the feed rates of the two different extruders based on the type of filament that you are using with each or the type of extruder. After you have configured Marlin it would be a good time to print and install the purge bucket if you have not already done so. Once Marlin has been configured you will then have to configure your slicer. This guide focuses on Cura since that is what I use. Now the first thing to understand about Cura is that it hates you and wants you to fail in doing this (*disclaimer* Cura is actually a really good product for something that is freely developed) so if you run into a few glitches along the way, don't get frustrated. If you are running a printer that you are upgrading to a dual extruder then you probably want to keep the profiles that Cura already has for that printer since they have been finely tuned to print really well. Unfortunately Cura most likely will not just let you set that printer to have 2 extruders in the machine options menu. Not to worry, you will be able to convince Cura to allow you but it will take some fiddling in the file system. Before you do this make sure that you have saved your profiles and any specific start and end Gcode that you are using on your printer because when you are done Cura is going to see your old, single extruder printer as corrupted. If you are on macos right click on the cura application in the applications folder. Navigate to Contents --> Resources --> resources Windows users will have a similar file system. Within there are two folders of interest; extruders and definitions. Within the definitions folder find the base json file for your printer. For Creality machines that is creality_base.def.json. Change the machine_extruder_trains section to read as follows: "machine_extruder_trains": { "0": "creality_base_extruder_0", "1": "creality_base_extruder_1" }, Alternately, you can just use the json I have uploaded which is valid for Cura 4.5. Save and exit. Then go into the extruders section. Here you will need to edit the creality_base_extruder_0.def.json file. Mine reads as follows and is attached for reference. { "version": 2, "name": "Extruder 1", "inherits": "fdmextruder", "metadata": { "machine": "creality_base", "position": "0" }, "overrides": { "extruder_nr": { "default_value": 0, "maximum_value": "1" }, "machine_nozzle_size": { "default_value": 0.4 }, "material_diameter": { "default_value": 1.75 } } } Copy this file once you have edited it and paste the copy into the same folder, renaming it creality_base_extruder_1.def.json. Edit that file to have the following contents: { "version": 2, "name": "Extruder 2", "inherits": "fdmextruder", "metadata": { "machine": "creality_base", "position": "1" }, "overrides": { "extruder_nr": { "default_value": 1, "maximum_value": "1" }, "machine_nozzle_size": { "default_value": 0.4 }, "material_diameter": { "default_value": 1.75 } } } You are now ready to go back into Cura and set up your machine. When you go back into Cura it will set itself up as it did after you installed it for the first time and your old, single extruder Creality printer will no longer work. You will now be able to add a dual extruder Creality printer which uses all of the nice profiles that work so well. Create that machine and go into the machine settings to enter custom start and end g-code. Note that you must use this start and end g-code for dual colour printing to work. It has been written for ABL but if you don't use ABL then just remove the G29. Two versions of the start code are shown below. The first version uses Lin Advance on E0 but no Lin Adv for E1. The second version uses no Lin Adv at all. ; Ender 5 Custom Start G-code M117 Getting the bed up to temp! M140 S{material_bed_temperature_layer_0} ; Set Heat Bed temperature M190 S{material_bed_temperature_layer_0} ; Wait for Heat Bed temperature M117 Pre-heating the extruder! M104 S160; start warming extruder to 160 G28 ; Home all axes M117 Auto bed-level GO! G29 ; Auto bed-level (BL-Touch) G92 E0 ; Reset Extruder M117 Getting the extruder up to temp! M104 S{material_print_temperature_layer_0} ; Set Extruder temperature MOO S{material_print_temperature_layer_0} ; Wait for Extruder temperature G1 Z1.0 F3000 ; move z up little to prevent scratching of surface G1 X0.1 Y20 Z0.3 F5000.0 ; move to start-line position M900 K0.21 L0.21 T0 M900 T0 S0 M900 K0 L0 T1 M900 T1 S0 M117 LET THE PURGE BEGIN! G1 X0.1 Y200.0 Z0.3 F1500.0 E15 ; draw 1st line G1 X0.4 Y200.0 Z0.3 F5000.0 ; move to side a little G1 X0.4 Y20 Z0.3 F1500.0 E30 ; draw 2nd line G92 E0 ; reset extruder G1 Z1.0 F3000 ; move z up little to prevent scratching of surface M117 Time to matter-hack! ///////Second version ; Ender 5 Custom Start G-code M117 Getting the bed up to temp! M140 S{material_bed_temperature_layer_0} ; Set Heat Bed temperature M190 S{material_bed_temperature_layer_0} ; Wait for Heat Bed temperature M117 Pre-heating the extruder! M104 S160; start warming extruder to 160 G28 ; Home all axes M117 Auto bed-level GO! G29 ; Auto bed-level (BL-Touch) G92 E0 ; Reset Extruder M117 Getting the extruder up to temp! M104 S{material_print_temperature_layer_0} ; Set Extruder temperature MOO S{material_print_temperature_layer_0} ; Wait for Extruder temperature G1 Z1.0 F3000 ; move z up little to prevent scratching of surface G1 X0.1 Y20 Z0.3 F5000.0 ; move to start-line position M117 LET THE PURGE BEGIN! G1 X0.1 Y200.0 Z0.3 F1500.0 E15 ; draw 1st line G1 X0.4 Y200.0 Z0.3 F5000.0 ; move to side a little G1 X0.4 Y20 Z0.3 F1500.0 E30 ; draw 2nd line G92 E0 ; reset extruder G1 Z1.0 F3000 ; move z up little to prevent scratching of surface M117 Time to matter-hack! ;ENDER 5 END CODE G91 ;Relative positioning G1 E-2 F2700 ;Retract a bit G1 E-2 Z0.2 F2400 ;Retract and raise Z G1 X5 Y5 F3000 ;Wipe out G1 Z10 ;Raise Z more G90 ;Absolute positionning G1 X0 Y0 ;Present print M106 S0 ;Turn-off fan M104 S0 ;Turn-off hotend M140 S0 ;Turn-off bed M84 X Y E ;Disable all steppers but Z Now on to the custom start and end extruder g-code. This is where the secret sauce is. Set them to exactly what you see here. ;EXTRUDER1 END G-CODE G92 E0 ; Reset extrusion distance G1 E-5 F1500; Retract 5 mm M211 S0 ; Turn off soft stops. G1 X-22.4 F6000 ; Go to X=-22.4 at 100 mm/sec G92 E0 G1 E-25 F2500; Retract 30 mm (5mm originally +25mm now) M211 S1 ; Turn on soft stops. ;EXTRUDER2 START G-CODE G92 E0 ; Reset extrusion distance on new tool G1 E60 F90 ; Extrude 60 mm of filament at 1.5 mm/s on new tool. Only extrudes 30mm since 30mm is to make up for the retract G92 E0 ; Set current extruder position to 0mm G0 F9000 ; Increase feed rate before next travel. Sometimes Cura overrides this and the nozzle goes back to the bed very slowly but it's still better to include. ;EXTRUDER2 END G-CODE G92 E0 ; Reset extrusion distance G1 E-5 F2500; Retract 5 mm M211 S0 ;Soft stops off G1 X-22.4 F6000 ;Go to X=-22.4 at 100 mm/sec M211 S1 G92 E0 G1 E-25 F5000; Retract 30 mm total (5 + 25) ;Switch to tool 0 T0 G92 E0 ; Reset extrusion distance on new tool G1 E60 F90 ; Extrude 60 mm of filament at 1.5 mm/s on new tool G92 E0 ; Set current extruder position to 0mm G0 F9000 ; Increase feed rate before next travel. If anyone is interested in exactly why those g-codes are the way they are I will be happy to explain but know that if you try to put anything in the extruder 1 start code you will have issues at the start of your print. You have to put the E1 start code tacked on to the end of the E2 end g-code. Also if you are using another printer just change the x position in the g-code to match the location of your bucket. Almost there... Next up are the cura profiles and these are REALLY important. A few things to note here: 1.) We are doing all of the filament change retraction in the start and end g-code so there is no need to tell cura to do it. 2.) We do not want cura to do any purging or really ANYTHING at all during a filament change because it is all taken care of in the start and end g-code. 3.) Cura has no idea that we are going to be travelling all the way to a purge bucket and back to the print between colour changes. It will therefore prevent retraction on return from the purge bucket if the distance between the two colours being printed on that layer is less than the retraction minimum travel. To prevent this we are going to have to set the retraction minimum travel to 0. You will need to change the following settings with each extruder: - Wherever there is a choice of extruders (except for the skirt) set it to "not overridden". - Make sure that your wall, shell, height, etc settings are the same for both extruders. Remember that this is one physical hot end. - Set your material temperatures to the same temperature for both extruders. This is a limitation of this method. It means that you will need to use similar filaments. You can try to set them differently but it will likely result in degraded performance since there is no time to wait for the nozzle to reach the desired temperature before resuming printing as this results in underextrusion. If you insist on setting them to different temperatures then try to keep them as close as possible. If you set them far apart then please leave a comment and let me know how it goes. - Set your retraction minimum travel to 0.1 This will result in your extruder working hard and the print taking a little longer but it will save stringing from the purge bucket. - Set your z-hop after extruder switch height to 0. This will reduce stringing. If you find that the nozzle hits the print a lot during switches then set it to 0.2. - Disable the prime tower under dual extrusion. - Disable the ooze shield. - Set the nozzle switch retraction distance to 0. This is already done in the custom g-code. - Set the retraction speed to 1. - Set the nozzle switch extra prime amount to 0. The final part of the process involves convincing Cura not to pause your print each time that the filament changes while it waits for the hotend to come up to temp. This causes massive under extrusion. In Cura go to extensions --> Post processing --> Modify g-code. - Add a search and replace script with search = M109 and replace = M104. - Add a second search and replace script with search = MOO and replace = M109. Note that that is the letter O and not the number 0. The order of the above scripts is very important. Add them in the order I list them. When you are printing the part cooling fans seem to turn off as soon as the second extruder kicks in regardless of what the level is set to in Cura. I am guessing that this is a Marlin bug and I cannot find anywhere to adjust a setting that would keep them on. If anyone knows then please feel free to comment. A workaround is to wait for the second extruder to be used and then manually turn the fan on to the percentage that you want. It will remain on for the second extruder throughout the print. That's it. You should now be able to print in dual colour with a purge bucket and get the same or better results than if you used a prime tower.
With this file you will be able to print Better Ender 5 purge bucket with your 3D printer. Click on the button and save the file on your computer to work, edit or customize your design. You can also find more 3D designs for printers on Better Ender 5 purge bucket.