T3P3 Kossel Mini Kit Release 2

Assembly Instructions

Chapter 19 - Commissioning, Calibration and Testing

Creative Commons License

This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

Think3DPrint3D Ltd


1901 Overview - CAD/CAM Toolchain and Software

The installation of all the software will be covered in detail later on in this chapter, or in Appendix C. This section provides a general introduction.

The sequence of processes involved in producing a physical object by Computer Aided Design (CAD) and Manufacturing (CAM) is known as a toolchain. The picture below from the RepRap wiki illustrates this sequence. Versions of all the computer programs needed for the toolchain are available for download as Free and Open-Source Software, in keeping with the philosophy of the RepRap Project.

CAD design and production of 3D .stl models is well beyond the scope of these instructions, but a vast range of prepared designs for printable objects is available on sites such as Thingiverse and Youimagine.

Turning a design into printable Gcodes using a utility such as Slic3r is also outside our scope, but is well documented on the Slic3r Manual website, and we provide setup files as a starting point when printing with the Kossel Mini. We also provide a Windows version of the communication program Printrun/Pronterface  which you will need to install to start commissioning and testing your Kossel Mini. Mac OS X and Linux versions are available for download. Alternative programs such as Reperier are also available.

The Kossel Mini version of the controller firmware Marlin is supplied pre-loaded on your Arduino Mega clone, pre-configured as far as possible for your printer.  Some settings can only be determined by calibration of an individual printer, and this chapter will guide you through the calibration process. The changed settings will have to be  uploaded in Marlin, and this is described in detail in Appendix C - Marlin Upload Procedures. We supply the Windows version of the necessary Arduino software. Mac OS X and Linux versions are downloadable from the Arduino website.

1902 Software supplied

The micro SD card supplied with the kit comes preloaded with software to operate the machine on Windows. Please copy the programs from the SD card to somewhere safe on your computer - a USB micro-SD card reader is included in the kit in case you need one. You should copy the files even if you are using OS X or Linux as you will still need parts of the provided software.

The card will be used after calibration to print directly from stored G-code files using the LCD controller.

The programs supplied are:-

Arduino:  arduino-1.0.5-r2

Marlin: Marlin_Kossel_T3P3_[release-date] . This is a pre-configured version of the Kossel designer’s Marlin (https://github.com/jcrocholl/Marlin) and can also be downloaded from our Github repository at https://github.com/T3P3/Marlin/tree/Kossel

Printrun/Pronterface: Printrun-Win-Slic3r-10Mar2014

Slic3r: slic3r-mswin-x64-1-0-1-stable, slic3r-mswin-x86-1-0-1-stable and three Slic3r configuration files Kossel_draft.ini, Kossel_medium.ini, and Kossel_fine.ini (Chapter 20)

Two other folders are also included:-

PanelOne_V2_case (Chapter 22)

Test_objects  (Chapter 20)

1903 Connect USB to the printer

Plug a USB A/B lead (supplied, though you may need a longer one if not using a laptop) into the printer and your computer.  Do not plug the power lead in yet.

Windows Users

Windows 7 should find the Mega as new hardware and try to install it. However, as described on the Arduino website, “the process will fail, despite its best efforts”, as a driver is needed.  The driver file named "arduino.inf" is included in the "Drivers" folder of the supplied Arduino software (not the "FTDI USB Drivers" sub-directory).


If you need detailed installation instructions, these can be found on the Arduino website at http://arduino.cc/en/Guide/Windows#toc4.

Windows should tell you the COM port number it has assigned to the Arduino Mega during driver installation, or you can get it from Device Manager. Make a note of it as you will need it in the next stage.

Windows 8 Users

By default, Windows 8 will reject third-party drivers like "arduino.inf" because they are not digitally signed.  You can turn this behaviour off by following the instructions on the Arduino forums.

Mac OS X Users

The Mega will be automatically recognised and installed. It may be recognised as a USB Modem by your Mac but this is not a problem.

Checking connectivity

Windows Users

Open the folder Printrun-Win-Slic3r-10Mar2014   and run the program pronterface.exe.  It opens immediately -  there is no installation process required. You may like to make a desktop or taskbar shortcut as you will be opening it frequently during commissioning and calibration.

Check that the COM port (8 in the above example) and speed (115200) are correctly set, tick the Watch box (not present in all versions) and  connect to the printer. You should get a screen display similar to that below.

Mac OS X Users

Install Pronterface

Follow the instructions here: http://reprap.org/wiki/Printrun#Mac_OS_X. The link there will take you to http://koti.kapsi.fi/~kliment/printrun/ where you can download the latest version (Printrun-Mac-10Mar2014.zip at the time of writing). Once it is downloaded and extracted you may want to move it to your “applications” folder. The file name will start with “printrun”.

Open Printrun, ensure it is set as the screen shot below, and click connect. You should get a display similar to this:

Screen Shot 2014-05-17 at 22.44.42.png

Now you can follow the Commissioning Tests below.

1904 Run Commissioning Tests

Throughout the following sections there will be reference to commands, called G-codes, which are the instructions the printer follows. All manual commands, as well as files to print, consist of G-codes. Manual commands are entered  using the text entry box and the Send button at  the bottom right-hand corner of the Pronterface screen. Manual commands can also be sent by clicking on the buttons within Pronterface. Some G-codes cause the printer to undertake an action, others report back in the text area above the box on printer status.

If you need to look up a G-code (most of which, confusingly, start with M not G), there is a complete list on the RepRap G-code wiki. They must be entered in UPPER CASE. Note that not all G-codes are supported by all varieties of RepRap firmware, including Marlin which is supplied on the Mini Kossel RAMPS board by default.

1904.1 Test endstops.

Endstops allow the printer electronics to register where the carriages are. The Kossel has its endstops at the maximum of the X,Y,Z axes, and it has a fourth endstop attached to the Z-probe, which allows the printer to register where the bed is and also to compensate for slight bed misalignment.

These tests will confirm that the endstops are working correctly. Note that X,Y,Z endstops work in the opposite way to the probe endstop; they are reported as “open” when not triggered, while the probe is reported as  “closed” when not triggered. (In fact the X, Y and Z endstops are wired “Normally Closed”, so that in the event of an endstop wiring fault, the endstop will trigger, causing the motor to stop. The Z-probe endstop is wired “Normally Open” to avoid sending a Z-probing event if its wiring should fail).

Move the carriages to about 50mm below the endstops by hand so that the end-stops are not triggered, and release the Z-probe into the deployed position (push the top of the brass bar side-ways until it snaps down).

Picture of a carriage clear of endstop

In the text box at the bottom right hand corner of the screen, type M119 and click Send  or press Enter.

It should report all end-stops are open, as below:-

Now test if all the endstops are wired and working correctly:

First push the Z-probe up to the retracted position to release the  Z-probe switch. Type M119 again in Pronterface and press enter to send the command, Z-min should now report “triggered”.

Screen Shot 2014-05-17 at 23.07.24.png

Now move the Z-carriage up to trigger the Z endstop, send M119 again, and z_max should now report triggered. Repeat for Y and then X, checking with M119 each time.


  • If the endstops do not show triggered in the correct order, double-check the order of the endstop cables where they are plugged into the RAMPs board
  • If an endstop does not show that it is triggered, double-check the wiring and ensure the plugs are seated correctly
  • If the probe (z_min) does not show as “open” when it is deployed, the spring may need to be compressed further by moving the brass screw terminal block further up the brass shaft. If the spring is already fully compressed, try lubricating it where it passes through the plastic with a small dab of grease. If it still doesn’t show as “open” when deployed, try adding another spring from a “click” style ball point pen.

1904.2 Connect power supply to printer

The power supply connects to the right of the USB lead. Plug an extension lead into the wall and plug both the computer and the printer into this extension lead. It is important to plug the printer into the same extension lead as your computer - plugging the printer into a separate mains power supply ring from your laptop could cause USB communication problems due to ground loops.

1904.3 Check motor direction and homing

Power on the printer. With the carriages about 50mm from the top of the towers and one hand on the PSU switch or plug, ready to power down, send the command G28 or click on the Home All button:-

The carriages should move up and hit the endstops. If they move down, power off immediately, before they reach the bottom, disconnect in Pronterface, unplug the X, Y and Z motor cables from the RAMPS board and plug them in the other way round to reverse the direction of motor rotation.


  • If nothing happens, double-check the power supply connection to the RAMPs board (green plug). There should be 12V present on the plug.
  • If they move in different directions (ie some up some down) check that the motor plugs are all plugged in in the same direction as shown in chapter 17.
  • If one or more of them does not move at all, its stepper driver may be damaged or faulty. Exchange the suspect stepper driver and one from another axis known to be working and see if the fault changes axes or remains on the same axis as before.
  • If the fault changes axes with the stepper driver, contact us for a replacement stepper driver.
  • If the fault remains with the same axis, then the RAMPS pins may not all be making good contact with the Mega. Try unplugging the RAMPS and plugging it into the Mega again, pushing it down very firmly.
  • If you still have a problem, email us for advice, providing as  much detail as possible on the fault symptoms and checks carried out.

1904.4 Check Fans

With the power on, the 30mm hot-end cooling fan should rotate counter-clockwise and so be blowing at the hot-end. The 40mm print cooling fan is not wired “always-on” but instead controlled by Marlin according to the print settings chosen in Slic3r. To test it send “M106 S255” in Pronterface to turn it full on and “M106 S0” to turn it off again.


  • If the fan is not turning on then reverse the orientation of the plug on the RAMPS board and recheck.
  • If the fan is blowing away from the hot-end then unscrew the fan and reverse it so the label faces the hot-end.

1904.5 Test Hot End and Heated bed

Select Heat 185 (pla), click Set and check the Watch box (if present). Confirm the graph line rises to 185C and steadies there. Do not feed any filament into the printer yet.

Select Bed 60 (pla), click Set and watch the heatbed temperature graph rise to 60C and steady there.

Click the heated bed Off button and go on to the next section. If you are not able to carry straight on, then turn off the hot end too.

1904.6  Tighten hot end nozzle

You should now carry out the final nozzle tightening as described at the end of the E3D V6 Assembly Instructions under PID tuning. (We have already set typical PID values for the V6 in Marlin, but you can fine-tune these for your own hot-end now or at any other time). You should always approach the tightening temperature of 285C slowly, as recommended by E3D, to avoid overshooting.

1905 Calibration

Acknowledgment:  Parts 1905.1 to 1905.4 of this section are largely derived from Minow’s excellent and detailed blog. Please refer to this for a fuller explanation of this part of the calibration process.

During this process it will be necessary to make some changes in Marlin following the detailed instructions in Appendix C, so you should familiarise yourself with those before continuing.

The calibration sequence can be summarised as follows:-

  1. Set up shortcut buttons in Pronterface to speed up the process.
  2. Measure the approximate Z-height as a starting point.
  3. Set endstops to the correct level - to print truly level.
  4. Check and adjust Delta_Radius - to print truly flat.
  5. Set Z-height accurately with printer hot.
  6. Check Z-probe deployment position.
  7. Check and adjust Z-probe retraction position.
  8. Measure and set Z-probe offsets.
  9. Check the range of X and Y travel.
  10. Calibrate extruder.

1905.1 Set up shortcut buttons in Pronterface

This step will create 4  shortcut buttons X, Y, Z and O (called Custom buttons in Pronterface), to move the  extruder nozzle to positions directly in front of the X, Y and Z towers and the Origin (centre of the printbed X=0, Y=0), and 30mm above what is set in  Marlin as the level of the bed (not the true value, which is checked in the next stage).

Open Pronterface - there is no need to connect to the printer yet. Identify the “Add custom button” button at the bottom of the centre pane as shown below.


Click on it and a dialogue box opens. Enter the following and click on OK to create the X-button:-

Repeat for the Y-button as below:-

Similarly for Z:-

and O:-

You should now have the 4 custom buttons shown below:-

1905.2 Measure approximate Z-height:


  1. During calibration it will be necessary to Home the printer several times. This parks the tip of the hot-end at top centre of the printer, at coordinates X=0, Y=0, and Z= MANUAL_Z_HOME_POS (as set in Marlin). This is an important starting point, but powering off the printer or resetting the controller will cause the loss of these coordinates. After powering up the printer or reconnecting/resetting in Pronterface, always Home the printer with the Home button or by sending G28 to update the hot-end coordinates, unless this documentation specifically says not to Home it (to preserve the Z-probe auto-levelling results which are lost by homing).
  2. Don’t try moving the printhead in the X and Y direction when it is homed. One or more of the carriages will try and move upwards past the endstops and will not respond to endstop triggering. This could damage the motors, belts and electronics. Always move the printhead down in Z at least 100mm before moving in X and Y.
  3. Final calibration should be carried out with the hotend (and headed bed, if fitted) at operating temperature This is because the hotend expands slightly when it is heated, so for an accurate final Z-height calibration it is best to have everything at print temperature. However, this slows things down a lot, so most of the preliminary work will be carried out without heating the hotend and heated bed.

Connect in Pronterface and power on. Do not feed any filament into the extruder, and if there is already filament in it, remove it. Ensure the Z-probe is retracted and the print-bed is firmly mounted.

  • Home the axes.
  • Send M114 to display the X, Y and Z positions as below:-

  •  X and Y should both be 0.00, and Z should be 235mm (with V6hot-end) or 240mm (with J-head, as above). This is the MANUAL_Z_HOME_POS we have set as the default starting height in Marlin for printers with heated beds. If yours is less than this then you may need to increase it to get the nozzle to travel all the way down to the bed, as in the next step.
  • If you have a printer without a heated bed you will need to change the setting in Marlin (as described in Appendix C)  line 346 #define MANUAL_Z_HOME_POS  from 240 mm to 255mm before going any further. After uploading, send M114 again to confirm the Z-height. Check Appendix C about sending M502 and M500 if you have EEPROM enabled and don’t get an updated Z-height.
  • Record the Z-height figure as Z-original.
  • Send the command G1 F8000 Z50 to move the hot-end down to about 50mm above the centre of the print bed. In fact it will be closer than this because we have deliberately set the starting MANUAL_Z_HOME_POS to be higher than is actually achievable. This means the hot-end is closer to the bed than Pronterface thinks it is. This will save you some time in setting it, but means you will need to be careful when moving it further downwards. For the same reason we will not yet use the custom button O until the Z-height has been more accurately determined.
  • Place a strip of standard 80 gsm bond copier/printer paper on the print bed to serve as a feeler gauge to check the nozzle height.
  • Using the Z +/- buttons in Pronterface move the Z axis progressively down until the nozzle is nearly touching the bed. If the starting position is clearly well above 10mm, then you can make one move of 10mm, and repeat if it is still more than 10mm. After this, or if you are not sure, then move 1mm at a time until you estimate the gap is about 1mm. While moving the paper under the nozzle, continue to lower the Z axis but now using 0.1mm steps until the paper begins to drag against the nozzle. Now send M114 to show the current Z-position.

  • Record this as Z-error - in this case 3.20mm. Yours could be significantly different depending on the height of your endstops.

The approximate Z-height, measured cold, and without allowing for the thickness of the paper feeler gauge, is Z-original – Z-error, in this case 240 - 3.20 = 236.80mm. We will not change this in Marlin yet, but need to keep it in mind when moving the nozzle close to the bed. The shortcut buttons in Pronterface have been set up to move the nozzle down to 30mm above Z-original  which is actually 26.8mm above the bed because of the Z-error of 3.2mm. It is therefore safe to use the Custom buttons in Pronterface to place the nozzle as required in the following section, then use 2 steps of 10mm followed by 6 steps of 1mm to lower it almost to the bed, followed cautiously by up to 8 steps of 0.1mm when measuring the exact height with the paper feeler gauge.

1905.3 Set endstop trigger levels

The endstops on the X Y and Z pillars should all trigger at the same distance from the bed. This section will show how to set these.

Start by using a ruler or measuring tape to set them approximately (within 1mm) at the same distance up the pillars. Also check that the M2.5 endstop trigger screws are protruding from the tops of the V-roller adapters by equal amounts (about 6mm - see Section 404)

Next, establish what the current trigger points are by working through the 3 steps below.

  1. Find the X-tower endstop trigger point
  1. Home the printer, then use Button X to place the extruder nozzle just in front of the X tower (G1 F8000 X-75 Y-42 Z30). If your Z-error as measured above is 3.2mm, then it will be approximately 30-3.2=26.8mm above the bed. Substitute your own Z-error figure to work out how much you will need to move the nozzle down to touch the paper feeler gauge.
  2. Lower the extruder using Pronterface until a piece of standard 80gsm paper drags on the tip of the nozzle.
  3. Make a note of the Z height using M114:

  1. Find the Y-tower endstop trigger point in the same way.
  1. Use the Y-button to move the extruder directly from in front of the Y-tower to just in front of the Y tower (G1 F8000 X75 Y-42 Z30)
  2. Lower the extruder down using Pronterface until a piece of standard 80gsm paper drags on the nozzle
  3. Make a note of the Z height using M114:

  1. Similarly find the Z-tower endstop trigger point
  1. Use the Z-button (G1 F8000 X0 Y85 Z30) to place the extruder in front of the Z tower.
  2. Lower the extruder until it just touches the paper.
  3. Send M114

Now analyse the Z-error results:

  • At the origin O (centre of bed): Z = 3.20mm
  • In front of X-tower: Z = 2.70mm (0.50mm less than O)
  • In front of Y-tower: Z = 3.70mm (0.50mm more than O)
  • In front of Z-tower: Z = 3.00mm (0.20mm less than O)

A measurement less than the Z-error at O means that the endstop is triggering too high: so in the example, the X endstop is  triggering 0.5mm too high, and the Z endstop 0.2mm too high, and the trigger points need to be lowered by these amounts.  To lower the endstop trigger point at a tower, screw the adjuster bolt OUT (anti-clockwise) so it triggers with the carriage at a lower level.

A measurement more than the Z-error at O means that the endstop is triggering too low: so in the example, the Y endstop is triggering 0.5mm too low and the trigger point needs to be raised by this amount. To raise the endstop trigger point at a tower, screw the adjuster bolt IN (clockwise) so the carriage triggers the endstop at a higher level.

The M2.5 adjuster bolts have a thread pitch of 0.45mm, so one full rotation of the bolt will raise or lower the trigger point by 0.45mm. Applying this to the errors just measured:

  • Screw the X-endstop adjuster bolt OUT by one full turn plus about 1/10 turn
  • Screw the Y-endstop adjuster bolt IN by one full turn plus about 1/10 turn
  • Screw the Z-endstop adjuster bolt OUT by a little less than ½ turn.

Use the O-button to centre the nozzle and then make these adjustments.

Home the printer, and then work around steps 1-3 again, as large changes to one trigger point will noticeably influence the others. The objective is now to get the 3 endstop readings exactly the same, and it will probably become clear that the endstop Z-errors will be different from the Z-error at O. (This will be resolved in the next section). For example, after making the first set of adjustments as above, we arrived at O=3.3, X=3.1, Y=3.2 and Z=3.1. Rather than try and adjust the endstops to 3.3mm, adjust only the Y endstop, so that all 3 endstops have the same 3.1mm error. Final measurements then give O=3.3, X=3.1, Y=3.1 and Z=3.1. Now move on to the next Section.

1905.4 Adjust Delta Radius to print flat

The final endstop trigger level measurements in the preceding section show that the nozzle is reaching the centre of the print bed 0.2mm before it does at the towers; in other words it is tracking lower in the centre - the print surface traced out by the hot-end is dished. This means the DELTA_RADIUS value in Marlin is too big and needs to be reduced. This is not done directly, but by decreasing DELTA_SMOOTH_ROD_OFFSET in Marlin configuration.h.

Conversely, if the nozzle is tracking higher in the centre of the bed (reaching the bed at a smaller value of Z-error than at the towers) then the print surface traced out by the hot-end is domed, DELTA_RADIUS is too small and needs to be increased by increasing DELTA_SMOOTH_ROD_OFFSET.

As a first attempt, change DELTA_SMOOTH_ROD_OFFSET by the same amount as the difference in Z-height - 0.2mm in the example. Disconnect in Pronterface and then, following the procedure in Appendix C, open the Marlin configuration.h tab and locate line 89:-

In the example the print surface was dished by 0.2mm, so reduce DELTA_SMOOTH_ROD_OFFSET by 0.2mm.

Now check line 393 of configuration.h to see if you have EEPROM SETTINGS enabled.

If they are enabled as in the above example then you MUST restore the settings you are about to upload (called default “factory settings” in Marlin) as soon as you reconnect in Pronterface using M502, and then save them to EEPROM using M500. If you don’t do this then the old settings still stored in EEPROM will override the newly uploaded settings.

Save and upload Marlin.

Now connect again in Pronterface, send M502 and M500 if necessary, home the printer and check the Z-errors using the X, Y, Z and O buttons as previously described. In the example used so far, they all checked out at 3.2mm, meaning the printer is calibrated to print level and flat, and we can move on to setting the Z-height correctly with the printer hot.

If the Z-errors are NOT all the same, then repeat this  section until they are equal.

1905.5 Set Z-height accurately with printer hot

This is the final step in height calibration. Connect in Pronterface, home the printer and check the Z-height setting by sending M114.

Set Heat to 185 (pla) and Bed to 60 (pla). Wait for the temperatures to rise and stabilise.

Use custom button O to move the nozzle to X0, Y0, Z30. If you are doing this for the first time after the previous section, remember that Z is actually only about 27mm rather than 30mm. Follow the procedure to measure Z-height by lowering the extruder using one or 2 10mm steps, then 1mm steps followed by 0.1mm steps until a piece of standard 80gsm paper drags on the nozzle. Note the Z height using M114.

Subtract  this Z value from the one checked above (240mm). If you are going to print PLA onto Pritt stick or similar adhesive (or hairspray), subtract an additional 0.1mm for the thickness of the paper feeler gauge. If you plan to print onto blue painter’s tape, this will compensate for the thickness of the paper, so don’t subtract the extra 0.1mm. In this example the final Z-height will be 240.0 - 3.3 - 0.1 = 236.6mm.

Disconnect in Pronterface, locate line 353 in Marlin configuration .h, enter the correct setting, save and upload.

Re-connect in Pronterface, remember to send M502 and M500 if you have EEPROM enabled, send M114 to check the new Z-height, and re-check the level of the nozzle at 0,0,0 with the O button, and paper feeler gauge as before.

If you expect to print in ABS you should repeat this process with the temperature set to ABS values as the height will vary. In the example given, the Z-height increased by 0.1mm to 236.7mm

1905.6 Check Z-probe trigger position

To deploy the Z-probe, the effector moves to the deployment position, then travels across in the -X direction so that the long screw of the double screw terminal retaining the spring snags on the Z-timing-belt and is flicked over until it can be pulled down by the spring.

Test it by homing the printhead (G28), then send G29 to deploy the Z-probe, with one hand on the power switch or cable. If it fails to deploy as it passes the Z-timing-belt, power down at once, disconnect in Pronterface and follow the troubleshooting paragraph below.


If the Z probe fails to trigger on the belt, you may need to adjust the starting position in Marlin. The relevant settings are in the Marlin_main.cpp file under void deploy_z_probe() around line 829, about a third of the way down this very long file.  A couple of lines below it the positions are given as:


So if the trigger needs to move close to the belt by 5mm add 5 to the number after “destination[Y-AXIS]” (in this example 95 would be increased to 100.

If the belt needs to start or stop further left or right of the belt the adjust the Two “destination[X_AXIS]” numbers, the first is the start position, the second the end position.

1905.7 Set and test Z-probe retract position

After probing the print-bed levels at a grid of positions, the probe is moved to the retract position and lowered until it hits the retract pillar.

The probe retract pillar should be located close to but not quite touching the build-plate.

We have set the retract position in Marlin so that it it should work in this position, which should be at 65mm from the left-hand end of the X-Z extrusion, so check this before proceeding with this test.

Once the probe is deploying correctly, allow it to run through the whole probing sequence and attempt to retract itself. Whether it retracts or not, it will park itself above the retract position set in Marlin.

If the retract position needs adjusting, then use Pronterface to move the probe over the printed retract peg, avoiding the socket of the capscrew in the centre, lower it until it just touches, and then send M114 and make a note of the coordinates reported. The retract position is in the Marlin_main.cpp file - find void retract_z_probe() around line 840, and a few lines below it the positions are given as:

void retract_z_probe() {

  feedrate = homing_feedrate[X_AXIS];

  destination[Z_AXIS] = current_position[Z_AXIS] + 20; // T3P3 Kossel Mini R2


  destination[X_AXIS] = -54;

  destination[Y_AXIS] = 64;

  destination[Z_AXIS] = 22.2;


Change the X and Y values of the destinations to the values you have just determined, save, upload and test. If the probe does not move down quite far enough to retract properly, then you can try starting at a slightly lower destination[Z_AXIS] - try changing it to  destination[Z_AXIS] = 21.0. You should not go any less than this otherwise the hot-end nozzle will crash into the print bed. If this change is not enough to retract the probe, then you will have to increase the probe retract peg height instead.

1905.8 Set Z-Probe offsets

The distance between the tip of the Z-probe and the tip of the hot-end needs to be set accurately. The offsets are defined in Marlin configuration.h, around line 355:

The first number ( 0 in the above screenshot) is the X-offset - normally close to  zero as the probe is directly behind the hot-end.

The second number (13 in the above screenshot)  is the Y-offset: the distance between tips in the Y direction.

The third number, the Z-offset, is critical and will be measured and set as below, following Johann Rocholl’s procedure at https://github.com/jcrocholl/Marlin (bottom of the Readme).

  • Place a piece of masking tape on the Printbed near the centre. Make a small cross-mark on the tape with a marker/felt-tip pen near the centre of the bed.
  • Move the tip of the hot-end in Pronterface to position it exactly on the mark and touching the bed (Z=0), then move the nozzle up 0.1mm using Pronterface.
  • Display this position by sending M114:




  • This will be “Nozzle Zero” position
  • Raise the hot-end by 20mm to ensure there is clearance for the probe.
  • Manually trigger the Z-probe and use Pronterface to place it directly over and almost touching the mark on the print-bed.
  • Lower the probe 0.1mm at a time until you hear the click of the microswitch as it is released. If you can’t hear it,  send M119 in Pronterface after every 0.1mm to check when the Z-min endstop triggers.

Before triggering, left, and after triggering, right

  • Now send M114 in Pronterface to get the position of the probe, which gives the offset values.

  •  Record these values as “Probe Zero” and subtract the “Nozzle Zero” positions from them. Eg for the values shown above:

Probe Zero Values - Nozzle Zero Values:

X:2.90Y:-17.00Z:3.60 - X:-0.60Y:0.90Z:0.80 equals


  •  and enter them in the define Z_PROBE_OFFSET field in Marlin, changing the signs:

#define Z_PROBE_OFFSET{-3.5,17.90,-2.8, 0}

  • Now disconnect in Pronterface, re-upload Marlin, reconnect in Pronterface, set the extruder temperature to 185C, the bed temperature to 60C, home the printer (G28), and then probe the bed (G29).
  • Move to G1 X0 Y0 Z10 using the O button, then use Pronterface to move the hotend towards the bed, using a piece of paper as a feeler gauge. The paper should just drag when the hotend reaches 0.1 on Z (use M114 to confirm)


If the hot-end reaches zero before dragging on the paper then the Z value of the offset in Marlin is too little, so increase it by the estimated amount plus a mm more and repeat until you have the correct setting.

Repeat the home/probe/measure sequence until there is no further error between the probe height and the measured height with the feeler gauge.

Finally, home the printer, which removes the Z-height determined by the auto-levelling process and resets the Z-height to the MANUAL_Z_HOME_POS  value. Use the O button to move to X0 Y0 Z10 and lower the tip onto the paper again. Exactly the same amount of drag as in the original Z-height measurement means you have now exactly measured the offset.

1905.9 Check the range of X and Y travel

This is a check to ensure the printhead can move around the extent of the printbed when close to the surface without snagging on anything.  

  • Move the printhead to 1mm off the bed (G1 X0 Y0 Z1).
  • Move to:
  • G1 X85 Y0
  • G1 X-85 Y0
  • G1 X0 Y85
  • G1 X0 Y-85

 simply move to X=85 and -85 with Y=0,

  • and to Y=85 and -85 with X=0, using the G1 command with the appropriate coordinates. Check visually that the hot-end tip is about 5mm from the edge of the 180mm mirror glass printbed. Finally home the printer.

Remember: Don’t try moving the printhead in the X and Y direction when it is homed! One or more of the carriages will try and move upwards past the endstops and will not respond to endstop triggering. This could damage the motors, belts and electronics. Always move the printhead down in Z at least 100mm before moving in X and Y.

1905.10 Check and calibrate the extruder

Do not load filament yet! Send M302 to override cold extrusion prevention in Marlin. Set Pronterface to extrude 10mm of filament and click Extrude. The large gear on the extruder should rotate clockwise viewed from above. Click Reverse and confirm it rotates counter-clockwise.

Cut off about 500 mm of filament from the sample provided and cut a point on the end to be inserted. Click the Motors Off button in Pronterface. Feed the pointed end of the filament into the opposite side of the extruder from the bowden tube by hand, rotating the big gear slowly clockwise, just as you did when checking it after assembly, until  it emerges a little way into the Bowden tube, as seen on the right side of this picture.

Now, using an accurate ruler with the end against the flat face of the extruder block, measure off about 120mm up the filament on the input side of the extruder, and make a mark on it with a fine-liner or similar pen.

The exact distance is not critical, but you must mark and measure it accurately. This mark is at 121.5mm.

If you don’t have a suitable pen, or your filament colour is too dark to show a mark, then you can use a piece of masking tape or similar instead.

The tape is also at 121.5mm along the filament from the face of the extruder block.

Set the extrusion distance to 100mm in Pronterface, and the speed to 100 mm/min.


Click Extrude, wait for it to finish, and now measure the distance from the extruder block to the mark or tape as accurately as you can.

In the picture below, the distance remaining is 18mm. The distance actually extruded by a command to extrude 100mm was therefore 121.5 - 18.0 = 103.5mm, so the DEFAULT_AXIS_STEPS_PER_UNIT for the extruder in Marlin needs to be reduced in the ratio 100/103.5 to make it extrude less filament. Disconnect the printer in Pronterface and find line 365 in Marlin configuration.h:

The E-steps setting needs to be reduced to 100/103.5 x 663 = 641mm. Make this change and then upload Marlin again.

Connect again in Pronterface and send M302 again to override cold extrusion prevention. Repeat the exercise above using a new section of filament that has not previously been through the extruder. The length extruded should be within 1mm of 100 mm, giving 99% + accuracy, which is good enough. Save the settings in Marlin.

Now remove the short length of filament used for calibration and discard it. Feed in the end of the filament starter pack provided by hand until it emerges into the Bowden tube. Connect in Pronterface, power on, Home the printer and set the hot-end temperature to 185 (pla). Once it reaches this temperature, use the Extrude button to feed 100 mm of filament at a time at 300 mm/min until it is close to the effector end of the Bowden tube. It should need 4 goes.

Then feed 20 mm at a time at 100 mm/min until molten filament begins to emerge from the tip of the hot-end.

You have now successfully completed the calibration process, so shut down the printer and go on to the next stage - Test printing.