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