How did I develop this thing?

Back in late 2017...

I just have finished my ZEvolution 1 3D printing machine. 

This is a 3D printer based on the HyperCube Evolution design from SCOTT_3D.

But mine was  a bit different: I've built it with a custom 4 tool changer system in mind, very similar to the E3D Tool Changer. 

In addition to the original design, it has got 4 Bondtech™ extruders, linear rails on all axes and a Duet3D + Duex5 combo as the main controller unit, in order to drive all the stepper motors and gadgets built in.

This printer was (and still is) a very powerful and reliable machine, capable of printing fast, multiple materials and even using different nozzle sizes on each different tool head.

At this time... 

I started thinking about adding some kind of multi material tool (a.k.a. MMU) to my 2nd printer, the ZEvolution 2 - a Prusa I3 style printer.

Due to the fact it is Prusa I3 style, I couldn't use my tool changer design for the ZEvolution 1. Hence I started thinking about something that uses a single shared nozzle for all the different tools. 

So I knocked up some ideas and started drawing a CAD model (in 123D Design - which still is my favorite CAD tool), just to get the feeling what it could look like.

The goal was to have at least 4 filaments available which worked well with the bowden style Bondtech™ extruder on that machine. I did some experiments with a filament joiners and eventually came up with the idea of using some sort of barrel or "Revolver"  for the mechanics.

Shortly after...

I started, I saw this video from MRRF2018, where Josef Prusa presented his all new MMU2. I thought by myself "Great, someone's did it so I don't have to..." and I archived my ideas for the MMU (which hasn't even got a project name at this time). 

So, month's went by and I was patiently waiting for Prusa getting the MMU2 available for order but the order backlog got longer and longer. I started watching all the unboxing and review videos available and I somehow got the slight impression that this MMU (although it was very similar to what I had in mind) is not ready for market yet.

Almost a year after my initial idea, a little disappointed, not willing to wait any longer and a bit bored, I dug up my "old" idea.

Bit by bit and piece by piece I started refining and improving my initial design which I gave the name MFF (the Multi Filament Feeder).
It has already got the "modular design" it still has which would allow me to expand it for even more materials if needed. Though, the max. limit was 9 materials because of the  Revolver design and the spacing of the bearings (and just in case you're wondering, I confess I did nick the term "Revolver" from Josef Prusa).

V1 CAD drawing

Knowing that...

this MFF will run on my Duet3D WiFi controlled 3D printer, I thought it would be nice to add its own controller. Something, that allows me to control the operational steps without the need of modifying existing firmware and thus keep it firmware independent. 

Browsing different shop sites, I finally found a nifty little 3D printer controller, the Wanhao i3 mini. A small and yet fully integrated and powerful piece of hardware, easy to get and easy to program.
My decision using this controller was the point when the MMF became the SMuFF - the Smart Multi Filament Feeder.

Yes, still "only Feeder" and not Extruder, since it was meant to feed the filament into the printers main extruder, which will then take it from there.

Shortly after, I purchased this controller, finished the design, printed the very first version of my SMuFF and started writing the controller firmware, which took a little while, since I was doing it from scratch.

The first version...

worked pretty well - in standalone mode. 

Though it used the same gear mechanics as the Prusa MMU2 for driving the filament (standard  MK8 drive gear and a counter bearing for each filament) it worked almost flawless, as you can tell by watching the video below. 

What you see is my very own test rig, which utilized a second Arduino  MCU to check whether the filament has been pushed all the way up to the 2nd endstop and counted the endstop hits for each filament separately.

Although...

by holding back the filament with my fingers, I realized that the process of loading / unloading can be disrupted easily. That "holding back" may also happen while printing, when the filament flow is blocked for some minor reason.

What I've got at this stage was, more or less, the same mechanics as on the Prusa MMU2 and thus I suspected, it might have the same issues when loading / unloading in a real 3D printing environment. 

Being biased by my genuine Bondtech™ extruders on my printers, I didn't like the result much. 

This was the main reason V1 never made it into the wild and never got published. I wanted something more stable and reliable. 

V1 using MK8 gears

So I started...

working on V2. It may sound ridiculous to you, going from V1 to V2 without even having V1 released, but hey, in the end, names are just smoke and mirrors. 

Luckily, I found some decent Bondtech™ gears in the Grabcad library, which saved me from disassembling one of my extruders and going through all the measurements (and the drawings).

I had to completely redesign the filament guides around the gears and also the Revolver mount, though I tried to keep as much  of my initial design as possible. Thanks to the modularity of the initial design, this task was not too hard.

One of the hardest tasks was to design the upper lid, the spring mechanics and the revolver in order to get just the right amount of pressure onto the gears, so that the filament is being fed nicely and the Revolver doesn't get stuck.
A really complex task, which - shown later - has undergone many, many changes over time.

Though, eventually I finished the V2 design and a first test was very successful, as you can see in the video below.

This video shows only a small spool with about 700 g of filament, which I entangled on purpose to test the capabilities of the gears. Later on I added one more spool (in total about 1.5 kg)  and eventually I used two bigger spools to stress the gears with around 2 kg of weight. None of these tests failed, which didn't surprise me much because of the superior mechanics of the Bondtech™ gears.  In the end: That's why I wanted them!

Firmware has improved...

during my testing phase - tremendous. 

In the very first lines of the firmware, I've added a simple GCode parser. So I was able to test the SMuFF conveniently using my PC attached through the serial interface. This "simple" GCode parser became a "not so simple" parser over time. Though, I'm happy I did it that way. It enabled me to fully remote control the SMuFF and do a lot of testing.

Also, I was happy to have that extra LCD screen for controlling and displaying some of the status informations. 

So it was finally time...

to put it all together and attach it to my ZEvolution 2 printer and that's what I did.

The very first tests were truly disappointing. Almost everything that worked flawless under test, wasn't that great while trying to print. Here're some examples:

In short: A nightmare.

I started to doubt my skills and seriously started thinking about dumping the whole project. But thanks to my boredom and an innate stubbornness I didn't stop just there.

So, weeks passed and I slowly but constantly improved things, resulting in the addition of a couple of more gadgets. Among them, the SMuFF-Ifc. A separate ESP-32 MCU based 3 way serial splitter, which enabled me to use the serial interface of the Duet3D, which usually connects to the PanelDue, for communication with the SMuFF. 

I also realized that a transition between the SMuFF and the main extruder was hard to accomplish without messing with the printers firmware. As a result, I focused on the SMuFF becoming the main extruder and ditched my main extruder. 

At some point, all this looked a bit overkill. But eventually I got everything up and running and with time, you learn to deal with the quirks of your equipment.

Although I never was much into the "multi-material fancy figurine printing" game, I felt the urge to have built a tool which was able to cope with all those requirements.  

After quite some...

happy days of printing with the SMuFF myself, I decided to publish my project on Thingiverse, based on the thought: 

Learn - Make - Share!

So I did and the first lines of the description made clear, this is not a cheap Prusa MMU2 clone. This tools will cost you a lot of money and you have to have fundamental skills to build one yourself. But hey, this website is all about makers, right?  

In the following days and weeks...

I did some updates to my project. Some more, some less essential. I've tried to document the changes as good as possible but over time this little project got more and more variants and thus more complexity. 

As I made a couple of redesigns: 

The major complaints were: 

Though, this project gained a lot of attraction and the initial V3 model was downloaded over 8500 times over a period of round about 1.5 years. 

At least that's what I can tell for sure before Thingiverse updated their website with the new design. After that, there were tons of views without downloads and then it switched suddenly to no views but tons of downloads ;o) - go figure.

That kept me busy for a while...

The idea...

of using a servo as the Revolver replacement, came to my mind long before I implemented it. In fact, it was shortly after V2 came alive and well before V3. I created a new CAD design which integrated the servo, just to get a feeling for it but it didn't convince myself. 

I also worked on some other ideas, primarily focused on making tool changes faster, such as the 5 way Y-Splitter:

5-Way Y-Splitter

The idea behind was simple: By making the retraction path shorter it'd cut down on tool changing times. I built a couple of prototypes and though it did work as expected,  it never really got to fly. Mainly because it would have limited the machine to a max. of 5 materials.

I even had some really cumbersome ideas. For example the Selector-Revolver:

Selector-Revolver

The idea was: A Revolver for the Selector which sits right above the hotend. Still based on the thought, the shorter the retraction paths, the faster the tool change.

Eventually, the NEMA-8 stepper motor I've used didn't have enough force to accomplish this task. This and the fact that it would have added quite some amount of weight to the hotend made me scrap this idea right away.

But you never know unless you try, right?

At some point...

I realized that the Revolver idea was not the best. Besides it is limited to a max. of 9 tools (yeah, I know) it has two major disadvantages:

The calibration issue is related to how it's placed on top of the assembly. With sitting flush on the bases left and right, I discovered uneven pressure on the lids/gears or even binding while rotating. To overcome this issue, all the parts have to be printed and assembled very precisely with a minimum of tolerances.
I've tried to compensate this behavior by adding some blind holes at the bottom of the mounting screws, where I've put some bed leveling springs in order to be able to "level" the Revolver mount. But just as with manual bed leveling, it's a tedious process to adjust all four corners in a way to have equal pressure on all gears.

The noise comes from the rotation of the Revolver wheels, since on every tool change they were rattling over all lids. Nothing to get exited about but kind of annoying.

So, I dug out my old idea of the servo as a replacement for the Revolver and started improving it. After testing out a couple of prototypes I decided this is the way to go and released it as V4.

Shortly after I released it, I got curious whether or not the standard size servo could be replaced by a mini servo. So I redesigned the whole servo carrier to fit a mini servo. I wasn't convinced at all, that the force of a mini servo would be sufficient enough. But I tried it anyways and got pretty surprised by the results. That's when V4.75 came alive.

Just in case you're wondering:  The "V4.75" never was a published as such. The official term was "V4 with mini servo". Later on, as I overhauled the design vor V5, I gave the previous mini servo version this name to depict how they relate to each other. 

Speaking of evolution...

of ideas, here's an example on how the Filament-Guide evolved over time:

Evolution of the Filament-Guide

Don't ask how much filament I've wasted so far. Nevertheless, not a single fish in the sea is threatened - I collect them all!

After quite some time...

makers approached me and offered their help to improve the SMuFF. At that time some ideas, such as the Prusa MMU2 Emulation Mode, were born.

Computiger, a Thingiverse member had a working Prusa MK3 / MMU2 (clone) and in mere endless one-on-one sessions, he helped me getting that emulation mode to fly.

I must confess, the MMU2 protocol is kind of awkward. Because of the way they've implemented the communication between printer and MMU, I can clearly see why they had such problems in the beginning. 
Don't get me wrong, I'm not bashing Prusa but things could have been made much easier on the protocol side. Eventually, it's a pure software thing and software can be improved. So, fingers crossed MMU2 owners ;o)

In January 2020...

I purchased an Ender 3 Pro, just for the mere pleasure (and of course for having a working Marlin 3D printer to test with), which had to sit and wait a couple of month to finally get assembled.

Eventually, I assembled it and got pretty surprised that the stock controller was able to cope with Marlin 2.0. So I started developing and testing the OctoPrint plugin.

Well, actually... I wrote the plugin long before I got the Ender 3, but I wasn't able to thoroughly test it due to the lack of a Marlin based printer.  Quickly I realized: It's not as easy as I pictured it in my mind. The code I got so far was more or less a framework but not a working solution.

So I wrapped my head around the OctoPrint plugin framework and after quite some time of swearing and frustration I finally got a clean and working solution.

Fast forward...

a couple of months and a pandemic, where are we today?

Well, I worked hard to make this project a bit more streamlined, i.e. get rid of (or at least reduce) the variants, write a better documentation, update the BOM make better assembly instructions. 

That's what V5 V6 and this new website is all about.

Meanwhile, a hand full of valuable makers contributed to this project. Some with testing, some with useful ideas, some with the integration of the Prusa MMU2 Emulation mode, some with coding for Marlin 2.0 and some with  organizing specialized SMuFF user groups.

I've finished the OctoPrint plugin to allow anyone who's interested getting into this MMU game to do so with a minimum amount of effort and I even published it on the plugin repository.

Coming up next...

is the implementation of a couple of new ideas I have on my mind. 

First and foremost it's all about the ongoing improvement of the SMuFF but also of the documentation and the information around.  Also on my list is the integration of new controller boards, because nowadays electronics have a short half-life.

 I'm even thinking about a dedicated controller for the SMuFF. We'll see how this works out.

That's my story...

on how I did it but there's still the question: Why did I do it?

Simple: Because I can!

In the meantime...

be my guest, feel free to browse this website and to collect all the information you need, in order to build your own SMuFF.