5 colour printing with a “purge bucket”

At the risk of stating the obvious, when changing from one filament to another with a mixing hot end, it is necessary to purge out the old filament before using the new one. This post is about the latest tool that I have added to my collection of methods to deal with this purging.

Actually, it’s not strictly true that purging is necessary. A better description would be to say that it is necessary to purge out the old filament if it will be visible.  That is because, depending on the object being printed, it may be possible to purge the filament by simply printing infill or some other part of the object that cannot be seen. This the method that I used to produce this vase as a demonstration object for the TCT show.



Essentially, the vase has 3 perimeters but no other infill. The colour change happens at layer change and the inner perimeter is printed before the outer ones. So the purge of the old filament is hidden between the inner and outer perimeters which are the correct colour.

Another technique is to move the tool (colour) change point forward in the code file. I covered this in an earlier post ( Multi colour printing without using wipe or prime towers )so won’t go into it again here. This can work reasonably well depending on a couple of things. For PETG, it works quite well but not so well for PLA. The issue here is that PLA will hydrolyse. That is to say, it will become less and less viscous (more and more runny) over time. The technique was quite successful if the filament was not held at print temperature for too long as I was able to demonstrate when I printed this Printing a union flag without purging.

The trouble with the 5 colour Diamond is that by it’s very nature every filament stays at print temperature for longer than the 3 colour version (roughly 5/3 times longer), so there is more time PLA to hydrolyse. So when I printed this for the TCT show ……


…..I used a mechanism whereby at every colour change, the print head moved to the rear of the bed and essentially “drew a line” of filament.

That works well but there is just one small problem which is that it relies on there being colour changes on every layer. So for example if the first few layers had no colour changes, then the bed would be some distance below the nozzle when it came time to draw the first line.

Which brings me to the latest addition to me armoury. This is essentially a variation of the above technique but instead of drawing a line of filament, it simply extrudes into a “bucket”.

The first thing I had to do was to move the bed forward so that there was a point where the nozzle has free space beneath it. This did mean losing a bit of travel in “Y” but I had recently gained some extra travel by re-designing the idler mounts, so it was no great loss and I still have around 355 mm of useable print length in Y.

Then I designed and printed the MK1 bucket which is shown below.


The white strip is silicone rubber, 10mm x 3mm. It sits in a groove in the printed bucket which is 3.1mm wide by 7mm deep so 3mm of the silicone rubber strip sits above the bucket. The assembly is fixed to the frame on two slotted brackets which allow it to be moved up and down so that it can be positioned such that the nozzle is just below the top of the silicone strip and will therefore get wiped as it passes over it.

For movement and filament extrusion I could have used the tool change macros to achieve what I wanted to do. The trouble with that is, because this is just one technique which would only be used on certain objects, I would have to alter or some how disable the tool change macros for other objects. So I decided to embed the necessary commands directly into the gcode file. To semi automate this, I wrote a little Python script which essentially searches for a “Tn” command, then inserts the necessary gcode commands immediately after. I’m still experimenting but here is what it currently looks like for Tool 0 which should be self explanatory. It should be noted that I use firmware retraction so if other readers want to try this, they may need to replace the G10 and G11 commands with whatever “E” moves they normally use to retract filament.

G10; retract
G1 X50 Y364 F21000; move quickly to rear of bed and X=50
G11; un-retrcat
G1 E20 F300; extrude 20mm of filament at 5mm/sec
G10; retract
G1 X70 Y352 F1000 ; move slowly forward past the rubber strip and 20mm to the right
G1 X90 Y364 F1000; move slowly backwards and right another 20mm
G1 R2 X0 Y0 Z0 F21000; move quickly to whence the print head was at the T0 command.

I use Slic3R which always inserts a G10 retract before doing a tool change so the first G10 above isn’t necessary. However, I’ve put it in because I may at some time in the future, use some other slicer which might behave differently. Duet firmware won’t act on a second retract command without an intermediate un-retract command so it does no harm. There is also an un-retract command (G11) before extruding filament which may seem unnecessary but I want to retract after extruding to prevent the filament from oozing, so there has to be a preceding un-retract for that to happen.

The other tool purges are similar but I change the “E” amount for each filament so for tool 4 which usually has White filament I use 40mm instead of 20mm that I use for Black filament. I’m still experimenting with values to find the minimum that works best. Also, each tool moves to a different position in X to spread the purged filament across the bucket. Tool 1 goes to X=100, tool 2 to X=150, etc.

The first initial tests were promising but mistake number one was that extruded filament did like to stick to the bucket – it being made of the same material. This was easily fixed by coating the surfaces of the bucket with silicone grease. Being careful not to get silicone grease on the rubber of course. (I suspect that wiping a nozzle with grease which would then get transferred to the filament wouldn’t be the best thing to do).

The next thing that happened was that previously extruded filament was getting picked up out of the bucket and dumped on the part being printed, basically because the bucket was too shallow. So I came with “bucket MK2” which is shown below.


As you can see, it isn’t a bucket at all as it has no bottom. This allows the filament to fall right through so that it can’t get picked up by the next pass of the nozzle. However, I didn’t want the filament simply dropping to the base of the printer where it could potentially get tangled up in the Z belt, so I recycled the original bucket which now resides on a couple of brackets attached to the bed frame.

I don’t have a picture of that but I guess now would be good time to point readers to the YouTube video that I’ve made which shows it all in action. I used the same “Flags” file that I printed before but this technique is really for objects that may not have any colour changes for several layers. It isn’t the best quality print because this one really benefits from having pressure advance and I had forgotten to enable it, but as a demonstration of using using a purge bucket, it serves it’s purpose.

5 colour PLA printing with a purge bucket



5 thoughts on “5 colour printing with a “purge bucket”

  1. Very nice work Ian, thank you for saving me all this time and experimentation with the 5 way diamond! And your printer is awesome!
    I noticed you exposed the issue with the filament not actually mixing in the diamond hot end. We all need to overcome this issue in an open source manner to make color prints. No-one is disclosing how to do it yet and it’s not rocket science. It is just very delicate work to fix that in the diamond and I am gearing up to solve that problem… Of course gearing up with chinese goods means 4 weeks wait time starting 3 days ago 🙂
    I plan to do the following on a spare 3-way diamond and later the 5-way, hope somebody can find the issues that I did not foresee here:
    1. drill 0.4mm from the diamond tip backwards into the heater cartridge hole, this way we are exposing the straight line path from top to the tip
    2. drill 0.5mm from the top down towards the tip, enlarging the 0.4mm hole from step 1 above, but stop 1mm above the tip (do not drill through). The result will be a 0.4mm extruder tip with 0.5mm hole above it. Hope we can deburr the internals of the diamond after all the drilling
    3. insert a 0.5mm drill bit from the top hole and use it as auger/mixer for the filament. Perhaps place the drill tip 0.5mm above the end of the 0.5mm hole, that would be 1.5mm above the tip of the extruder. prepare to spin this drill backwards so it pushes and mixes filament down and out the tip
    4. grab the 0.5mm drill bit at the top, perhaps partially inside the heater cartridge hole (or enlarge that hole as needed and might need to find a long drill bit) with a 0.5mm collet chuck which can accept a 2.35mm shaft behind it. Enlarge the shaft hole to 3+mm to match motor below
    5. find a matching BLDC motor and prepare some electronics to spin it 🙂 I selected a 2212 1000KV motor to try because of the shaft size. Need an ESC to drive it and perhaps we will need very low speed so it might have to be reprogrammed as a gimbal ESC and buy a gimbal motor instead but i’ll figure that later
    6. make some more tiny (2mm?) threaded holes on the diamond to mount the motor, assuming there is some solid metal left on the top between the heat sinks, the motor should be centered and high enough so it does not interfere with the heat sinks and the air flow so we will have to extend the shaft… Perhaps best plan is to thread the heater cartridge and make a tube that holds the motor but we need to clear the chuck too… i’ll figure that out on the CAD, I use inventor to figure how things can possibly fit.
    7. for heating, coat the outside of the diamond with thin hi-temp silicone, cure it, wind nichrome around it down the conical path, perhaps coat with silicone again and come back up so you end up with two layers of nichrome and cover it all with 3-4mm of silicone to insulate. make sure nichrome wire does not touch itself or any other metal 🙂 At 24volts we need 17 inches wound to accomplish 300C with 38gauge wire, only 10 watts and it will run more of the time but maybe enough because of less loss from the face of the diamond??

    What we end up with is a mixing diamond hot end that can suck the hot filament and push it out the tip using the auger drill bit and the motor. Will have to figure what issues remain with mounting clearances, oozing at the tip (probably minimal cause of the auger partially blocking the passages when its not spinning, leaking at the top (probably not because of negative pressure but will need some plastic for lubrication), spinning speed of the motor, the need to reverse the motor if we are retracting (maybe no need?), perhaps the need to sync the motor speed to the filament rate, what else?

    With all this machining work might as design and make my own hot end, I would start with a real brass cylinder, I would make the bottom shaped like a polished ball so it glides over any plastic bumps better, add a fine thread on the outside for the heater wire to wind into, increase the filament angle and make more than 5 threaded holes on top (maybe 9? i’ll check color models but perhaps we can also mix in clear flexible material to make any-color-flex) that can accept 4mm threaded PTFE tubes, water cool everything right above it with a molded silicone contraption and provide mount for the auger motor. I don’t see the need for the metal heat breaks and all those heat sinks when we can water cool the whole thing for cheap…


    1. Hi Bill,

      I fully agree that true mixing has to be the next step forward and it’s something that I’ve been thinking long and hard about for quite some time. I have plenty of ideas but lack the machining facilities (and funds). TBH, I think that the Diamond is the shape it is because it was designed to take “conventional” off the shelf heat sinks and so minimise development and tooling costs. This approach necessarily leads to compromises. As well as the fact that filament comes out like stripey toothpaste, the other big drawback that I see with the Diamond is that the nozzle is fixed. If you want a bigger size, you have to change the entire assembly (I have 3 complete assemblies that I swap between and it ain’t cheep). For similar reasons, I dare not try some of the more exotic filaments which may be abrasive, because to replace the nozzle means buying a whole new brass part and go through the complete dis-assembly re-assembly routine. So IMO, a mixing hot end also needs replaceable nozzles. One could chop the bottom off a diamond and use the top part to feed the filaments into a new mixing chamber which itself is threaded to take replaceable nozzles. That still leaves the issues with heat sinks sticking out at 20 degrees and the need for a very high flow rate fan. So I think the best approach would be to abandon the Diamond shape altogether and make a new block with a custom heat sink which could be air cooled or water cooled. I have to say that I favour the latter because I believe it could be much more compact and it would certainly be a lot quieter.

      As for the mixing mechanism itself, it gets tricky because the molten filament is a highly viscous non-Newtonian fluid. Simply stirring it is not likely to give a homogeneous mixture without the introduction of some degree of chaotic movement.

      Anyway, I wish you the very best of luck and please keep me posted with your developments.



  2. Hi Ian,
    Great work, thank you for that.
    I’m going to trie to implement it for my 3-color switching hotend. It might also be the trigger to revive my Diamond hotend wich got lost somewhere in a corner.
    Would it be posible to share your Pyhon script?
    Regards, and keep up the good work.


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s