PROJECT: Prusa i3 MK3S Extruder Heatsink

It may come as a surprise but some 3D printer extruder stepper motors tend to run quite hot, like +25°C above ambient hot. This is not too bad when your ambient/room temp is ~20°C, but boy do the summers in Australia get toasty... and if things get toasty enough the heat can creep through the shaft/driver gears and warm up the filament surface, making it that much harder to feed in controllably

Now as far as I am aware I have not run into this issue with my Prusa i3 MK3S + MMU2S, however I was curious to see:

  1. What is the typical temperature rise of the extruder stepper motor
  2. If installing a passive (no fans) heatsink could help lower the above temperature

The Setup

I tested the extruder stepper motor of my Prusa i3 MK3S under 3 scenarios:
  1. Original (no heatsink)
  2. Dense fin pattern heatsink (ATS-FPX040040025-05-C1-R0)
    • Single fin dimensions are 0.8 x 8.5 x 22.2mm and there are 50 of them
    • Weight 29.6g
    • Thermal resistance 8.7°C/W (unducted flow)
  3. Light fin pattern heatsink (ATS-CPX040040025-116-C1-R0)
    • Single fin dimensions are 0.9 x 8.5 x 22.2mm and there are 32 of them
    • Weight 21.4g
    • Thermal resistance 4.1°C/W (unducted flow)
    • Suspect this will be the winner due to the spread fins 

In each case I logged the stepper motor & room temperature, from which the temperature rise (above ambient) value was calculated. I should point out that comparing the Δ/change in temperature is more suitable here instead of say comparing the absolute peak temperature in each scenario 

Also to make sure I was testing the heatsink performance (and not how well it coupled to the stepper motor) I used a crazy high thermal conductivity pad. The EYG-A091202DM, which is graphite based and has a thermal conductivity of 1850W/m·K! (two orders of magnitude higher than your typical thermal pad)
NOTE: To mount the heatsinks I had to change the M3 screws from 30mm to 35mm

Finally, for those curious this is the model I was printing for the test:

The Results

As I suspected the lighter fin pattern heatsink (ATS-CPX040040025-116-C1-R0) gave the lowest temperature rise, reducing it by a cool 7°C compared to no heatsink

On paper this may sound surprising, as this heatsink has a lower thermal resistance (4.1°C/W vs 8.7°C/W) which in theory should mean worse performance. BUT what one must realise is that we are extracting/exchanging the heat from the heatsink via convection currents (not forced air flow), and in this case it's easier for the air to couple into a less dense fin pattern


PROJECT: Half-Life 2 AR2, Update #7 - Receiver Progress


With this update I though I would show what a typical evenings worth of SOLIDWORKS looks like, and what better way to do it than a cool timelapse video: 

Here I am working on the AR2 "Receiver", the part that hold all things relevant to the "firing pin" as well as trigger. In the video you see me fix up small issues (like unexpected collisions), as well as figure out how each part will fit and fasten together

Once that stage is complete then plan is to then figure out how on earth I am going to find the space to fit all the extra components/electronics...


PROJECT: Half-Life 2 AR2, Update #6 - Now with Sound


Quick update... I have the sound part of the AR2 prototype working :D

To give you a quick rundown. Initially I went with a VS1000 based dev-board but soon found that this chipset does not support polyphonic playback, as in a sound must finish playing before another can be played. Well this is where the WAV Trigger (a crazy flexible WAV player designed by Jamie Robertson) comes in, as this STM32 based dev-board allows you to play up to 14 tracks at the same time! Which is perfect for blending the firing/reloading sounds the AR2 makes 

Also with the current prototype I am using a Class AB amplifier to drive a 4Ω 3W speaker. I did have a quick play around with a Class D amplifier, but found that it slightly distorted the firing sound

With all that said, the next step is to fix up the 3D model (note all the black marker markers...) and start thinking about combining all these dev-boards into one (as in put my Altium hat on)


PROJECT: Half-Life 2 AR2, Update #5 - The Prototype


The Rundown

After burning a few months getting the MMU2S up and running, figuring out the MMU2S is not multi-material, and releasing my custom firmware for the MK3S... I have finally got back to working on the AR2 ( ͡° ͜ʖ ͡°)

In my last update I had figured out the shell reload movement, so now it was time to 3D print the remaining parts and test how well everything works together. But before we get to the cool footage I want to show the functional blocks I plan to implement in the AR2. Currently I have the basic blocks (in green) up an running, these include things like servo/solenoid drivers as well as the main controller itself. In the future I plan to add extra features (in red), these are things like lights, sound, and safety measures

The Assembled Prototype

With all the "boring" stuff out of the way, here is some footage of the current AR2 prototype. You might notice that the body has strange arrows/scribbles, this is me marking what needs to be fixed in the final model...

Some Advice

Whatever you are working on, don't be afraid of making a rough prototype!

A personal example is that with my first professional job I was tasked with making a lead-acid battery charger. I recall spending many weeks simulating the circuit to make sure it was perfect. Looking back, I could have easily halved my development time by making up a crude prototype, and if anything this prototype would have shown me things that my simulation could not...

So the lesson is, don't be afraid of making mistakes and get that prototype out there ASAP


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: 



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)


if (filament_detected_count > steps - 25)


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

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:


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)


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


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:


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


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


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


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


RESEARCH: SolidWorks Topology Optimization

One of the things I have come to realise with my AR2 project is that having a multi-extrusion 3D printer would be crazy useful, as all my prints to date needed support material which unfortunately is a pain to remove. However, with a multi-extrusion printer you can do fancy stuff like print all supports in PVA, which dissolves in water!

UPDATE: Not with a single hotend ;^)

Hence, I finally bit the bullet (bad time to be spending due to COVID19...) and ordered the MMU2S upgrade for my Prusa i3 MK3S. But there is a small hurdle, the MMU2S is designed for large (and preferably flat) working areas, something I do not have. So I decided to modify my current work space with a shelf to hold the 5 rolls of filament, and to spice things up I tried using the Topology Optimization feature in SolidWorks to design the shelf brackets. Overall, this produced quite an organic shape that reduced the bracket weight and gave it the best stiffness to weight ratio

The Steps

NOTE 1: I am running SolidWorks 2018 SP5
NOTE 2: Here is an easy to follow tutorial on Topology Optimization in SolidWorks 

  1. Make a 3D model as you normally would
  2. Add a SolidWorks simulation (SOLIDWORKS Add-Ins → SOLIDWORKS Simulation)
  3. Create a new Topology Study (Simulation → New Study → Topology Study)
  4. Select body material (I went with PET as I will be printing in PETG)
  5. Define the fixtures (faces where the body will be held in place)
  6. Add a force as well as it's direction (I went with 50N as at most the shelf will hold 5 1kg rolls of filament)
  7. Add a model goal (I wanted to reduce mass by 40% while having best stiffness to weight ratio)
  8. Specify the preserved regions and depth (I selected the bracket mounting faces and went with a depth of 2.5mm)
  9. Specify De-mold direction (arrow should be pointing towards flat surface)
  10. Create a model mesh (I used a 2mm curvature-based mesh)
  11. Run the simulation
  12. Finally, adjust the target Material Mass and calculate the Smoothed Mesh

The Results

  • Original model: 
    • 74.4g
    • 210851mm³
  • Topology Optimized model: 
    • 44.5g
    • 84013mm³


UPDATE: Worth The Weight

This one is for all my mates who through the day would never come, and while it's not Half-Life 3, it's certainly a step in the right direction ;^)





PROJECT: Half-Life 2 AR2, Update #2 - Barrel Assembly


Quick update coming at ya, I have just made the 2nd prototype for the AR2 barrel assembly:

Current variant seems to be working quite well, while still having enough room for electronics. Now I just need to fix a few minor errors and move onto the next moving assembly, the firing pin

UPDATE: Various 3D Printed Projects

Here is another quick update, this time covering some 3D printed projects I recently completed:
  1. My wife’s laptop seems to overheat when encoding videos or playing GPU heavy games. So I made a stand to give the laptop intakes/vents more air and move the screen to a more comfortable height. If you want to make one yourself, you can find the model here
  2. Another one for my wife who mainly works from a laptop connected to an external monitor. Recently work threw out a fairly decent PC (i7-3770k CPU, 32GB RAM, GTX 760 GPU), so we decided to refurbish it has her main computer. The problem she soon encountered was that it was a pain having to unplug the monitor/keyboard/mouse from her laptop and plug them into the desktop, so I designed a wee box to house USB & HDMI extension cables. Come to think of it we should have just got a KVM switch…
  3. Lastly, I made some 3D printed frames for the postcards & instax/Polaroid pictures we got along our 4 month overseas trip. You can grab the model here