17 August 2020

PROJECT: MMU2S & Filament Diameter Irregularities

This is a follow up to my previous post, Prusa i3 MK3S + MMU2S

Here I describe how I modified the printer firmware (FW) to better handle filament diameter irregularities. The FW I produce is 3.9.0-ANT, which is a slight modification of the vanilla Prusa i3 MK3S 3.9.0 FW. Also you can get the compiled .hex file here: 

FW390-ANT-Build3421-1_75mm_MK3S-EINSy10a-E3Dv6full.hex

FW393-ANT-Build3556-1_75mm_MK3S-EINSy10a-E3Dv6full.hex


The Problem

Turns out that printing with lighter colour filaments can be a pain in the butt on the MMU2S, as (for me at least) lighter colours are more likely to make "double up" tips during unload. These create a diameter irregularity which if bad enough will cause load issues, as the IR sensor (at extruder) will get confused by the sudden "lack" of filament


The Solution

After creating an issue/suggestion on the Prusa GitHub (issue #2797) I got to work trying to modify the printer FW to be more resilient against such anomalies

Initially I had some trouble getting the build environment up and running, as for the vanilla 3.9.0 FW my .hex file was vastly different to what Prusa produced. But after some help from 3d-gussner we were able to figure out that Prusa's compile instructions for Linux OS were a bit outdated, as I should have been compiling with "./PF-build.sh" and not "./build.sh" like the instructions said ;^)

With all that said, let me introduce my first custom 3D printer FW 3.9.0-ANT. As mentioned before this guy is much more resilient to filament diameter anomalies, and with one tool change heavy job managed to reduce the load errors from 10 to 0! 


More Info

Luckily making 3.9.0-ANT FW was quite easy, and only required me to change a single number

In "mmu.cpp" there exists a function called "can_load()", this function is called whenever the printer is asked to load filament. During a load the counter "filament_detected_count" is incremented whenever the IR sensor detects that filament is present, and when a load is finalised the counter is compared against a threshold to see if the load was successful

As of 3.9.0 this threshold value is 26 ((6.0 / 0.2) - 4), meaning the IR sensor must see 26 positive instances for the load to be considered successful

Well with my 3.9.0-ANT FW I lower the threshold from 26 ((6.0 / 0.2) - 4) to 5 ((6.0 / 0.2) - 25), by changing:

if (filament_detected_count > steps - 4)

to

if (filament_detected_count > steps - 25)

26 July 2020

PROJECT: Just How Multi-Material Is The MMU2S?

TL;DR: The "Multi-Material Upgrade" should really be called the "Multi-Colour Upgrade", as printing with different materials requires crazy amounts of purging (>2500mm³) between swaps. If you want true multi-material capability then you need a printer with at least two separate hotends

Following on from my previous post on the MMU2S, I decided to test out just how multi-material it actually is. I did this by printing some PLA & PETG samples, and testing their layer adhesion strength. The reason for this somewhat strange combo is that both PLA & PETG stick reasonably well to each other when being printed, however once the part cools the two plastics are easy to separate. Making them an ideal combo to print 0mm interface supports 


The Setup

Filament used for tests:

Believe it or not but the stock PrusaSlicer (as of v2.2.0) does not have the capability to smoothly transition between different material temperatures. For example, say you want to print PLA at 200°C and PETG at 225°C. With the stock slicer when you change from: 
  • PLA → PETG, the PLA will be unloaded at 225°C, leading to stringy tips
  • PETG → PLA, the old PETG will be purged at 200°C, making it impossible to purge old material
To get around this I recommend using PrusaSlicer 2.2.0 DRIBBLING by antimix, as it allows you to control the load/unload temperature
UPDATE: Kayl from the Prusa forum has released PrusaSlicer 2.3.0 DRIBBLING

Below is how the 10 samples were configured in PrusaSlicer, as well as what they looked like when printed:


Finally, to test the layer adhesion strength I made up a simple three-point bending flexural test jig:


The Results

Before we get to the data, I need to first raise a few points:
  1. For the single material layer strength (Single Mode) I manually purged ~2500mm³ of PLA/PETG before starting the print by feeding ~1m of filament though the hotend. This will be considered as the maximum possible layer adhesion strength for each material
  2. The 500mm³ Purge has two data points, one for a purge temperature of 235°C and the other for 260°C. As you would expect purging old PETG at 260°C (loading PLA) helps with PLA layer strength as it's easier for the old PETG to exit the hotend. Interestingly purging old PLA at 260°C (loading PETG) has the opposite effect, I suspect this is due to old PLA carbonising in the hotend
  3. To get the break weight of each sample I recorded the scales display at 1080p 60fps and then played the video back at half speed on my PC
  4. The largest purge volume I did when using the MMU2S is 1250mm³. I decided to stop things here and extrapolate the data I had with an exponential relationship 
  5. Lastly, you might say that PETG is quite a "sticky" material and that it's difficult to fully purge it from the hotend. Turns out that same is true for PLA (and I suspect other materials), as in both cases you need crazy purge volumes (>2500mm³) to fully clear the hotend
With that out of the way, here is all the data I collected:



Outcome & Tips

Basically there is no easy way out when printing different materials on the MMU2S. You need to purge at least 2500mm³ if you want to have any chance of removing the old material (same is true for both PLA & PETG). Turns out the same holds true in the injection moulding world, "General-purpose nozzles have a dead spot in the nose and take about 50 shots to purge clean"

To give you an idea, here is how a 2500mm³ block looks like in PrusaSlicer:


With all that said, if you do decide to use the MMU2S for multi-material prints then I highly recommend getting an E3D v6 Pro Sock. As earlier on I found that swapping between PLA/PETG creates little beads which if left for long enough merge and grow in size, eventually making a big blob on the nozzle that knocks anything in it's path. Swapping the normal silicone sock to the Pro solved this for me:

So looks like I won't be having 0mm interface supports with my Half-Life 2 AR2 project D:

04 July 2020

PROJECT: Prusa i3 MK3S + MMU2S

So... a couple of months ago we got the MMU2S (multi-material) upgrade for our Prusa i3 MK3S, and boy oh boy has it been a wild ride trying to get the thing calibrated... 
The process reminded me of our old Prusa i3v, as it too required a bit of work to get a print up and running, which in the end you still had to keep an eye on to make sure everything was ok

Calibration Troubles

As you might have guessed, the MMU2S did not work out of the box for us. This was mostly due to stringy tips during unloading, which eventually lead to load blockages
I tried numerous things to improve the tip shape, from adjusting the number cooling moves/unload speed/printing temperature, to varying the unload temperature using a Python script. Sadly, none of this helped as much as changing to PrusaSlicer 2.2.0 DRIBBLING by antimix. Which is a custom slicer that adds a "dribbling" motion (think basketball) during the unload

Here is a snapshot of the 30 tests I did trying to improve the tip shape:
Default PrusaSlicer Settings (with & with out the Python script)

HCD profile (with & with out the Python script)


Reliability Mods

I soon found that using a custom slicer was not enough, as I constantly ran into unload issues even when the tips were nice and pointy. The culprit turned out to be the PTFE tube running from the MMU2S to the extruder, which had too small an inner diameter (2mm ID) for the tips to travel freely
Why? Well it turns out that the PTFE tube inside the hotend (different to the one above) expands over time, and this tube also controls the tip diameter (think molten tips being squished into a cylinder). This results in the unloaded tips being 2-2.5mm in diameter which believe it or not have trouble fitting through a 2mm hole ;^)

With that said, here is a list of mods I installed to improve reliably:
  1. Stock (2mm ID) PTFE tubes replaced with 3mm ID PTFE tubes. Left the 5 coming out of MMU2S as stock 2mm ID (to make sure filament does not "fall out" during unload), but did cut them down so that ~5mm sticks out (see below)
  2. Stock MMU2S selector replaced with magnet variant
  3. Chamfered inner edge of Festo fitting (PTFE holder) at extruder to help with flat tips
  4. Replaced stock filament buffer with "gravity assisted buffer" (using M16 nuts as weights). I found that the stock buffer & long PTFE tubes added too much resistance to filament movement, which made printing finer details that much harder (as in areas where small amounts of plastic was meant to be deposited were nearly cavities)
  5. UPDATE: Printer firmware changed from 3.9.0 to 3.9.0-ANT


Printing Profile

After heaps (o_o) of tests here is what I settled on:
NOTE: This is for single-material (PLA) printing
  1. PrusaSlicer 2.2.0 DRIBBLING kby antimix
  2. Dribbling temperature -5/10°C of normal print temperature. For example, if your printing temperature is 200°C then I would suggest setting the dribbling temperature to 195/190°C
  3. Minimum temperature same as dribbling temperature
  4. Maximum temperature same as printing temperature
  5. Number of dribbling moves to 3
  6. Purge volume at 250mm³

The Outcome

Our first successful print!!!
  • Smiling owl by cipis
  • 5 colours
  • 448 tool changes with only 2 issues requiring intervention:
    • Once due to filament debris from previous print
    • Other due to bad tip with glow in the dark filament (load error)
 

20 June 2020

UPDATE: Kobo N647 Replacement Button Cover


Wife has a Kobo N647 which is still going strong, but recently the rubber button cover has began to disintegrate. So I designed a replacement in SolidWorks and 3D printed it with out Prusa i3 MK3S + MMU2S

This was my first successful "soluble support" MMU2S print, where the body was printed in PETG while the "soluble supports" were PLA. If you have not heard of using PLA/PETG like this, well it turns out that the two adhere reasonably well to each other when printing, and once the model is printed and cooled the two are easy enough to separate. Hence why you can use one with the other to make a "soluble" interface 

As always, you can find all files here

17 May 2020

UPDATE: New Etsy Items

My Etsy store has grown a bit :D

3D Printed Muji Gel-Ink Pen Holder

I have been wanting reusable pens for quite some time and a few of weeks ago managed to get some decent fine tip gel pens from Muji. To keep these organised I designed a compact vertical case that the pens "clip" into like so:

Also here are some fancy renders from SolidWorks Visualize. These were rendered in 2018 SP5 using "glass fiber" as the material to mimic the clear PETG look:

3D Printed Christmas Tree

This model was on my backlog for ages, and now it has finally materialised:

09 May 2020

PROJECT: Half-Life 2 AR2, Update #4 - Receiver & Barrel Test

LINK TO PREVIOUS POST

Exciting news, I have combined the receiver & barrel assemblies to get a better idea of how things will be functioning together :D


Currently the whole thing is controlled by 3 Arduino Nano's. This may sounds a bit overkill but doing so allows me to run time sensitive modules in parallel, which is a must for the animation sequences
Also, since the previous update the firing/cycling rate has increased to ~5Hz thanks to a stiffer spring. I can push it further but I would need to increase the PWM duty cycle, which would make the coil run hotter (think higher average current). This is something I am a bit cautions about as the body is printed in PLA which has a low glass transition temperature (~65°C)
I guess if I don't manage to reach 9Hz then we can call this the AR1.5 prototype ;^)


Couple of closing notes:
  1. I plan to print the final model in PETG which has a higher glass transition temperature (~80°C), so will have the option to push more current through the coil
  2. I want to try using a couple of sensors to get the firing pin position, this way I won't be purely reliant on PWM as I could simply switch the coil off once the firing pin has reached the end

30 April 2020

PROJECT: Half-Life 2 AR2, Update #3 - The Waiting Game

LINK TO PREVIOUS POST

Progress has been quite slow thanks to the hectic period we are in (I'm looking at you COVID19). You would think that working from home would give me more time to work on projects, but being stuck inside for a big portion of the day is quite mentally draining....

But getting back to progress, initial tests of the firing pin assembly were quite positive, I could get reliable cycling up to 3Hz (in the game the AR2 cycles at ~9Hz). The big limiter here is the return motion, which can be improved by using a stiffer spring. However if the spring is too stiff then the forward motion will be negatively impacted. So now I am waiting for a bunch of springs to try out

To keep myself occupied I have started working on the magazine assembly. So far I have defined the area that will house all the electronics (batteries, servo, control board...), and am now figuring out the shell movement (from magazine to barrel). Here is how the AR2 is looking so far:

Also, if you have not seen my previous post I have decided to get the multi material upgrade (MMU2S) for my 3D printer (Prusa i3 MK3S). I envision this being crazy useful as it will enable me to print soluble supports, which will make printing awkward shapes (basically everywhere on AR2) much easier

UPDATE: It didn't ;^)