XYZ Calibration (beta)

The build is ready, I am now working on the firmware.

Recently I had an idea how to implement XYZ Calibration, and now its implemented, in beta state. It doesn’t save anything, but it produces a report which can be used to configure the printer. The printer is also checking if the XY are perpendicular and displaying information how big is the difference, and how to reduce it (which rod should be moved backwards/forward).

Its recommended to run the XYZ Calibration from LCD while being connected from the PC by serial port (using eg. Prointerface or Repetier-Host).

Video demonstration:

The idea of moving to top of frame is taken directly from Original MK2.

The calibration can be also started by using gcode G666.

Test print – Clone vs Original

My clone is already fully working, I’ve made some tests.

I didn’t wrote that before, but I’ve replaced Z axis stepper motors with chinese ones with integrated trapezoidal Tr8x8 screws, as because of the coupler the Z axis was unable to go low enough to print. I strongly recommend to also do that, otherwise You can have similar problem. It will also help to avoid wobbles, which are mostly caused by the couplers.

The chinese motors which I’ve used are with screws 300mm length, and its enough to drive the Z axis to the top, even if they are not long enough to be over the Z-tops.

I’ve put the printer on karimata (joga mat), to (mostly) reduce noise.


On the chinese MK3 heatbed there is directly sticked the cheapest adhesive surface, I found that at my local reseller.

I didnt wrote anything yet about mounting the heatbed, but its really a easy task, just put the MK3 on plywood, use 4 M3 screws and heatbed springs, and using self-locking M3 nuts – screw it.

Eventually, the test print: (3DBenchy by CreativeTools)

One of the prints is from the Clone, and the other one is from Original Prusa i3 MK2S.

Filament used: ESUN PLA+ Green
Layer height: 0.2mm

Are you able to guess which print are from which printer? There are small details which should tell you that.

I’ve made also a short video from print on the MK2 Clone.

I am really surprised with the print quality from this clone, I wasn’t expecting that it will print so good.

Soon I will finish the Bill of materials, with a links to stores where you can buy all of the parts to build a MK2 Clone.


As the build is almost finished (I am only waiting for the longer cables to put screen on front of the printer), I’ve started to modify configuration of Marlin to this printer.

Unfortunately, very helpful option to load and unload filament (gcodes M701 and M702) is not implemented in Marlin, but they implemented M600 (change filament during print) – I’ve done some modifications to Marlin RC8, adding that feature.

I’ve made eventually more modifications (and I am still working on it) – added Babystepping Z to main menu while printing, allowed to use 10mm move also on Z axis and also some modifications to menu order.

The modified Marlin, with configuration is available on github: (branch MK2Clone)

To use it, you shall modify Z probe offset (depending on what height you have mounted the probe), and X,Y,Z MIN and MAX positions.

I am still working on the firmware, to add more features which are helpful while operating the printer.

To print there is also a slicer software needed, I strongly recommend Slic3r Prusa Edition, which can be downloaded from github:

There is start GCode which I am using:

M140 S[first_layer_bed_temperature] ; set bed temp
M190 S[first_layer_bed_temperature] ; wait for bed temp
M104 S[first_layer_temperature] ; set extruder temp
G29 ;
M109 S[first_layer_temperature] ; wait for extruder temp

And End GCode:

G4 ; wait
G1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure
M104 S0 ; turn off temperature
M140 S0 ; turn off heatbed
M107 ; turn off fan
G1 X0 Y200 F6000; home X axis
M84 ; disable motors

For the profiles, You can go ahead and use Original Prusa print profiles, but I recommend to remove acceleration control from the profile (Speed -> Acceleration Control (advanced) -> set over there everything to 0), and use the default hardcoded acceleration limits set in configuration.



It’s almost the end of build. When the extruder will be ready, there will be only few small tasks to do before the printer will print.

Printed parts needed:

1x Modified Extruder body by HeartFoxx
1x Modified Extruder idler by HeartFoxx
1x Extruder cover
1x Fan nozzle
1x Cable holder
1x notORIGINAL extruder motor cover (optional)

Parts from MK2 looks almost same, it even can work – but the diameter of chinese MK8 is a little bit bigger than the original pulley, and this causes problems – and because of that there is a modified version of body and idler.

Extruder body and fan nozzle should be printed from ABS or PETG to avoid future problems – parts from PLA can be easily melted over there (use PLA at your own risk)

Original manual can be followed straight, just use standard M3 nuts instead of the square ones. The slots for probe are too small for nuts – omit the nuts, it will be working without the nuts.

In step 14 – shaft – don’t use additional washers (it’s not needed with the HeartFoxx modification), and for the shaft go with the printed one.

While mounting probe (LJ8A3-2-Z/BX-5V) be careful, as the chinese probe are longer than PINDA one, and it makes harder to put the cable under it.

The additional nut from step 24 are not required – if you have any troubles to put it on the place, just ignore it.

When you will be managing the cables (from step 31) make sure that you know which cable is from the 30×30 fan – because it has to be connected directly to +12V on power supply, only the print fan will be controlled by software.

I didn’t used the spiral wraps/cable shields for my build, if you don’t have it – it will be still OK.

Extruder parts summary

Printed plastic parts

Metal parts

  • 10x M3 nut
  • 4x M3 washer
  • 4x M3x40 screw
  • 3x M3x30 screw
  • 1x M3x25 screw
  • 3x M3x20 screw
  • 6x M3x18 screw
  • 2x M3x10 screw
  • 1x 625ZZ or 625 2RS bearing
  • 2x Extruder spring
  • 1x MK8 pulley


  • 1x NEMA17 stepper motor
  • 1x 5015 turbine fan
  • 1x 30x30x10 fan
  • 1x LJ8A3-2-Z/BX-5V sensor


  • 1x Chinese E3D Bowden Hotend v6
  • 1x PTFE tube
  • 3x zipties (or more)
  • (optional) 1x nylon filament dia 3mm, 50cm length
  • (optional) 1x spiral wrap

Electronics #1

At this step we can test if the XYZ axis are moving properly. Lets mount all the electronics on the frame. As I have plywood frame with supports, I have some place to mount arduino directly to support, and as well I can make a holes for the power supply.

There will be more photos than usual.

Printed parts needed:

4x arduino-washer

At first, I checked where i have to make holes for power supply by temporarily apply it to draw points for two holes, and use 3mm drill on it.



For this mount I’ve used M3x20 screws, but even M3x15 with 9mm frame should be enough. It fits, and its stable.

On the other side of printer will be arduino with ramps. Lets make the sandwich.


And mount it on the frame… Using M3 screws and Arduino washers from i3 Rework.


The length of screws depends on your frame thickness, for 9mm frame I’ve used M3x18 screws.

Then, some soldiering are needed (depending on types of cables, some motors already have the proper cables, so only for endstops soldering are needed)


For the endstops I’ve used the NO output (as I want to have a signal from endstop when it will be triggered).



Endstop COM -> Ramps GND (-)
Endstop NO -> Ramps S (Signal)

But the connection doesn’t matter at all, as long as it will be between GND and S, otherwise the Configuration for Marlin which I provide will be not working.

After connecting everything as in any build with RAMPS 1.4 we can move to the computer and make the first tests. If You are not familiar with the connections, take a look on THIS – its complete guide for wring the RAMPS 1.4, even with power supply.

For connection between power supply and arduino use 2×2,5mm cables, to decrease probability of fire, especially with wooden frame 🙂

Software part requires:

Arduino IDE
Marlin firmware
USB A to B cable (You should get one while buying arduino, or You can take from the 2d printer, as its commonly used there)

If you don’t want to configure marlin by yourself, You can download the version which I made, but keep in mind – all your mechanical parts MUST BE same as the ones covered on that page. I changed the stepper driver on Z axis to DRV8825 with 1/32 stepping, so You have to do it also (or wait until I will change the DRV8825 to 1/16 mode, as I am planning that – the original has also 1/16 mode on all steppers).

Install the Arduino IDE, and open Marlin.ino file from the downloaded firmware. It will open a lot of tabs inside IDE, but for us currently interesting is only the Configuration.h.

What we have to do right now?

Lets configure the steps per mm – its the amount of signals needed to send to stepper motor to move axis by 1mm. Prusa made a great calculator for that – its available HERE

We have 16 tooth on our GT2 pulleys on X and Y axis


And we have trapezoidal screw with pitch 8mm.


We need to enter that values to Configuration.h – lets hit Ctrl + F for find, and look for “STEPS_PER”. It should find a entry somewhere in the file.

Modify that line with results which You got from the Prusa calculator


And its ready!

Connect the Arduino to PC and click on the right arrow in toolbar, and wait… It will show the status on the bottom of Arduino IDE window, it should finish correctly.

After that, its ready to test. Install Repetier-Host or Prointerface (maybe you had already one of them), and try to move X, Y or Z axis, connect your power supply to network, and lets start testing!

Be careful! For Z axis do only small moves (0,1) and watch carefully if both motors are spinning in same direction. If not, reverse the cables for one of motors. If any axis is working in wrong direction – also reverse the cables (or, modify the Configuration.h and reflash arduino – if You know that way).

Stay tuned for the extruder assembly. The build is getting closer to finish!


After this step printer will be looking almost like finished.

Printed parts needed:

1x Z-axis-top-left
1x Z-axis-top-right
1x Z-axis-bottom-left
1x Z-axis-bottom-right

Follow the instructions, skipping step 4 (Placing Z-covers) and there is also additional steps needed with step 5, as we are using trapezoidal screws with aluminium couplers.

After placing the motors, install couplers and then insert trapezoidal screws into them, and tighten it all with the 4 screws on every coupler. Make sure that motor shaft and screw are not touching inside the couplers. Then go to Step 7, but as nuts use adapters and the chinese nuts.

After step 11 it should look like this:


I’m currently not managing the cables, as it will  be also managed differently than in Original, so Step 13 can be skipped. All the following steps can be easily followed from the Prusa manual.

I’ve changed my mind about the frame, and instead of using 6mm MDF i am using 9mm plywood, which is more stable, and still in good price comparing to aluminum. Because of that some screws which I am using are longer than in standard one.

Z-Axis before instaling GT2-belt

In next step we will make the printer moving, by installing RAMPS and connecting the motors which are already installed on frame.

Z-Axis Summary

Printed plastic parts

  • 1x Z-axis-top-left
  • 1x Z-axis-top-right
  • 1x Z-axis-bottom-left
  • 1x Z-axis-bottom-right

Metal parts

  • 2x linear shaft Φ8 320mm
  • 2x 5×8 aluminium coupler
  • 2x trapezoidal screw Tr8x8 with nut
  • 14x M3x18 screw
  • 8x M3x10 screw
  • 14x M3 nut


  • 2x NEMA17 stepper motor


  • 1x GT2 belt
  • 1x Prusa i3 vanilla frame (9mm plywood)