Good 3D printers now have multiple hot ends. You ought to be able to print in different colors or print support material. However, a lot of us don’t have multiple hot ends. Turns out, you don’t have to have multiple hot ends to print in multiple colors. To accomplish that you need a lot of patience and the willingness to tell bald-faced lies. Don’t worry, though, you’ll only be lying to some computer hardware and software, so that doesn’t count.
You may have seen people talk about putting a pause between layers to switch from one color to another. That works, but it limits your options. For example, if you want to put some colored text on a different colored background, you have to either have the text poke out, or it has to be “under” the background. It can’t be flush if you only have a single extruder and hot end. My method is a lot more trouble, but it can generate good results.
Keep in mind, with hobby-grade printers, multiple color printing has a lot of problems even if you do have multiple extruders. This isn’t a panacea. But you can get results on par with a similar printer that has multiple heads.
Bottom Line Up Front
Here are a few pictures of test prints that use this technique. A Monoprice Mini printer with the stock extruder and hot end created them using different PLA filament. On the left is a test cube, with a color spot in the middle of the layers (as well as some spots on the top surface you can’t see). To the right is a plate with my call sign in a contrasting color. It is hard to tell in the picture, of course, but there is one surface. The text is at the same height as the yellow surface.
I didn’t spend a lot of time making these prints since I was more focused on perfecting the methodology. The layer heights aren’t very fine, the infill is sparse, and the print speed was fast. However, you could invest time into making better-looking prints. You can also use the usual techniques that you use with a “real” multi-extrusion printer (such as priming towers, ooze shields, etc.).
As I mentioned, it is old hat to stop the printer between two layers and switch filament out at that point. Usually, you’ll manually edit your G-code or use a simple application or plugin. We’ve even seen people who just time it. I wanted a different approach that didn’t limit me to one color per layer.
The trick is to lie. Any slicing software that supports multiple extrusion has a way for you to tell it how many extruders you have. I use Slic3r and Repetier Host. In Slic3er’s printer settings, there’s an entry for Capabilities/Extruders. I simply told it than I had three extruders (you can tell it more or less, but three seemed to be a good number; you can always change it later). I then made the same change in Repetier’s printer settings. If you really had multiple heads, you’d need to tell the program how far apart they are and other details. But since ours are just pretend, we can leave the offsets at zero and don’t really need to include any other information.
Of course, that isn’t all you need to do. I also added to the Custom G-code setting, also under printer settings in Slic3r. In particular, I added this custom piece of code for a tool change:
M83 ; turn on relative movement for extruder G1 E-5.000000 F6000 ; retract filament 5mm G1 X0.000000 Y0.000000 F9000 ; home X and Y axis leave Z at current height G91 ; note: For Marlin this make E and XYZ relative; for some it just makes XYZ G1 Z10.0 ; obviously, this limits your print height by this amount! ; Note Marlin treats relative different from others M84 E ; release extruder stepper motor from 'holding' position @pause Change Filament for [next_extruder] and set [temperature_[next_extruder]] degrees ; pause print! G90 ; back to absolute G1 X0.000000 Y0.000000 F9000 ; upon resume, rehome X/Y in case position was bumped out G91 ; bring Z back G1 Z-10.0 G90 ; and back to absolute G1 E0 F6000 ; reset extruder, ready to push out plastic again G1 F9000 M82 ; set extruder movement back to absolute ready for next layer
You may want to vary this code a little and–of course–you can omit the comments (the semicolons and everything after them). The basic idea is to pull the filament up to reduce oozing, move to location 0,0 and then use @pause to make Repetier stop and prompt. You can now change the filament out. You could, presumably change temperatures if you wanted to (I didn’t need to). If you are trying to get clean colors, you have to purge the nozzle (that is, run the extruder until the new color shows up). If you want an artistic fade, you could skip that step–totally up to you.
When you exit the pause, the script puts everything back the way it was and the G-code continues with the print. You will get some “bad extruder” errors as the G-code tries to switch extruders, but–at least on my machine–it doesn’t hurt anything.
By the way, it was tempting to try to move everything relative so that the script could put the head back in the right position. However, my printer doesn’t police going out of bounds, so that wasn’t really practical. On the other hand, Slic3r assumes you might have moved things around so after the tool change, the first thing it does is moves back to the known position. However, it would have been nice to line up on the old position in the XY plane and then bring the Z axis down. As it is, if you have a little too much extrusion, you could drag the head over your print. However, if your layer heights are accurate, you shouldn’t have that problem.
There’s no free lunch. The slicing software minimizes tool changes, but you still get tired of pulling filament in and out. Printing a 400 layer octopus with two colors is probably beyond everyone’s patience level. You really want as many layers as possible to be a solid color, just to save wear and tear on your hands and your patience.
You also need to plan your models so that there is sufficient volume of each color to show up. That’s true even with a multiple head machine, though. For example, on the callsign plate, if the callsign were a single layer of purple, it wouldn’t show up well at the 80 to 100 microns I usually use for printing. Also putting light colors on dark colors takes more volume. You will have better results with large things. You probably are not going to get the callsign down to a four-point text size. Again, that’s true even if you had mutliple extruders with the same nozzle and layer sizes.
Making the Model
There are a few ways you can represent a multiple color model. The most common is to simply have a separate STL file for each extruder. Even though I only have one extruder, to make good on my lie, I need separate STL files, too.
Next time I’ll show you how I created those models and how to load them (or any multi-extruder STL files) into Repetier Host. It is a lot of work. But if it makes the difference between getting the job done and having to send it out, maybe its worth it. Meanwhile, you can download the STL and the source files, if you want to experiment.