NAHMS: The worst way to print multicolor with a single color printer

Image for NAHMS: The worst way to print multicolor with a single color printer

I have invented a revolutionary horribly inefficient way to print muticolor, ams style without a tool changer, mutiple extruders, or an ams! It is called the

NAHMS: Non-Automatic Human Material System

The NAHMS uses manual filament swaps to add full color to your prints. While it sounds extremely frustrating, there are actually a lot of benefits:

FDM multicolor options

Tool changer

AMS

NAHMS

Waste

Minimal, only a small prime needed as you have multiple hotends

High, huge purges needed as you are switching filament in the same extruder

More than a tool changer but less than an AMS as you can visually notice when you can stop purging

Speed

Fastest, but still pretty slow

Slow

Extremely slow, only ideal for small prints or at least ones that don't have many changes

Cost

Usually built into printer, but tool changing printers are almost always above $1000

Fairly cheap, usually around $250

Almost nothing

Difficulty

Easy

Easy

Medium

 Ok fine, scratch that. Maybe a few, very minor benefits. If it's not clear, the NAHMS is not an actual machine. Basically, you are manually switching the filament for every color change.

You can set a NAHMS up for your printer easily. Using it is the frustrating part. You will need:

  • An FDM 3d printer

  • Prusaslicer (you may be able to get this to work with other slicers, but I haven't tried)

  • Octoprint (optional if your printer can handle M0 gcodes, see step 1)

  • Filament in your favorite colors

  • A lot of patience

Step 1: setup

If you haven't already, install Prusaslicer. As I said, this will probably work in other slicers with similar feature, but I have not tested any as of yet. 

Importantly, you'll need to know whether you printer can handle pause gcode commands or not. Mine (elegoo neptune 3 pro) has very limited support for them, a fact which I learned the hard way. Here's a chart showing all Marlin pause gcodes:

M0

Pause

The standard pause. It pauses the print to wait for the user. It also has an optional message parameter, which will display on screen for some printers.

M1

Pause

Basically the same as M0.

M25

Pause SD print

Similar to M0 and M1, but very limited. It will pause and wait for the user, but only when printing directly from the sd card. It also has bad support, and it literally crashes my 3d printer (again, learned the hard way.)

M600

Filament Change

This command is pretty handy. It will pause for you to switch colors mid print, and some printers will even show a little menu with load/unload buttons allowing for you to change the filament! This is the default command in Prusaslicer for filament change at layer. However, it has no message feature like M1 and M0.

Google if which of these you printer can support reliably. M0 and M1 are ideal, M600 would work well but only for 2 colors as there is no way to know which color to switch to, and M25 is a bare minimum. 

What if none of these commands work? Still good. Go ahead and setup Octoprint(https://octoprint.org/). Octoprint lets you easily and efficiently control your printer via computer and Raspberry Pi, and there are hundreds of community made plugins you can add to spruce up your printing workflow.  

Step 2: slicer configuration

Now fire up good ol' Prusaslicer and create a printer profile identical to the one you already have. Now head to the general settings tab of that printer settings profile, set the number of extruders to however many colors you wish to print with (it would be a good idea to start with 2 for simplicity), and check single extruder multi color, as shown in the image.

Next head to the custom gcodes tab, scroll to tool change gcode, and paste the following:

     If you are using Octoprint:

M117 Load filament #{next_extruder} ; Display filament # to switch to
{if layer_num > -1}
@pause ; Pause for manual swap via Octoprint command
{endif}

   If your printer supports M0:

{if layer_num > -1}
M0 Load filament #{next_extruder} ; Pause for manual swap with message
{endif}

Ok. Now you can slice your model however you would in Prusaslicer for a multicolor printer by purge towers, filament painting, etc. Then export the gcode and head to octoprint.

No, wait. One more thing. Even though you have made a  custom tool change gcode, the T0/T1/T-whatever commands are still being sent. Your printer will probably just ignore these, but it's still better safe than sorry. Open the gcode in a text editor, not a word processor, and use the find-and-replace tool with regular expression enabled to filter out

T\d

and leave the "replace with" box empty, so the tool gcodes will be removed. Go ahead and hit replace all.

Step 3: Octoprint

Head to Step 4 if using printer gcodes

Upload your gcode, then click the Load button. Don't print quite yet.  Go to settings -> octoprint -> plugin manager and click get more. You may have to reauthenticate. Search "M117", and one of the results will be M117 pop up by Github user jneiliii. We'll use this plugin to show a Octoprint popup telling you which filament to switch to. Go ahead and install it. Restart the system, then refresh as prompted. 

These are the settings I used for the pop up. Speech is nice for if you are multitasking. I gave it a British accent, but you can choose any language you want. Pick another language and play around with the pitch setting for some hilarious combinations! Or you can be boring. 

Unless you want huge blobs on your print, you are going to want to move the print head away when you pause the print. Surprisingly, Octoprint doesn't do this by default. Head to Settings -> Printer -> Gcode scripts (shown in image)

Here are the scripts I used for before and after pause,  but you can use whatever. These are in addition to the Prusaslicer tool change script in step 2.

After print is paused:

G91 ; Relative positioning
G1 Z+5 F1800 ; Lift nozzle by 5mm
G90 ; Absolute positioning
G1 X0 Y0 F3000 ; Move to X0, Y0
M300 P750 ; Beep

Before print is resumed:

G28 X Y ; Home X and Y to prevent shifting
G1 X{{ pause_position.x }} Y{{ pause_position.y }} F3000 ; Move to pause X/Y
G1 Z{{ pause_position.z }} F1800 ; Move back to pause Z
G92 E{{ pause_position.e }} ; Reset extruder position

Awesome! You are all set for...

Step 4: Using the NAHMS

Right. Obviously, heat up your printer and load your initial filament. If you have a filament detector, either turn that off, or keep one spool threaded through it. It's not going to be fun having an extra layer of complexity to the repetitive manual changes. Start your print, and wait for the first color change. Back up the old color, load the new filament, and resume the print. Not too bad, right? Next filament change. Same story: Back up the old color, load the new filament, and resume the print. Repeat for the next filament change. And the one after that. And the one after that. And that. And that. And... well you get the idea. Anyways. Please  consider following and checking out the other models on my profile, and thanks for reading!

-- π”Όπ•§π•šπ•π”Όπ•ͺ𝕖𝔻𝕦𝕕𝕖

Comments

β–ˆ

β–ˆ

β–ˆ

β–ˆ

β–ˆ

β–ˆ

β–ˆ

β–ˆ

β–ˆ

β–ˆ