Hello everybody, after a long time since the publication of my last instructable, I will explain step by step how I converted a Chinese low-quality 3D printer to a high precision dual 3D printer.

If you have seen one of my last instructables in which teach how I built the small HEXDRAKE hexapod, you may know the problem of creating moving parts by hand. Each piece is different and that leads in a big problem at the time of programming. Each leg had different values for each position of the hexapod. So I decided to get a 3D printer for future projects and achieve better results.

After looking at many forums, pages, etc; I search for a kit of a Prusa i3 to buy. I ended up buying a complete kit in Alliexpress. After mounting, set up and calibrate, I've been using the prinet for a long time, getting poor quality prints. And it was all due to poor quality parts, poor design of certain parts of the printer as components of bad quality.

The process involves design and print new and customized parts for the kit like: support for auto leveling, twin direct drive for the bowden system, twin spool holder, etc. Also a set of homemade PCB for new applications and new features for the printer. About firmware and software although the instructable is concerned about a dual printer much information is also useful for configuring printers with single extruder. You just have to skip the steps related to dual-extruder configuration in steps referred to firmware and software.

So let's start with the process below to transform the printer completely.

Video of the final result, made with time lapse function of octoprint:

Step 1: First Mount the Original Kit

The kit I purchased in Aliexpress was a Prusa I3 with a single extruder whose name was Jietai. The ad was similar to this, which is also from the same seller:



I will not go on the kit assembly instructions, because this falls outside this instructable. But I think that even so with the pictures and both pdf is more than enough to mount this kit for those who need it.

But I will go into the problems I had with my kit. I'm not saying that all kits have the same problems. These problems are based on what I said in the introduction: defectives and badly designed parts, and some components of very poor quality.

On the one hand the pieces to which I refer are those that are part of support for the coils. The printed pieces that hold the PVC tubes to the aluminum frame. These pieces were badly printed, the hole where it is supposed to intruduce pvc pipe was oval. In addition it was practically internally hollow. Something bad if has to support the weight of a new coil filament. Another piece was the piece that hold the EndStop for the Y axis. This piece in place where it stood it not allowed to use the whole Y-axis travel.

On the other hand the poor quality component to which I refer is the extruder that came with the kit. I had to replace the heater because the other broke in the 3rd printing. But besides the extruder had a big problem: inside the extruder the filament passed through many areas formed by various materials. The problem was that the joints between these parts was not good and the filament go through this joints. The extruder worked worse and needed more temperature to extrude due to the amount of extra plastic.

This is one of the main reasons why I decided to change the extruder. As would have to design and print a new support for the extruder, I thought about going a step further and put two extruder and change to the Bowden system.

Step 2: Designing Everything for Upgrading

I designed all parts using SolidWorks. In the assemblies of both the direct drive, X axis carriage and the complete assembly of the printer, I designed only the necessary things to design properly and seamlessly each of the pieces. I have not placed screws or nuts, only what is necessary and sufficient, such as certain rods.

One of the parts is used to keep the motor shaft and better subject. Also the Y axis endstop have repositioned using another piece to use all of the axis travel and the entire print area. Another added are a diagonal threaded rods to give more stability to the printer.

On the X axis carriage is designed for two E3D V6 with a 27mm separation between nozzles. Behind is the servo for auto leveling. And finally it´s have two ends where to place the duct for cooling the printing.

The duct has positioned fans so that the air reaches all areas of the duct. Air passes straight through the small holes to the nozzles. Also the air flows down to the piece being printed.
The axis carriage allows for the X axis travel of this printer, use fully the printing area leaving no dead zone for both extruders.

The drive Bowden consist of 4 pcs, 3 of which are part of the body and the other is the fitting where is housed the small bearing. Is designed for a 696Z bearing and a Mk7 for 1.75mm filament.

To finish the coil holders are designed for coils with a diameter from 30mm to 90mm.

In principle I did not upload the files of the parts but if anyone is really interested send a private message.

Step 3: Printing!!!

The title says it all. All the pieces were printed with the old extruder and the old printer status. All except the duct for layer cooling because with the problems of the previous extruder I commented It could not be printed properly.

Cones coils were printed with a height of 0.4mm layer. The remaining pieces with a height of 0.2mm layer. The 4 cones and the piece that hold the servo for auto leveling need support to be printed properly.

Returning to the problem of previous extruder, after printing all the parts printed using this extruder, some parts I had to fix a few glitches, but that I will discuss in the next step.

Step 4: Repairing and Preparing the Pieces

First thing is to remove the supports of the cones and the part that holds the servo. It is removed without much trouble, then clean the surface with sandpaper.

Then to fix small surface imperfections of some pieces, I take a little acetone with ABS and covered the gaps with the mix as you can see in the pictures.

The last thing to do is to prepare the parts for later assembly. Prepare all the holes where nuts will will be placed, screw holes, the areas where the PTFE tube will be inserted, etc. Using a drill and a small diamond grinders all this areas are prepared to facilitate the assembly. The last was preparing the extruders support. Using a yellow wax, I mark the extruders and place it in the stand. In this way the zones to be removed were stained with wax. And filing down a little ensures that the extruders are perfectly fixed to the support.

Step 5: Putting All Together

Let's start with a list of everything you need:

-Printed parts:

  • All printed pieces from the previous step.


  • A lot of M3 screws and nuts.
  • 2x 3mm spring for direct drive adjustment.
  • 4x M4 screws and nuts.
  • 4 meters M8 threaded rod.
  • A lot of M8 nuts and washers.
  • 2x 695z bearings.
  • 6mm axis.
  • 8x 608zz bearings.
  • 4x Push in fittings for the PTFE tube.
  • 2x Mk7 hobbed gear for 1.75 mm
  • Optional: 4x heatsink 42x42 mm and paste.


  • 2x E3D V6 complete bowden kit.
  • Nema 17 stepper motor.
  • A4988 Stepper driver.
  • 2x 12v fan for bed coolling.
  • Tower pro SG90 servo for auto leveling.

All instructions below follow the order of the photos in this step.

First I started mounting the threaded rods diagonal to give more stability to the printer. We need to change the screws of the piece that holds the rod of Z axis by other more long that reach the back of the frame. In this way you can place the pieces that hold the rod diagonal. The following is placing extra legs to end up with the diagonal rods.

To do so the back rods must be replaced by other longer. In my case 40cm rods. Then just place the pieces and secure with several 8mm nuts and washers. And finally two rods of 40 cm are cut and put in place with more nuts and washers. You have to let protrude above much as possible to later put the piece that will support the rod for filament coils.

The next two pieces are very simple to install. The first is placed between the Y axis motor axis and the rods. In this way the motor is secured so they do not move when the table movements are fast. The second piece holds the limit between the smooth rod and the threaded rod under the table. In this way you can use all the print area. The sensor is activated when one of the bearings beneath the table gets close enough. Therefore we must place at the right distance to ensure that by making the homing extruders are in the position 0 of the table. It may be necessary to move the frame to get it.

Now is time to remove the old carriage and place the new system. Simply place the two M4 nuts that secured the support of the extruders to the carriage and the other holes with M3 nuts. The support is placed in the car, after the E3D extruders assembled and then secured with the M-shaped piece and 3 screws. To end with the X axis carriage, is just place the piece with the servo for auto leveling. It was necessary to remove the back of the servo to place it. Then put the arm on the servo with the limit switch at the end.

We now turn to place the horizontal rod where motors are placed extruders. Simply place the two pieces as you can see in the pictures. It is not necessary to place them exactly at a certain height. While having high enough to handle the Bowden direct drive, to switch filament, it will suffice. But before placing them in necessary mount first. Bowden direct drive are designed in 4 parts. Three of them form the body and the fourth is for adjusting of the bearing against the filament and hobbed gear.

Hobbed gear must place at the right distance to the toothed portion aligns with the hole through which enter the filament. As you can see in the pictures. To complete the assembling, place the bearing with its axis in place. In my case I recycle the shaft and I had to cut it into two parts for each motor. When both are assembled they can be placed on the horizontal rod. Once subjects with various nuts, under the two motors place the small piece so that the body of the motors will have a support.

We now turn to mount the spool holder. In each cone must be placed two bearings, in this way the coils can rotate freely. For the spool holder two threaded rods of 20cm are needed. These rods are placed using the connecting pieces between these rods and the diagonal rods of the printer. With this spool holder may be worn filament coils between 30cm to 90cm of inner diameter.

Once you assembled all the necessary starts to wire all the new things we've added. It will be necessary to extend the servo cables and extruders fans as well as fans layer. I put a picture of the connections for the RAMPS. Following this photo is very simple to wire everything.

-Optional:You can place aluminum heatsinks to the motors that move more. They can be very useful to help the motors to dissipate the heat generated in long-lasting prints.

In next steps we will see how to construct two small PCBs to expand the functions of the printer.

Step 6: PCB for Fan Control

By using a second extruder, we can only control a fan. Therefore it is necessary to build a small circuto that allows us to control as many fans as you need using the RAMPS free pins. In my case I need to control three fans independently. Necessary things:

  • PCB
  • 3x TIP41C NPN transistor.
  • 3x 0,1 uf electrolytic capacitor.
  • 3x 1n4001 diode.
  • 3x 8,2 k resistor.
  • 3x 1k resistor.
  • Male pins.
  • Cable.

Fans are supplied from the PCB using pins 12v and GND next to the RAMPS capacitors as the fan extender that you can see in the photo. The PCB is divided into three parts, each part to a fan. In each part there are three pins: the two on the left is where the fan is connected and the third is the pin that connects to the signal pin in RAMPS.

I will use the pins 40 and 42 to control individually fans extruders. Fans will work when the extruder reach a certain temperature to cool. But that will be seen in the step: Setting up firmware Marlin 1.0.2.

Step 7: PCB Control for the Auto Leveling Servo

You may wonder for that serves this small PCB. Because the ramps have several pins in which plug and use servos directly. Truly this board would only be necessary in case you have problems similar to those I had using RAMPS pins directly. Necessary things:

  • PCB.
  • LM7805.
  • TIP41C.
  • 2x 10 uf electrolytic capacitor.
  • 1k resistor.

The problem I had when using the servo directly with RAMPS pin was that servo Jerks at certain times. When the second extruder had reached the required temperature the servo jerks. Especially when the extruder is turned off and on to maintain the temperature. It seemed that the signal of the extruder heater were coupled with the servo signal causing the servo jerks a lot.

I was not able to find a good solution to eliminate the problem completely, so I ended up creating this small PCB.

With this board it feeds separately to servo using a linear regulator LM7805 and TIP41C NPN transistor used as a switch to power cycle the servo when necessary.

The board get 12V directly from the power supply of the printer, connecting the cable to the central pin of this little board. The unique pins to be connected to the RAMPS are servo signal which is located just next to the servo connector, one GND connection between the two boards, and control signal of the NPN used as a switch.

When the pin used to control the NPN transistor has a high state, the servo power on and can be used normally. It will be used to perform the tasks of leveling the bed. Then when you have finished the transistor control pin will set in low state and the servo will shut down. In this way any residual signal that reaches the servo will not produce any movement since the servo feed will be cut by the transistor.

Step 8: Setting Up Marlin 1.0.2

Now we set up all the necessary firmware and software. We started setting up Marlin firmware version 1.0.2.

Marlin 1.0.2

Everything explained in this step is to configure the firmware for dual extruder. Also you can use to configure printers with a single extruder but change a few things.

Let's begin:

All the things that will change we will be on file "confifuration.h" and "configuration_adv.h".

First "configuration.h":

-General Settings:

  • Set the communication speed in baud. There are two speeds commonly used by 3D printing software, the 250000 and 115200 baud rate. Remember him because you will need it when configuring Repetier.
  • Now we choose the type of motherboard of your printer. To do this, go to "boards.h" and find the board that matches your setup, copy and paste the name. In my case itis Ramps 1.4 with dual extruder and bed: "MOTHERBOARD BOARD_RAMPS_13_EE".
#define BAUDRATE 115200

  • This is optional, just in case you want to give a personal name to the printer.
#define CUSTOM_MENDEL_NAME "Prusa I3 Dual"
  • Define the number of extruders we have.
  • And the type of power supply that feeds our printer.
#define EXTRUDERS 2
// 1 = ATX
// 2 = X-Box 360 203Watts (the blue wire connected to PS_ON and the red wire to VCC)
#define POWER_SUPPLY 1

-Thermal Settings:

  • From the list we have to find the number that defines the types of thermistors we use in extruders and in bed. You have to choose the right if you want to have correct temperature readings.
//// Temperature sensor settings:
// -2 is thermocouple with MAX6675 (only for sensor 0)
// -1 is thermocouple with AD595
// 0 is not used
// 1 is 100k thermistor - best choice for EPCOS 100k (4.7k pullup)
// 2 is 200k thermistor - ATC Semitec 204GT-2 (4.7k pullup)
// 3 is Mendel-parts thermistor (4.7k pullup)
// 4 is 10k thermistor !! do not use it for a hotend. It gives bad resolution at high temp. !!
// 5 is 100K thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (4.7k pullup)
// 6 is 100k EPCOS - Not as accurate as table 1 (created using a fluke thermocouple) (4.7k pullup)
// 7 is 100k Honeywell thermistor 135-104LAG-J01 (4.7k pullup)
// 71 is 100k Honeywell thermistor 135-104LAF-J01 (4.7k pullup)
// 8 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup)
// 9 is 100k GE Sensing AL03006-58.2K-97-G1 (4.7k pullup)
// 10 is 100k RS thermistor 198-961 (4.7k pullup)
// 11 is 100k beta 3950 1% thermistor (4.7k pullup)
// 12 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) (calibrated for Makibox hot bed)
// 13 is 100k Hisens 3950  1% up to 300°C for hotend "Simple ONE " & "Hotend "All In ONE" 
// 20 is the PT100 circuit found in the Ultimainboard V2.x
// 60 is 100k Maker's Tool Works Kapton Bed Thermistor beta=3950
//    1k ohm pullup tables - This is not normal, you would have to have changed out your 4.7k for 1k
//                          (but gives greater accuracy and more stable PID)
// 51 is 100k thermistor - EPCOS (1k pullup)
// 52 is 200k thermistor - ATC Semitec 204GT-2 (1k pullup)
// 55 is 100k thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (1k pullup)
// 1047 is Pt1000 with 4k7 pullup
// 1010 is Pt1000 with 1k pullup (non standard)
// 147 is Pt100 with 4k7 pullup
// 110 is Pt100 with 1k pullup (non standard)

#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 1
#define TEMP_SENSOR_2 0
  • With this you define minimum temperature values that are used to verify that the sensor wires are not broken.
  • And also the highest temperatures of the extruders and bed. This ensures that these temperatures are not exceeded, switching off the extruder or bed.

#define HEATER_0_MINTEMP 5
#define HEATER_1_MINTEMP 5
#define HEATER_2_MINTEMP 5
#define BED_MINTEMP 5

#define HEATER_0_MAXTEMP 275
#define HEATER_1_MAXTEMP 275
#define HEATER_2_MAXTEMP 275
#define BED_MAXTEMP 120

*PID values(extruders and bed) we will adjust in the final calibration step. For now we will use the default values.

  • Define this if not defined. This protection prevents extrusion if the temperature of the hot end is under the melting point of the material.

  • After define the minimum temperature extrusion.


  • This is a feature to protect your printer if it has a thermistor coming off place. If a thermistor come off, it will read a lower temperature than actual. The system will turn the heater on forever, burning up the filament and anything else around.


-Mechanical Settings:

  • It is a good use a pull-up circuit for a basic switch. The pull-ups resistance are needed if you directly connect a mechanical endstop between the signal and ground pins.

  • Define the following depending on whether the endstop: normally open (NO) or normally closed (NC).
  • NO = true
  • NC = false
  • Define Disable_max_endstop if you only use min endstops. If it is the opposite define Disable_min_endstop. And if you use min and max endstop leaves both lines commented.
const bool X_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
const bool Y_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
const bool Z_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
const bool X_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
const bool Y_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.

  • If you want all the motors are turned off when not using write true in all these lines.
  • Now set if you want to reverse the direction of the motors. The direction of each motor is related to the design of each printer. The direction of each motor can be changed or turning the motor connector or through these lines.
#define DISABLE_X false
#define DISABLE_Y false
#define DISABLE_Z false
#define DISABLE_E false // For all extruders
#define DISABLE_INACTIVE_EXTRUDER true //disable only inactive extruders and keep active extruder enabled

#define INVERT_X_DIR true    
#define INVERT_Y_DIR true   
#define INVERT_Z_DIR true  
#define INVERT_E0_DIR true 
#define INVERT_E1_DIR true   
#define INVERT_E2_DIR false
  • Set direction of endstops when homing; 1=MAX, -1=MIN
  • If you let the following lines as true axes will not move lower than of homing position, or coordinates above the maximum position.
  • Finally set the maximum distances that can reach the axes.
#define X_HOME_DIR -1
#define Y_HOME_DIR -1
#define Z_HOME_DIR -1

#define min_software_endstops true 
#define max_software_endstops true 

#define X_MAX_POS 224
#define X_MIN_POS 0
#define Y_MAX_POS 200
#define Y_MIN_POS 0
#define Z_MAX_POS 180
#define Z_MIN_POS 0

-Auto leveling Settings:

  • If you also have a system for self leveling define these lines to activate the auto leveling function.
  • The mode of auto leveling the bed can by a grid, as many points as you want, or by 3 points.
  • The most used and detailed is the grid. With the 4 following lines the vertices of said grid are defined. And then define the number of grid points per dimension.


  • The offsets between probe relative to the extruder will get it in the final calibration step.
  • The elevation value z axis before making the homing must be sufficient to allow the servo arm down before making the measurement. The homing is done with the command G28 and must be done before G29 bed leveling command.

  • The other two values are those used during the G29 command. The first is recommended that exceeds the value of the z-axis offset between hotend and test point. So you should define after getting the offset.
    And the last value is the extra height to raise the Z axis between each measurement point.

  • About Z_SAFE_HOMING, this feature is meant to avoid Z homing with probe outside the bed area.

  #define XY_TRAVEL_SPEED 6000 

  #define Z_RAISE_BEFORE_PROBING 14    
  #define Z_SAFE_HOMING

-Movement Settings:

  • It is the total number of axis (3) plus the number of extruders (2).
  • And the feed rate values is the moving speed of the axis when homing in [mm/min]
#define NUM_AXIS 5
#define HOMING_FEEDRATE {25*60, 25*60, 2*60, 0}
  • The controller needs to know the steps/mm ratio to send the appropriate steps to reach the required distance. So you must calculate the steps per mm for each motor. There are calculators(in Repetier or internet) that allow you to calculate these values depending on the characteristics of the belts or threaded rods.
  • Then only it remains define the maximum acceleration values for each movement.

#define DEFAULT_AXIS_STEPS_PER_UNIT   {79.32,79.32,4000,100.58}
#define DEFAULT_MAX_FEEDRATE          {400, 400, 2, 25}    // (mm/sec)
#define DEFAULT_MAX_ACCELERATION      {9000,9000,100,10000} 

#define DEFAULT_ACCELERATION          2000    
  • Defines the offset between the first and second extruder. For me I have only to be defined in the x axis.
#define EXTRUDER_OFFSET_X {0.0, -27}

-Servo Settings:

  • Finally we need to define the number of servos that we will use.
  • For that we have to mark a 0 on that axis we will use a endstop driven by a servo.
  • And the angles of the positions of pickup and measurement. Which you will get in the final calibration step.
#define NUM_SERVOS 1

#define SERVO_ENDSTOPS {-1, -1, 0}
#define SERVO_ENDSTOP_ANGLES {0,0, 0,0, 10,90}


-Fan Settings:

  • You just have to define the pins to control fans extruders. I use the pins 40 and 42. Then the temperature from which the fans start functioning to cool the extruder and also the speed.
#define EXTRUDER_0_AUTO_FAN_PIN   40
#define EXTRUDER_1_AUTO_FAN_PIN   42
#define EXTRUDER_2_AUTO_FAN_PIN   -1

-Upload the firmware:

Connect the board, select the board and the port in arduino and upload the firmware.

Step 9: Setting Up Repetier 1.5.5

Make sure your printer is connected and enabled. Some printer need special driver. If you have uploaded the firmware to your printer, the driver is already installed.

At the top you see a drop down box, with the currently selected printer. To create a new printer you only need to change the printer name and press “Apply”. The new printer will start with the same settings as the last selected printer.

-Connection Settings:

The most used and the most common is the serial communication via the USB cable. So select the port that you used before to upload the firmware. If you do not see your port click “Refresh Ports”. Then select the baud rate that you entered into the Marlin firmware.

The transfer protocol determines, how the host will communicate with the printer. Marlin firmware work in ASCII mode. You can leave this on “Auto detect”.

Finally It only remains define the settings reset to connect and emergency. You can leave the restart connect off or choose one of the modes. And restart on emergency when an emergency stop is made, are the actions that the host send to the printer. Select your own.

-Printer Settings:

The second tab defines important settings of the printer. You can change these settings anytime. Some of these values are similar to those defined in the firmware, so you can write the same or define others.

For example, the travel feed rate and the Z-axis feed rate used when you move the axis with the manual controls, also the speed of extrusion and retraction of the extruders. You can also define default temperatures extruders and bed although these values are rarely used. So you can select your own values to suit the printer or leave it as default.

With the next two check boxes you will know the temperature of the extruders and the bed and you will want to know this, so leave this option checked. This is done by sending the M105 command to the printer. The host will show the read temperature at the bottom in the status bar, so removing these messages from the log makes it much more readable so check the second box.You can also select how often you want the host to check the temperature. The default 3 seconds are a good start.

The park position is the same as the position 0 for all axes of the printer, leaving all values to 0 if that's the homing position of your printer. Otherwise put the values of your printer.

The next check boxes define, what the printer should do, when a print is finished and if a SD card is available. Check the boxes as you like to make your printer run them.

With “Add to comp. printing time” you define, how the host should correct the computed printing time. When the host computes the time from g-code, it assumes all moves are executed at the feed rate requested. Ofter some prints, where you compared the computed and real printing time, you should be able to figure out how much percent you need to add to the computed time. Don’t expect to match every print. Depending on the geometry, the time will still differ a bit.

And at the end you can change the moving direction in manual control for each axis. In this way you will not need to change the firmware or turn around the motor connector.

-Extruder Settings:

On the third tab you can define the numbers of extruders and the max. temperatures of the extruders and bed that are shown in the manual control.

The max volume per second defines the maximum amount of filament in mm³, that the extruder can melt per second.

For each extruder you can define a name, a nozzle diameter, a temperature offset, which is added to the filament temperature, if this extruder is selected, a color, which is used for preview, and x and y offset, which adjusts the extruder position for multi extruder prints. Marlin firmware correct the offset themself, so you can leave it 0 or put the same value.

-Dimension printer settings:

The “Printer Shape” tab defines the shape of your build area. The host will use this to limit your moves and to check, if your models fit onto the print bed. You can also define the position of the x and y end stop.

This concludes Repetier settings for use with your printer. The last two tabs are used for advanced configurations that will not go in this instructable.

Step 10: Setting Up Slic3r 1.9.2

Now we will get the complete configuration of Slic3r 1.2.9. If this is the first time you will use Slic3r, Slic3r will start a configuration wizard. The configuration wizard asks a series of questions and creates a configuration for Slic3r to start with.

-Firmware Type:

The first step prompts for the firmware that the printer uses. The gcode produced by Slic3r is tailored to particular types of firmware.

-Bed Size:

This setting defines the maximum distance the extruder may travel along the X and Y axis. Be sure to measure from the lower left corner where the extruder nozzle rests when are the home position to the maximum distance the nozzle can travel in each direction.

-Nozzle Diameter:

The diameter of the hot-end nozzle is usually clearly displayed either in the description of the hot-end, or in the associated documentation, when the hot-end is purchased. So put here the diameter of the extruder nozzle. Even if you have several extruders, if different, places one of the values and later configure each extruder separately.

-Filament diameter:

It is vital to give it as precise a value as possible for the filament diameter. The diameter can vary between manufacturers and even between batches. Therefore it is highly recommended to take multiple measurements from along a length of the filament and use the average. For a dual printer if the filaments have different diameters put the value of one of them here. Later we configure the characteristics of each filament.

-Extrusion Temperature:

The extrusion temperature will depend on the material. The supplier should provide guidance as to which temperatures are suitable.

This is one parameter which you will want to fine tune. The optimal temperature can vary even between colours of the same material. Another factor which may affect the chosen temperature is how fast the extrusion is, where generally faster extrusion runs hotter.

Similarly for dual extruder we will define later the temperature for each extruder or material, and the bed.

-Bed Temeperature:

If the printer has a heated bed then this parameter may be set. As with the extruder temperature, the value will depend on the material used.

Similarly for dual extruder we will define later the temperature for each extruder or material, and the bed.

-Now we move to full Slic3r settings:
-Print settings:
--Layers and perimeters:
This tab provides the opportunity to change settings related to the actual print. The settings on this tab will be modified regularly, possibly for each model printed.
  • Layer Height: is the thickness of each layer, and it is the step along the vertical axis taken before extruding a new layer atop the previous one.
  • First Layer Height: is the thickness of the first layer. It is often used a greater height to achieve better adherence to the table or for irregular surfaces.
  • Perimeters: defines the minimum number of vertical shells (walls) a print will have. Unless the model requires single width walls it is generally recommended to have a minimum of two perimeters.
  • Spiral Vase: This option allows you to print parts of a single perimeter that are empty inside and don´t have upper layers to close the object. This option allows you to print a single perimeter continuously and gradually changing the height of the Z axis. Is special for piece such as vases of a single perimeter.

  • Solid Layers: Are the upper and lowermost layers that sandwich the model. It is recommended to have at least two bottom layers. A similar consideration is required for the top layers. Because the intermediate layers are likely to be filled with a pattern set less than 100% then the covering layers will have to bridge this pattern and this can require more than one pass to cover completely.

  • The next 4 check box: This check box improve the quality of the parts avoiding certain problems. The extra perimeter is an option to be used only in special cases. For normal and complex parts is best to leave this option is not checked. The other trhee check box it is advisable to leave them checked. Allow thus avoid crossing the perimeters with the extruder, detect thin walls and bridges for better print their perimeters.

  • Seam Position: The best choice is random. Prevents all layers start and finish at the same points, getting a better esthetic result of the walls of the piece.

  • The final choice depends on each piece to be printed, to get a correct impression of each layer is important to define which part of each layer do before.


  • Fill Density: is defined between 0 and 100%. For the majority of cases it makes no sense to 100% fill the model with plastic, this would be a waste of material and take a long time. Instead, most models can be filled with less material which is then sandwiched between layers filled at 100%.
  • Fill Pattern and Top/Bottom Fill Patern: will depend on the kind of model, the desired structural strength, print speed, and personal taste. The more exotic fill methods are usually too slow and unnecessarily complex for most use cases, and so most of the time the infill pattern is either rectilinear, line, or honeycomb.
  • Combin Infill Every: Will produce sparse vertical infill by skipping a set number of layers. This can be used to speed up print times where the missing infill is acceptable. I don´t use it.
  • Only Infill Where Needed: Slic3r will analyse the model and choose where infill is required in order to support internal ceilings and overhangs. Useful for reducing time and materials. I don´t use it.
  • Solid Infill Every: Forces a solid fill pattern on the specified layers. Zero will disable this option.
  • Fill Angle: By default the infill pattern runs at 45° to the model to provide the best adhesion to wall structures. Infill extrusions that run adjacent to perimeters are liable to de-laminate under stress. Some models may benefit from rotating the fill angle to ensure the optimal direction of the extrusion.
  • Solid Infill Threshold Area: Small areas within the model are usually best off being filled completely to provide structural integrity. Adjust this option to balance these needs.
  • Only Retract When Crossing Perimeters: Retracting, to prevent ooze, is unnecessary if the extruder remains within the boundaries of the model. Care should be taken if the print material oozes excessively, as not retracting may result in enough material loss to affect the quality of the subsequent extrusion.
  • Infill Before Perimeters: Reverses the order in which the layer is printed. Usually the perimeter is laid down initially, followed by the infill.

--Skirt and Brim:

The Skirt setting adds an extrusion a short distance away from the perimiter of the object. This can ensure that the material is flowing smoothly from the extruder before it starts on the model proper.

  • Loops: How many circuits should be completed before starting on the model.
  • Distance From Object: The millimeters between the object and the skirt.
  • Skirt Height: The number of layers to lay down a skirt for. For ensuring the material is flowing smoothly, one layer is sufficient.
  • Minimum Extrusion Length: Dictates a minimum number of millimeters that the skirt should be, should the loop around the object not be enough.
  • Brim Width: is used to add more perimeters to the first layer, as a base flange, in order to provide more surface area for the print to stick to the bed with in order to reduce warping.

--Support Matterial:

For models with larger overhangs a support structure may have to be printed below it. This incurs the use of more material, longer print times, and post printing clean-up. Only for models that need it.

  • Generate Support Material: the first thing to do is activate the support material option by checking the box.
  • Overhang Threshold: Providing a value of zero tells Slic3r to detect places to provide support automatically, otherwise the degrees given will be used. It is strongly recommended to set the threshold to zero and allow Slic3r to determine the support required.
  • Enforce Support: Small models, and those with small footprints, can sometimes break or detach from the bed. Therefore this option will cause support structures to be printed for the given number of layers, regardless of the angle threshold value.
  • Contact Z Distance: is the vertical distance between object and support material interface. Setting this to 0 will also prevent Slic3r from ussing brigde flow and speed for the first object layer.
  • Pattern:As with infill, there are several patterns available for the support structure. Select your own.
  • Pattern Spacing: determines the distance between support lines, and is akin to infill density apart from being defined only in mm. If changing this attribute take into account the width of the support extrusion and the amount of support material that will adhere to the object.
  • Pattern Angle: If the support structure does run along the length of a wall then this option allows the direction of the support lines to be rotated.

  • Don´t Support Bridge: use this option only when needed. Check this option to support only for longers bridge.


This tab offers parameters to fine tune printer speeds. Differentiation between external, small and other perimeters, infill locations, and bridges and gaps are available, as well as the ability to slow down for the first layer.

  • Perimeters: In expert mode this parameter can be increased slightly.
  • Small Perimeters: Meant for holes, islands and fine details, a slower speed here is recommended.
  • External Perimeters: A slightly slower value may ensure cleaner surfaces.
  • Infill: As fast as you can without compromising the integrity of the fill structure.
  • Solid Infill: The bottom of the model, and any additional solid layers is usually slightly slower than infill but faster than perimeters.
  • Top Solid Infill: Allow time for the extrusion to cleanly cover the previous top layers and result in a tidy top surface. The last few layers should have bridged the infill structure nicely, preparing the way for a neat finish.
  • Support Material: Generally support structures are quick and dirty, and so long as the base is adequately supported they can be built as quickly as they can.
  • Bridges: Having the extrusion span distances depends on the material and cooling. Going too slow will result in sagging, too fast will result in broken strands. Generally bridging runs slower than perimeters.
  • Gap Fill: Filling in small gaps results in the extruder quickly oscillating and the resulting shaking and resonance could have a detrimental affect on the printer. A smaller value here can guard against this.
  • Travel: As fast as your printer will allow in order to minimise ooze.
  • First Layer Speed: the first layer is important to lay down correctly, and a slower pace helps enormously. Setting a value of 50% can really help.
  • Acceleration Control: is an advanced setting allowing acceleration settings for perimeters, infill, bridge, as well as a default setting, to be made. Deciding which values to set depends on the capabilities of the machine. Any settings within the firmware may be a good starting point.

--Multiple Extruders:

A printer with more than one extruder can be used in different ways. If you have a single part model, you can assign different roles to each extruder: for example, you can infill using a larger nozzle or you can build support material with soluble filament.

This part allows you to select which extruder print each of the parts of a layer. For example print all with the same extruder or print perimeters with an extruder and the rest of the layer with the other. And many more convinations.


One reason for modifying the extrusion width has already been discussed: increasing first layer extrusion width in order to improve bed adhesion. There are some further cases where it may be beneficial to modify extrusion widths:

  • Perimeter and External Perimetters: A lower value will produce thinner extrusions which in turn will produce more accurate surfaces.
  • Infill and Solid Infill: A thicker extrusion for infill will produce faster prints and stronger parts.
  • Top solid Infill: A thinner extrusion will improve surface finish and ensure corners are tightly filled.
  • Support Material: As with the infill options, a thicker extrusion will speed up print time.
  • Infill/Perimeters Overlap: This settings applies and addittional overlap between infill and perimetters for beter bonding.
  • Bridge Flow Ratio: this affects the amount of plastic for bridging.
  • XY Size Compesation: With this the object will be grown/shrunk in the XY plane by this value (negative =inwards, positive outwards). Very usefull for fine-tuning hole sizes. This value will be calculate on the final calibration step.
  • Threads: are used to parallelize long-running tasks. It´s above the number of available cores/proccesors.
  • Resolution: used to simplify the input file for speeding up the slicing job and reducing memory usage. High resolution models often carry more detail than printers can render. Set to zero to disable and use full resolution form input.

- Filament Settings:

In the settings window filament we need to have as many profiles as extruders have the printer. In this case you must be at least two profiles for the two types of filaments that have placed in the printer. You can create as many profiles as filaments have at your disposal. When placing a new coil into the printer will need to create a new profile, which extruder will be placed the coil.


  • Color: This option allows you to put the color that has the filament. In this way the object to be printed will look with the color of the filament that are going to print.
  • Diameter: It is vital to give it as precise a value as possible for the filament diameter. Therefore it is highly recommended to take multiple measurements from along a length of the filament and use the average.
  • Extrusion multiplier: allows the fine tuning of the extrusion flow rate, and is is given as a factor, (1 means 100%, 1.5 would mean 150%). It varies the amount of plastic proportionally and should be changed in very small steps as the effects are very visible. This configuration is calculated at the final calibration step.
  • Temperature: It sets the optimum temperatures to print each type of filament as in the configuration wizard. The temperature of both the extruder and the bed. It also allows you to print the first layer at a temperature and the rest at another temperature.


  • Keep fan always on: If this is enabled, fan will never be disabled and will be kept running at least at its minimum speed.
  • Enable auto cooling: This enables/disables the cooling logic.
  • Fan speed: Determines the minimum and maximum speeds. Useful for fans that run too fast by default.
  • Bridges fan speed: As the material stretches over wide gaps, it makes sense to try and cool it as much as possible, therefore a full fan speed is recommended.
  • Disable fan for first: Section detailed how important the first layer is, and so it makes sense not to apply the fan until sure the print is securely attached to the bed. Keeping the fan turned off for the first two or three layers is a good idea.
  • Enable fan if print time is below: Triggers the fan if the layer will be completed within the given number of seconds.
  • Slow down if layer print time is below: Slows down the print if the layer will be completed within the given number of seconds.
  • Min print speed: A lower limit on how slowly a layer can be printed.

-Printer Settings:


  • Bed Shape:Simply select the type of table, it´s dimensions and origin position. You also have the option to create a custom sahpe.
  • Z offset: can be used to compensate for an incorrectly calibrated Z end-stop. If the nozzle stops slightly too far from the bed, then adding a negative value will offset all layers by that amount. The correct solution however is to fix the end-stop.
  • Extruders: the number of extruder of the printer. Incrementing this value will dynamically add another extruder definition to the left-hand pane.
  • Octoprint Upload: this option allow Slic3r upload Gcodes files to Octoprint. This should contain the hostname or IP adress and the API key of the Octoprint.
  • G-code flavor: defines the dialect of G-code generated.

--Custom G-code:

Just add on the part of start G-code the command G29 behind the G28 command to use the auto leveling feature.


  • Nozzle diameter: Simply the diameter of the nozzle of the extruder.
  • Extruder offset: the offset is handled by the firmware. But you can also put here the same value. The offset should be placed in the configuration of the second extruder, because the first must be at position 0,0.
  • Length: the number of millimeters to retract. A value of between 1 and 2mm is usually recommended. Bowden extruders may need up to 4 or 5mm due to the hysteresis introduced by the tube.
  • Lift Z: Raises the entire extruder on the Z axis by that many millimeters during each travel. This can be useful to ensure the nozzle will not catch on any already laid filament. A value of 0.1mm is usually sufficient.
  • Speed: The speed at which the extruder motor will pull back the filament. The value should be set to as quick as the extruder can handle without skipping steps.
  • Extra length on restart: Adds an extra length of filament after the retraction is compensated after the travel move. This setting is rarely used, however should the print show signs of not having enough material after travel moves then it may be useful to add a small amount of additional material.
  • Minimum travel after retraction: Triggering a retraction after very short moves is usually unnecessary as the amount of ooze is usually insignificant and it slows down the print times. Set the number of millimeters minimum distance the nozzle must move before considering a retraction. If the printer handles ooze well this can be increased to 5 or 6mm.
  • Retract on layer change: Movement along the Z axis must also be considered when dealing with oozing, otherwise blobs may occur. It is recommended to leave this setting on.
  • Wipe before retract: Moves the nozzle whilst retracting so as to reduce the chances of a blob forming.
  • Retraction when tool is disabled: When retraction is triggered before changing tool, filament is pulled back by the specified amount. And with the extra length on restart the extruder will push this additional amount of filament.

Step 11: Final Calibration

To finish calibrating the printer connect it to the computer and connect it to Repetier Host to perform all of the following steps:

-PID Values for extruders and bed:

Go to Repetier and enter on the manual control Tab. Send the following commands to the printer and start PID auto tune:

M303 E0 S200 C8

This will heat the first nozzle (E0), and cycle around the target temperature 8 times (C8) at the given temperature (S200) and return values for P I and D. It is understood that the two extruders are equal and therefore the PID values are the same.

When the auto tune ends on the Repetier log appear at the end the values of Kd, Kp and Ki. Open Arduino and load the firmware. Then go to the part of the PID of the extruders and put those values. It should be like this:

    #define  DEFAULT_Kp 13.60    
    #define  DEFAULT_Ki 0.81
    #define  DEFAULT_Kd 56.81

And for the bed. Send this command:

M303 E-1 S60 C8

Then go to the part of the PID of the bed and put those values. It should be like this:

    #define  DEFAULT_bedKp 115.27
    #define  DEFAULT_bedKi 6.28
    #define  DEFAULT_bedKd 528.80

-Offsets between probe relative to the extruder and the angles of the positions of pickup and measurement:

Using the following instructions may be obtained offsets in all axes between the first extruder and probe. So let's begin:

  • You need to determine at which servo angles your Z probe will be extended or retracted. Use the command M280 P0 S{angle} (M280 P0 S60 moves the servo to 60º) to test various positions. Performs various tests to find the best angles for the positions of pickup and measurement. Then go to the firmware of marlin and write the angle at which the probe is extended (pointing down) and the angle at which it is out of the way. Find it in the servo settings of the firmware:
#define SERVO_ENDSTOP_ANGLES {0,0, 0,0, 10,90}

Upload the firmware and reconnect the printer.

  • Then we will get the offsets:
  • Make a small mark in the bed with a marker/felt-tip pen or use the center of the bed where the termistor is placed.
  • Place the hotend tip as exactly as possible on the mark, touching the bed. Raise the hotend 0.1mm and zero all axis (G92 X0 Y0 Z0).
  • Raise the hotend 10mm (or more) for probe clearance, lower the Z probe with M401 and place it just on that mark by moving X, Y and Z.
  • Lower the Z in 0.1mm steps, with the probe always touching the mark (it may be necessary to adjust X and Y as well) until you hear the "click" meaning the mechanical endstop was trigged. You can confirm with M119.
  • Now you have the probe in the same place as your hotend tip was before. Perform a M114 and write down the values, for example: X:15 Y:-53 Z:11.52.
  • You can raise the z probe with M402 command.
  • Fill the defines bellow multiplying the values by "-1" (just change the signal.
  #define Z_PROBE_OFFSET_FROM_EXTRUDER -11.52</p>

-XY Size Compesation:

To check if an offset in the XY plane is necessary, print a part that has several holes of various shapes: round, square and hexagonal. If steps per millimeter of each axis are well outside dimensions should be fine. Instead internal perimeters is easier to be smaller.

To correct measure with a caliper all the holes and takes an average value of the difference between the dimensions they would have to have and which they have been printed. A normal value should be 0.1 to, for example, drills to have the same dimensions as the screws.

At the same time to print the part you can see if you need to change the width extrusion for the last layer. In my case I had to increase it to get a better finish of the pieces. (105%)

-Extrusion Multiplier:

Finally we need to know whether it will be necessary to change the extrusion multiplier. The reasons that may cause the width of the tracks, once printed the plastic, not be correct are: an extruder in poor condition (my case with the old extruder), or that the filament diameter is not uniform or have misconfigured.

So to check prints a small cube for example. Ser Slic3r to do the cube without solid top layer and with a single perimeter. After measured the wall with the caliper. The wall must measure exactly the same as the size of the extruder nozzle. In my case by setting the real diameters of the filaments I did not need to change anything.

Step 12: Octoprint on the Raspberry Pi

In the following steps I will show step by step how to configure and use octoprint installed in a raspberry pi with the printer. The main materials needed are:


  • Raspberry pi. If possible it is best to use a Raspberry Pi 2. I only had a couple of raspberry pi B so I use one of them.
  • Wifi dongle compatible with the Raspberry Pi. If you do not have you can use a cable to connect directly to the router.
  • The Raspi Camera or a similar camera. You can also use a USB camera.
  • SD card. I use a 8 GB SD card.
  • Power supply, keyboard, mouse and a screen to configure the raspberry pi.


  • Win32 disk imager.
  • Octoprint image.
  • Fing for smartphone. You can also use any other program similar to those for computer.

Besides setting Octoprint I will show you how to make a simple support for the camera and a couple of small PCB to light the printing area.

Let's start.

Step 13: Setting Up Octoprint

The first thing is to have downloaded everything you need:

Once you have both downloaded and ready files:

  1. Extracts the Octoprint image.
  2. Insert yout SD card.
  3. Next Open Win32 disk imager as Administrator.
  4. You will see a windows like the image. Click on the button with a small folder and find the place where you have extracted the image of Octoprint. Then make sure you have selected the appropriate letter to your SD next to the button with a folder.
  5. To finish click the write botton and wait for it to finish recording the image

Once completed we will set the internet we use with our raspberry pi. This latest version of Octoprint lets you configure the connection to use by a small .txt file. Allowing more easily without having to enter our raspberry desktop to configure the wifi. So:

  1. Enter the root folder of the SD and locate the "octopi-Network.txt" file.
  2. All lines are commented with pads. Deletes pads that correspond to your WiFi network, or if using an Ethernet cable deleted pads of that part.
  3. Then if you are using a wireless network type your SSID and and key of your nwtwork.
  4. Save the file.
  5. Insert the SD, wifi dongle or ethernet cable and the Raspi Camera in the raspberry pi. Connect the Raspberry pi to a screen.

Now power on your Raspberry pi. With the first power on after loading a window (Raspi-Config) will appear where we set a series of things of raspberry pi. Do this:

  1. Expand filesystem: in this windows you move using the arrows keys and then press enter. With this octoprint will use all the SD space.
  2. Change password: you can change the passwork por the pi user. It is not important because then we can access to Octoprint from any device without having to login all the time in our raspberry pi.
  3. Internationalisation Options: then enter in "Change locale" and then find your language and country.
  4. Enable camera: with this enable de raspberry camera. So hit enter and select enable :D.
  5. Advanced Options: In these settings it is only necessary to change the host name if you want. Remember it.
  6. Then move to finish and select ok. The system wll reboot. And you will finish. Then shutdown and power off the rapberry. Disconnect everything except the wifi dongle, the camera and the SD.

Once you have done this move to the next step where we start and configure Octoprint

Step 14: Start and Configure Octoprint

Power on again the raspberry and wait a while to make sure it has finished going on at all. Then use a computer to connect to octoprint by one of the following addresses:

http://hostname.local/ (Ej. http://prusai3.local/)//Use the hostname you choose in raspi-config or
http://" raspi-ip"/  (Like pictures)

The first time you enter you will have to configure access control. Simply choose a username and password. Remember them because each time you will have to log in to use octoprint.

After connect the USB cable from the printer to the raspberry pi. Next to the left you will see the connection panel. Leave everything in auto and select connect. After a really short period has successfully connected as when using Repetier. You will see the current temperature, etc.

Now click on the top right settings. You will see a window and left several entries. You only need to change things in the first four entreis. It is very similar to that in certain configurations repetier, so here I will not go into again explain everything that's just read and put data.

Once just you set octoprint you can use like any other host, move the axes of the impresoram, see temeperaturas, send commands, etc.

There is only go to repetier and go to the part where the raspberry ip stands and place it. After opening a figure, set Slic3r, processes and upload to octoprint. Go to octoprint, load the gcode and print.

Step 15: Camera Support

With this simple stand can set the camera to record from multiple angles the bed. It use the Ethernet port to secure the stand. Simply insert and go.

All parts are printed using a layer height of 0.2. To put all the pieces and the camera uses several 3mm screws and nuts.

Step 16: PCB for a Bit of Light

With these small boards with 12 LEDs allow you to see more clearly the table and what is being printed.

For them it is necessary:

  • PCB.
  • 12x 3mm white leds.
  • 2x 150 ohm resistors.
  • Cable.
  • 2x female conenctors

It is a very simple plate and powered through the 5V and GND pins of the Raspberry Pi. There is not much more to say.

Step 17: Final Result

These pictures are just to see how was the printer before and after this great change.

Thank you very much for see the instructable.

<p>This is a great instructable. I am currently assembling a Prusa printer. I would love to be able to do these upgrades. I followed their instructions and messaged about receiving the .stl files. It's been a couple weeks now and haven't heard anything back. I realize this is over a year old now but I still hope to receive the files for the improvements.</p>
<p>Have you uploaded the files anywhere?</p>
<p>What auto level sensor did you use, and is that a good needle file set? I've been trying to look for a good one for 3d prints.</p>
<p>Hi tks for tuto</p><p>Can you send me the marlin you configure for your machine ?</p><p>tks again</p>
<p>wow this was an amazing read!</p>
Hello, this is amazing. I'm really interested in doing this upgrade, I've just ordered this printer. Could you share the files required with me?

About This Instructable




More by Deividmaxx:Transform a chinese 3D printer in a high precision dual 3D printer. Setting up: Marlin 1.0.2, Repetier 1.5.5, Slic3r 1.2.9 and Octoprint 0.12.0 DIY Remote Controller for Hexdrake DIY handmade Hexapod with arduino (Hexdrake) 
Add instructable to: