RUG/Pennsylvania/State College/Software/Parts/Dual Extruder

From RepRap
Jump to: navigation, search

Back to State College RepRap Main

Dual display.jpg

The Quest for Dual Extrusion

The purpose of this page is to document the Penn State RepRap User Group's progress towards a system that will be capable of dual extrusion. There are many incentives for the pursuit of a dual extruding RepRap. With such a system, the class would be capable of printing much more complex objects by using different colored plastics and different types of materials in the same print. Furthermore, as the capabilities of our systems continue to grow (in terms of being able to print a wider variety of objects), the class' usefulness for both the RepRap community and the Penn State College of Engineering will also continue to increase. There are already many introductory level engineering design classes that utilize the printers to create solid models for their design projects, but with the ability to print in multiple colors and materials, other professors and groups within the university may become interested in utilizing our services rather than having objects printed commercially.

For simplicity's sake, we have chosen to try and construct a dual extruder that is based off of the current single extruder (a derivative of 'Wade's Extruder'). In this way, we would be able to use existing parts and designs to assemble the new extruder, hopefully making few, if any alterations. The only major change that will need to be made is the creation of a new hot plate that will be able to support two extruders. Other than that, the goal is to use exclusively parts from our current extruder design, most likely simply placing two complete extruders side by side on the same OpenX assembly.

Beyond the actual hardware of a dual extruder system, there will also need to be some modifications made to the firmware and software that communicate with the extruders and allow them to communicate back to the computer. Adding a second extruder means calibrating the system so that when one color is finished printing its part of a layer, the second tip can move into the correct position on the layer. This should involve simply compensating for the horizontal distance between the two hot tips, assuming that the two tips will be in line with each other on the carriage. We will also need to find ways to control both extruders using the computer (perhaps using Replicator G), as well as generate GCode for parts to be printed in multiple colors. These are technical barriers that will need to be overcome even if we are successful in building a physical dual extruder. Without the proper software, the extruder itself is essentially useless.

Progress Blog

Date Project status
10/11/11 Today marks the beginning of the project. I assessed the feasibility of the project and determined which software, electronics, and hardware to use. The selections can be found in each of the respective sections below.
10/18/11 Firmware night, and I must say, it's going to be quite the task. I spend the night familiarizing myself with the firmware language and editor, as well as locating the sections of code that will need modification. The actual firmware rework will have to wait though, as I need to see exactly what sort of code will be sent to the machine with regard to tool (extruder) selection. This will happen as soon as I can learn Skeinforge and begin generating the code that will be sent to the machine.
1/17/12 It's a new semester, meaning another attempt at Dual Extrusion. After my short battle with it last semester, I'm back and ready to tackle it once and for all. If MakerBot can produce a commercially successful dual extrusion system, I should be able to figure it out with a little help from my colleagues here at Penn State.
1/24/12 It turns out that there was someone else who had the exact same intentions as I did (Dual extrusion, Ramps, Marlin), but he was just quicker to figure it out than I was. Awesome, less work for me. But now that I have the proper firmware (found here), I've changed the proper lines in the configuration.h and pins.h files, and so in theory it should work. The Mondo is almost assembled, and one of my colleagues is looking into the specific build of Skeinforge that supposedly is capable of generating G-code for dual extrusion. The goal is to have the printer running with a single extruder in the next week or two, with the dual setup operational shortly thereafter.
11/27/12 Work has begun on developing mock-ups of potential dual extruders in SolidWorks (using the existing model of the Open Hybrid Mendel extruder currently in use). Our goal is to minimize the distance between the two hot tips, thus the two obvious configurations are to put the extruders on a hot plate either gear-to-gear or motor-to-motor. Most likely, whichever is able to fit on an OpenX carriage the best (i.e. have the tips closest together and maintain the largest print area) will be chosen to continue work on.
12/04/12 After comparing the digital mock-ups in SolidWorks, it appears that a 'motor-to-motor' configuration will allow for the smallest distance between extruder tips while at the same time keeping the overall width of the extruder down to a minimum. Knowing this, work has begun on creating a hot plate for the extruder configuration, as well as redesigning the OpenX carriage for dual extruder use (the current one is not long enough to support both extruders). Though lengthening the OpenX carriage will reduce the print volume by a small amount, in addition to the reduction in print volume caused by the spacing between the hot tips, it is a necessary sacrifice for the development of a dual extruder.
12/06/12 Based on the SolidWorks Model of the motor-to-motor dual extruder arrangement, a new OpenX carriage has been designed to support the two extruders. In order to make the extruders fit correctly, the carriage had to be redesigned so that the support protrusions weren't conflicting with the mounting holes in the hot plate for each of the extruders. This design should enable both extruders to be supported, while at the same time minimizing the space lost due to the increased length of the carriage.
Summer 2014 The log has not been uptaded for a long time, but after some work done it is now stabilized and working. We are experimenting dual colour PLA printing and printing parts with disolvable supports. We will both experiment printing parts resulting from an assembly of two STL files and supports generated by Slic3r.


The development of an Open Hybrid Mendel dual extruder is based upon the current extruder used on the completed OHM machines. This extruder can be viewed below:

OHM Single Extruder Isometric.jpg

The goal for the development of a dual extruder was to use two of these single extruders and mount them both to the same hot plate and OpenX carriage. There were two configurations that seemed to be most plausible for this goal: a gear to gear configuration and a motor to motor configuration. These two configurations can be viewed below:

Gear to Gear Configuration

OHM Dual Extrusion GearToGear.jpg

OHM Dual Extrusion GearToGear Measurement.jpg

This configuration resulted in a horizontal distance between the hot tips of roughly 61mm.

Motor to Motor Configuration

OHM Dual Extrusion MotorToMotor.jpg

OHM Dual Extrusion MotorToMotor Measurement.jpg

This configuration resulted in a horizontal distance between the hot tips of roughly 59mm.

Based on these configurations, it was decided that the arrangement with the smallest distance between the hot tips, the motor to motor configuration, would be further developed. The redesigned OpenX carriage was created using the measurements from a hot plate that would fit both extruders in a motor to motor formation. In order to cram both extruders onto a hot plate that would fit on a single carriage, the carriage needed to be elongated by 30mm. Two of the notches that extend the width of the carriage in order to better support the weight needed to be moved slightly to allow the extruders to properly mount to the hot plate, and the hot plate to properly mount to the carriage.

Ben's OpenX Dual Extruder Carriage

Bens OpenX Dual Carriage Isometric.jpg

Bens OpenX Dual Carriage Top.jpg

Full dual extruder assembly, including both extruders, hot plate, OpenX carriage, and all hardware:


OHM Dual Extruder Assembly Isometric.jpg


OHM Dual Extruder Assembly Bottom.jpg


OHM Dual Extruder Assembly Side.jpg




In order to drive a dual extrusion configuration, the use of Rambo electronics is likely a good choice. RAMBo electronics are essentially an arduino Mega and RAMPS electronics combined onto a single board. Furthermore, RAMBo electronics, unlike RAMPS, come almost fully assembled and include support for two extruders (as well as a fan per extruder, a heated bed, and a plethora of other goodies). However, we have made a few decisions as to the configuration of the system and we are finally going to be using RAMPS electronics, a shield that attaches to an Arduino unit, to drive the machine. The use of the motherboard will be the same, except that the output normally used for the fan on a single printer will be in this case affected to the second extruder.


Tentatively, the firmware used will be Marlin, a derivative of Sprinter but with a few upgrades that make it a step above. All of this will be mounted on a Mondo RepRap, allowing for more room and hopefully some really big and cool prints.

Changes of the day:

Under configuration.h

#define EXTRUDERS 1 becomes #define EXTRUDERS 2 (to specify 2 extruders instead of 1)

#define MOTHERBOARD 7 becomes #define MOTHERBOARD 33 (to load the pin configuration for RAMPS 1.3 and 1.4)

I commented this line #define DEFAULT_AXIS_STEPS_PER_UNIT   {78.7402,78.7402,200*8/3,760*1.1}
and uncommented this line #define DEFAULT_AXIS_STEPS_PER_UNIT   {80.3232, 80.8900, 2284.7651, 757.2218}

This was to bring the parameters to what is specified for the SAE Prusa specs, I'll need to check on these for our current machines.

Thoughts to work with for next time.

This line was located about 3/4 of the way down on the Marlin.h tab.

#if (EXTRUDERS > 1) && defined(E1_ENABLE_PIN) && (E1_ENABLE_PIN > -1)
  #define enable_e1() WRITE(E1_ENABLE_PIN, E_ENABLE_ON)
  #define disable_e1() WRITE(E1_ENABLE_PIN,!E_ENABLE_ON)

I believe that tracking down these other parameters will help me figure out more about how to tackle the firmware.

Software: using Slic3r

This paragraph will detail the settings used in Slic3r for our dual extrusion prints, but first it is necessery to merge the two seperate files into one assembly. Under "File", select "Combine multi-material STL files..." and select the required files, when this is done click "Cancel" and a window will pop-up to save the new file (.amf). Choose first the file you want to be affected to the first (default) extruder, then the other one will be affected to the other extruder. This new .amf file can now be opened with Slic3r. It is possible to click on "View" in order to make sure the assembly has been done correctly.

We will now explain our settings for Slic3r.

Print settings menu

Under "Speed", make sure the acceleration parameters are set at low values. Dual extruders carriages are often heavier, and 500 mm/s² sounds like a good parameter for all accelerations on our printer.

Under "Multiple extruders", "Ooze prevention" you can tick the box in order to cool down the extruder that is idling when the other is printing. This also presents the advantage of building a skirt around the part that will act as a wiper which is very useful. Note that the skirt will be printed with the first extruder. However, with this option you might need to edit the Gcode. Indeed, the temperatures changes are made with "M109" instructions and a lot of time can be lost when the printer is waiting for the target temperature to be reached. Inserting a delay can be a better solution. If this option is not always to be used with PLA, experiments with PVA (for printing parts with disolvable support) show that is necessary as it oozes more easily. In this case, to gain time, it is possible to edit the Gcode so that the change in temperature is only set for one of the extruders. These Gcode editions will be detailed in the next paragraph.

Printer settings

Under "Extruder 1/2", tick "Retract on layer change" and "Wipe while retracting". Under "Retraction when tool is disabled", good settings for our printer with PLA seem to be respectively 5 mm and 0 mm. When PVA is used, those parameters should be investigated as this material oozes more easily.

Under "Extruder 2", set the X offset to 59.5 mm.

Editing the Gcode

You can download Notepad++ in order to edit easily your Gcode.

The temperature changes are made with "M109" instructions. This instruction waits for the temperature to be reached. On the printer used, this instruction had to be modified as there were instabilities in temperature readings that prevented the instruction from being processed quickly. Implementing a delay can be a better solution.

First, the printing temperatures must be set. With the option "Find", search for “T0 G92 E0 M109 Sxxx ; wait for temperature to be reached”; where xxx is the temperature set in the “Filament settings menu”. Replace it (choose the option to replace everywhere in the document) by "T0 \nG92 E0 \nM104 Sxxx \nG4 Py000" where xxx is the temperature you want and y is a delay in seconds. This allows to set the target temperature for T0 and a delay for this temperature to be reached. The option “\n” allows to separate the four commands on four different lines as four orders on the same line would not be understood by the firmware. Do the same find and replace procedure, this time for “T1 \nG92 E0 \nM104 Sxxx \nG4 Py000".

Then, apply this procedure once again in order to set the idle temperatures. Find and replace the M104 lines above T0 or T1. This allows to cool down the hot tip which is not printing. Usually, the temperature was reduced by around 15°C and the waiting time was 4 seconds. However, this is to be investigated on each hot tip and material.

This method can be adapted to switch idle/print temperature on only one of the extruders. As an option like "Find and delete" was not found, the "Find and replace" option can be used to input the same idle and print temperatures with an “M104” command.

Printing with a dissolvable material

One of the most interesting use of dual extruders is the possibility to print designs that have overhangs and that couldn't be printed with a single extruder. The support material can then be dissolved after the print.


We have first experimented with PVA (PolyVinyl Acetate), a water dissolvable material. An important thing about this material is to keep it in a dry place in order to prevent the filament from getting moist.

This material bonds very well with PLA, and it appears that extrusion at 180°C and 165°C for idle temperature are correct settings. Be careful not to print it at PLA printing temperature as it will burn. This material oozes a lot on our printer, so it is recommended to print the skirt and adapt the "Extra length on restart" parameter. The skirt could also be replaced by adding a wiper somewhere on the printer. A custom Gcode could easily be implemented so that the extruders move to the wiper in between tool changes.

However, despite the fact that this material is very convenient as it is water dissolvable, it is very difficult to use. Indeed, during long prints it tends to clog the extruder and it can take a few attempts to correctly complete a print.

Below are pictures of two prints that used PVA as a support material, before and after dissolution. The gear box print was completed in two steps as it had to be stopped because the PVA extruder got clogged. It was then restarted and finished, but the final appearance isn't satisfying. The Hilbert cube wasn’t completed because the hot tip clogged as well.

Gear1.jpg Gear2.jpg

Hilbert.jpg Hilbert2.jpg

The PVA was removed very easily after an overnight stay in water. However, it starts dissolving after only a few hours.


Because PVA is so difficult to extrude, we are also experimenting with HIPS (High Impact Polystyrene). Yet lot easier to extrude, this filament is dissolved by D-Limonene. This chemical can easily be found and is non-toxic, but it is obviously much more costly than using water. We will see that HIPS can also be dissolved by Turpentine.

Compared to PVA, HIPS is much easier to extrude and it doesn't tend to clog the extruder. A correct extrusion temperature on our printer seems to be 210-220°C on T0. Although the use of HIPS compared to PVA is much easier, it doesn't stick perfectly to the PLA or to itself. Therefore, a special attention should be paid in levelling the hot tips along the Z axis as HIPS could be dragged if a hot tip were too low. Besides, if the first layers of the print are made of HIPS, make sure they stick as much as possible on the bed.

Below are pictures of the same print that were performed with PVA, and it can immediately be noticed that the result is much more satisfying.

Hips support.jpg Hilbert HIPS before.jpg

The HIPS needs now to be dissolved. We first tried to dissolve HIPS with turpentine as it is very easy to find this product for cheap. The part was submerged by turpentine and we let it sit overnight. If this chemical does dissolve HIPS, the result is not very satisfying. HIPS is softened and turned into a glue texture. Big chunks can easily be removed on the outside, but it is complicated to remove HIPS from the internal cavities like in between the teeth of the gears. Besides, you should consider wearing gloves in order not to have to wash your hands to remove this glue and the very strong smell of turpentine. Below is the result obtained after an overnight bath in turpentine for the gear box part. It can be seen that some glue still needs to be removed.


HIPS support after.jpg

After these tests with turpentine, we were given some pure D-limonene from a chemistry lab. The Hilbert cube was submerged into the limonene for the night along with the gear box part for which some HIPS was still not dissolved as the turpentine didn't have a completely satisfying effect. After only an hour or two, the limonene which was translucent in the beginning, turned cloudy and the HIPS was already dissolving. After an overnight bath in limonene, the remaining HIPS on the gear box was fully dissolved and the Hilbert cube was washed from the remaining chunks of HIPS.

As a conclusion, limonene should be preferred to turpentine for several reasons. First, the turpentine doesn't dissolve HIPS correctly and it takes a longer time to achieve less good results. Then the smell of turpentine is really powerful and you should consider doing your experiments in a well-ventilated place. On the contrary, the limonene vapors aren't harmful and the smell is discrete and nice. Finally, limonene will dissolve most of the HIPS without much efforts with an overnight bath and the remaining chunks will easily come off with any appropriate tool.

Below are some pictures of the experiment with limonene.

Limonene 2hours.jpg Hilbert cube dissolving after 2 hours in limonene.

HIPS dissolved.jpg

Above is the gear box after dissolution of the HIPS into the limonene. Contrary to the turpentine, limonene dissolved the HIPS completely. However, the layers constituting the gears are delaminating. This is due to the design of the part. Indeed, while printing the gears, there are also layers of support that are being printed which shouldn't be. As a result the gears are not solid and when the HIPS is being dissolved some layers of PLA are separating. A solution to this issue could be using Slic3r to generate the support instead of using the original support material file. Below is a result of the print performed this way. The overhang threshold was set to 45°.

Gear box support 45°.jpg

The result is not satysfying as support material was not generated between the top layer of the gears and the gear box, resulting in a non functional part. However, if the overhang threshold is set to 0 (for automatic detection) it was observed in Repetier that the support is achieved correctly. The print with this setting has still to be performed.

Hilbert dissolved 1.jpg Hilbert dissolved 2.jpg

Above is the Hilbert cube after full dissolution of the HIPS. Note that the geometry of the print is different from the STL file. This is due to our printer which was still experimenting problems. The print stopped two times, and we had to restart it from where it stopped.

Below are the related ZIP archives:

Item Description File Link
Hilbert Cube Contains the two STL files and the AMF assembly Media:Hilbert
Gear box Contains the two STL files and the AMF assembly Media:Gear

Print Gallery

In this section we will upload pictures of interesting prints realized with our dual extruder. The related files can be found in ZIP folders in the ZIP section of this page.

Cube dual.jpg Calibration dual.jpg Calibration dual 2.jpg

Ball cube.jpg Hilbert.jpg Hilbert2.jpg

Gear1.jpg Gear2.jpg Hips support.jpg

Hilbert HIPS before.jpg Dragon.jpg Hilbert dissolved 1.jpg

HIPS dissolved.jpg

Below is a picture of a 3D printed QR code which is a link to this wiki page. The result needs to be improved, but it is working as it is with a QR reader on any smartphone.

QR code 1.jpg

Here is how we proceeded to print this part:

  1. Choose the URL you to want be encoded and use an URL shortener to simplify it: the simpler the URL, the simpler the print job will be.
  2. Generate a 2D QR code with any QR code generator.
  3. The next step will require a 130*130 pixels picture maximum, hence you need now to reduce the QR code picture you have just generated. We used Picresize. A picture of 100*100 will also work.
  4. With this picture you are now about to generate two 3D STL files, one for the positive patterns and one for the negative. We used this very useful website 3d Azurewebsites made by Michael Kappel. You just have to choose the height of your QR code and upload your picture. Do this a first time and save the STL file, then do it a second time ticking the box "Invert".
  5. With these two STL files, use Slic3r as you normally use it for dual printer jobs. As there are a lot of tiny features, we noticed that better results can be acquired by reducing the extrusion temperature by 5-10°C.



Below are the SolidWorks files for the printable parts of an OHM Dual Extruder (and technically a single extruder too...):

Part Description File Link
Extruder Body PSU Greg's-Wade's Open Hybrid Extruder Media:Psu_greg-wade_hybrid_extruder.SLDPRT |
Idler for Open Hybrid Mendel Extruder Body Media:Idler.SLDPRT
OpenXY Bracket for OpenX Carriage Media:OpenXY_bracket_rev1.SLDPRT
OpenX 45 Arm for OpenX Carriage Media:OpenX_arm45_F.SLDPRT
Extruder Gear Driving Gear - i.e. attached to the motor Media:Extruder_gear_rev4.SLDPRT
Extruder Plate Plate for dual extruder Media:Dual_Extruder_Plate.SLDPRT
Ben's Dual Extruder OpenX Carriage Modified OpenX carriage Media:Bens_OpenX_Dual_Carriage.SLDPRT


Below are the STL files for the printable parts of an OHM Dual Extruder:

Part Description File Link
Extruder Body PSU Greg's-Wade's Open Hybrid Extruder Media:Psu_greg-wade_hybrid_extruder.STL
Idler for Open Hybrid Mendel Extruder Body Media:Idler.STL
OpenXY Bracket for OpenX Carriage Media:OpenXY_bracket_rev1.STL
OpenX 45 Arm for OpenX Carriage Media:OpenX_arm45_F.STL
Extruder Gear Driving Gear - i.e. attached to the motor Media:Small_extruder_gear_rev4.STL
Ben's Dual Extruder OpenX Carriage Modified OpenX carriage Media:Bens_OpenX_Dual_Carriage.STL


Below are zipped folders of files for the printable parts of an OHM Dual Extruder:

Item Description File Link
SolidWorks Zipped Folder Containing OHM Dual Extruder Parts (SLDPRT)
STL Zipped folder containing OHM Dual Extruder Parts (STL)
Dual Calibration cubes Contains the two STL files and the AMF assembly Media:Test
Dual extrusion calibration part Contains the two STL files and the AMF assembly
Dual ball in cube Contains the two STL files and the AMF assembly
Hilbert Cube Contains the two STL files and the AMF assembly Media:Hilbert
Gear box Contains the two STL files and the AMF assembly Media:Gear
Dual colour dragon Contains the two STL files and the AMF assembly