Introduction: DIY 3D Printer | Prusa I3 3D Printer Clone

About: Hi, my name is Jovian and I like hacking, breaking and building things .Doing projects that are interesting is something I love since my childhood. I like to think outside of the box and make amazing tutorial…

3D printing is a way of creating three dimensional (3D) objects. It consists of hot end that melts the filament and deposits the plastic layer by layer and thus building up the object. In this tutorial we would be building such a 3D printer.

In the DIY space, Prusa 3D printers seem to be a popular choice. You can buy kits from Prusa and build one yourself, but these are kinda expensive. So instead, I choose to buy all the components separately and build a clone of the Prusa i3 Mk2S 3D printer. In this way I was able to build the printer 3 times cheaper while also learning a lot more.

Honestly, I had build this printer two years back and it still works perfectly fine. Moreover I have done a lot of upgrades such as WiFi printing, Closed loop control, External casing and even upgraded Extruder design. I will mention all these features along with the some of the mistakes I made and also some general tips and tricks to get you started into 3D printing.

Note : The build instructions were heavily referenced from the official Prusa build guide. I did my best to explain everything in this Instructable but if anything is not clear, you can check this guide. Also, I had build two printers and have taken pictures from both the builds.

Step 1: Things You Need for This Project

Frame: I used a CNC router to mill the Standard Prusa I3 frame. For this I used a 18mm synthetic wood but you can other material if you want.

Motors: We need standard Nema 17 motors having a holding torque of 4.2 kg-cm would be more than enough. I had a very bad experience ordering from Aliexpress, Where two out of the five motors turned out to be faulty. Hence make sure to check the reviews of the product and the seller before purchasing.

Arduino + Ramps 1.4 + A4988 kit: This is cheapest and provides the best value for the price. The only downside of using the Ramps board is that the heater bed Mosfet isn’t that powerful enough to match the current requirement and hence I would strongly recommend to either use a Mosfet board such as this one or you can build your own Mosfet board such as this own.

3D printed parts: Most of the parts used follow the latest Prusa i3 MK2S original design. I have also included modified parts as a part of upgrades and to fit the cheap components. I recommend using either PETG or ABS to print the parts, Please avoid using PLA as they crack after some time.

Step 2: YouTube Video

First watch these YouTube Videos to get an idea about the project.

If you like my videos, consider subscribing to my channel. Subscribe

It really means a lot to me and helps me make more content.

Step 3: Building the Y-Axis

Parts used in this step

  • M10 threaded rods (380 mm)
  • M8 threaded rods
  • M10 washers and nuts
  • M8 wahsers and nuts
  • Smooth rods (350 mm)
  • y-corners
  • y-belt-holder
  • y-motor
  • y-distance
  • y-idler-holder
  • LM8UU linear bearings

Prepare the M10 Rods

Lets Start by assembling the Y axis first, for this we need two M10 threaded rods , y-corners 3D printed part, M10 washers and M10 nuts. Slide the M10 washers and nuts in each of the threaded rods and make sure that the distance between the Y-axis corner and washer is 100mm.

Prepare the M8 Rods

Take two 8 mm threaded rods and insert them into the y-motor part. The part has to be somewhere in the middle, it need not be exact at the moment. Then secure it using M8 nuts and washers. Repeat the same thing for the y-idler part. Then slide two more M8 nuts at both ends for all the 8 mm threaded rods. (check pics for more clarity).

Joining the Y-Axis Frame

Now, join these front(y-idler with rods) and back(y-motor with rods) part into the y-axis corner blocks as shown. Ensure correct placement and orientation of these parts. Note that the y-motor part has to be closer to the double nut side. Secure the corner blocks using M8 washers and nuts.You can even use the wooden frame and smooth rods to align the parts. Try to make it as rectangular as possible.

Prepare the Y carriage

Attach the y-belt-holder to the Y-Axis carriage using M3 Screws. Align the linear bearings (LM8UU) on the carriage and secure them using zip ties. Make sure that you place the bearings on the correct side as shown.

Attach Motor, End-stop and Carriage

Secure the motor and end-stop using M3x10 screws. Then slide the 8 mm smooth rods into the carriage and slowly mount it to the frame. Do this by applying pressure to all four corners. Move the carriage and ensure that it moves freely. Then secure the smooth rods using zip ties.

Attach the Y-axis belt

Now, flip the whole assembly. Insert the belt in the belt holder, you can use a pliers to accomplish this. Now, Loosen the motor and rotate it as shown. Attach a pulley to the motor and loop the belt around the idler followed by the motor pulley and back into the belt holder. Then rotate the motor back to it place and adjust tension in the belt.

This completes the Y-axis. Again, Make sure that the frame is rectangular and is levelled if not level loosen the M10 nuts and try to level it using a smooth surface.

Step 4: Building the X-Axis

Parts Used for this step

  • x-end-motor
  • x-end-idler
  • x-carriage
  • LM8UU
  • M3x10, M3x18, screws
  • M3 square nut
  • Smooth rods (370 mm)

Prepare the 3D printed parts

Insert the Linear bearings (LM8UU) into the x-end-motor and x-end-idler parts. We need to insert the bearing in such a way that the internal balls of one are rotated by 45 degrees to the other. This ensures maximum contact with the smooth rod.

Prepare the x-end-idler part, Notice that it has two slots, one above and one below the part. Insert M3 square nuts in these slot and screw theses nuts using M3x10 screws. These screws will push smooth rods thereby providing tension in the belt. Once the belt is added, you can tighten these screws, to do some fine adjustment in the belt's tension.

Attach the rods and Carriage

Take two 370 mm smooth rods, slide two Linear Bearings in one rod and one Linear Bearing in the other rod. Then insert these rods into the printed parts and use zip ties to attach the x-carriage with those three linear bearings (see the figure). Please ensure the correct orientation of the x-carriage in this step.

Fix the Enstop and Motors

Then mount the end-stop to the x-end-motor part using two M3x10 screws. This end-stop would be triggered by the extruder body, which would be attached later. Attach the pulley to the motor and mount it to the motor x-end-motor using M3x18 screws.

Attach the belt

Now this part is a bit tricky and requires some trial and error , to get the right tension.

Make a small loop and insert the belt in the x-carriage. Loop the belt through the pulley and motor and guide it back to the other end of the x-carriage. But before you insert the other end into the carriage, loosen the motor screws and rotate it a bit.

Then fix the belt into the carriage and rotate the motor back in place. Check the tension in the belt, it should neither be too tight or too loose and you should be able to pluck it like a guitar string. Then trim the excess belt and fix the motor back in place.

Step 5: Building the Z-Axis

Part used in this step

  • z-axis-bottom
  • z-axis-top
  • z-Nut-holder
  • M3x30 screws
  • M3 nuts
  • M5 threaded rods
  • smooth rods (320 mm)

Attaching the Stepper motors

Attach the z-axis-bottom to the frame, note that this part has a left and right version and make sure you check which side is the correct one. For attaching these parts to the frame use M3x30 screws along with M3nuts. Then join the stepper motor to the motor mount using M3x10 screws.

Assembling the Z-Axis linear motion

Now attach the flexible couplers and the M5 threaded rods to the motors. Inside the coupler, half the distance must be occupied by the motor’s shaft and the other half by the threaded rod. This will ensure better stability and reduce Z-wobble , which in turn will give us better print.

Finally, insert two smooth rods (320 mm) into the circular groves of the motor mount.

Preparing the Z nut holders

we need to sandwich, two M5 nuts between the Z-axis nut holder. Then screw them to the x-end-idler and the x-end-motor part. The orientation of the nut holder does not matter.

Joining the X and Z axis

Align the Z-axis and the X-axis and carefully ,then slide the X-axis on the linear rods. Make sure that the threaded rods align into the M5 nuts. After which rotate the threaded rods so that the X-axis goes in. Now, mount the z-axis-top to the frame using M3x30 and M3 nuts. Similar to the z-axis-bottom part, we have two versions for the z-axis-top left and right, Make sure you mount them accordingly

Joining the Y axis

Joining the Y-axis to the frame is very simple. Just grab the Y-axis assembly in one hand and use your other hand to hold the frame, slowly slide down the Y-axis into the frame. Ensure that the frame is between the washers for better support. Then slowly tighten the M10 nuts using a spanner.


Congrats if you have reached so far. We have completed more than 90% of the mechanical assembly. The rest of the build is pretty simple and straight forward.

Step 6: Building the Extruder

Design Choices

Basically we have two types of extruder designs we can follow, they are:

  1. Direct Drive extruder
  2. Bowden extruder

For the Direct drive extruder the motor is mounted on the carriage , whereas for a bowden extruder it is mounted somewhere else and the filament is fed using a bowden tube. Both the designs have its pros and cons. Although Direct drive makes the carriage a bit heavy, it offers a better print quality and reliability. Hence we will stick with the Direct drive design.

Prepare the Extruder parts

For the extruder we have two main 3D printed parts which are extruder-body and extruder-cover. We need to prepare these parts by placing the M3 nuts in the appropriate position as shown. In order to make your life easier , You could use a long M3 screw to align and push the nut into the nut traps.

Mounting the Hotend

To melt the plastic, we are using a E3D v6 hotend (clone obviously). Which is pretty good and I have had no issues with it. Cut a small piece of Teflon tube and insert it into the hotend. Then gently slide the hotend along with the tube into the extuder body part. At this point we can secure the extruder-cover using a M3x18 and M3x30 (with washer).

Making the Extruder idler

Insert the plastic shaft into the 625 bearing and mount the bearing to the extruder-idler part. You might have to use some force to get the bearing in, but once its in , make sure that the bearing is smooth and free to rotate.

Attaching the Extruder motor

Fix the motor to the extruder using a M3x30 screw. Gently tighten the motor screws and do not over-tighten as the plastic might crack. Similarly mount the extuder idler using a M3x30 screw. Attach the MK8 drive to the motor and align it using a small piece of filament .

Now prepare the extruder tension-er using two M3x40 screws along with a washer and spring combination. Then screw in the idler springs in place. Make sure you do not over-tension these springs as it might cause difficulty inserting the filament.

Attaching the Probe and Cooling fan

Mount the radial fan using M3x20 screws. and also the inductive probe , we will adjust height of the inductive sensor later.

Securing the Extruder to the X-Carriage

Now, Align the extruder with the X carriage and also guide any cables through the carriage. Position the extruder properly and secure it by three screws as shown. You may also take some time here and do some cable management. Also don’t forget to add the extruder fan.

Step 7: Lets Connect the Electronics

In this project, I am using Arduino Mega 2560 and RAMPS 1.4 shield. There are newer boards available having better features, but I found this as a cheapest option.

You also various options for the stepper drivers. You can pick anyone depending on your budget and application for your 3D printer.

  • A4988 - cheapest but does the job.
  • DRV8255 - slightly better than A4988 as it provide more current.
  • TMC2100 - Most Expensive but runs the motors with less noise.

Mount the Board to the Frame

Attach the Arduino Mega to the frame using zip ties and insert the RAMPS shield on it. Install your stepper drivers on the RAMPS board.

Note: Inserting a stepper driver the wrong way around may damage it and the other electronics. Please check the manual of your stepper driver for this step.

Mount the Power supply

Next mount the power supply to the frame, for this I simply drilled two holes on the frame and attached the power supply with screws.

Attach the Heated Bed

Then attach the heated bed to the Y-carriage. Use M3x25 screws and M3 nuts to secure the bed. I also used M4 nuts as spacer as shown.

Some heated beds come with preinstalled wires but if yours doesn't come with the wires use atleast 14 AWG and above rated wires. I prefer the silicon coated wires as these are more flexible and has less wear and tear.

Note: Soldering the wires to the heated bed is not as easy as it seems, I recommend to buy the ones which have the wires preinstalled.

Mosfet issue on the RAMPS 1.4

The heated beds can draw 10 to 15 A of current but the Mosfet that comes with RAMPS 1.4 board weren't that powerful enough to deliver such a current. Hence if your planning to use a heated bed frequently then I strongly suggest you use an external Mosfet board. You can even make your own Mosfet board using the IRF3708 Mosfet.

Once we have everything installed, we can start with the wiring. Just follow the schematic attached. The wiring can get messy and confusing and I recommend labelling the cables.

Then double and triple check your wiring. With this we complete the hardware assembly.

Step 8: Programming the 3D Printer

In this step, We would be programming the firmware of our 3D printer. A major chunk of the work is already done if your using my pre-configured software. Only a few minor tweaks in the configuration file would be required to get it working on your printer.

Marlin Firmware

In this project we would be using Marlin. Marlin is an open source firmware primarily designed for 3D printers using the Arduino platform. It is very popular and very common in the community. It supports 8-bit and even 32-bit controller boards. This is what allows the printer to perform various actions such as moving the motor, regulating the temperature and so on.

Installing Arduino and setting up Marlin

Since Marlin works on the Arduino Platform, you need to install Arduino IDE.

Then Open the "Marlin.ino" file using the Arduino IDE and select the "Configuration.h" file. Modify the settings in the file to match your printer. For more detail check the Offical Marlin.

Here are some settings you find want to modify.

  • STRING_CONFIG_H_AUTHOR - is shown in the Marlin startup message, and is meant to identify the author
  • BAUDRATE - The serial communication speed of the printer
  • MOTHERBOARD - is set to "BOARD_RAMPS_14_EFB", change this if your using some other board
  • TEMP_SENSOR_0 - sets the temperature sensor type for the primary hotend.
  • TEMP_SENSOR_BED - sets the temperature sensor type for the heated bed.

These were the basic settings, for now just upload the firmware and will tune the other parameters during calibration.

Step 9: Calibrating the 3D Printer

Setting up

Open Proterface, Which a 3D printing host software and comes with PrusaSlicer. Then select the proper "COM" port and Baudrate. Click on the connect button.

End-stop Calibration

  • Send 'M119' command
  • Then press the X and Y end-stops one by one and see if they are triggering as intended

Axis Direction Calibration

  • Move the all the axis using the arrow buttons and note if they are moving in the right direction.
  • If not set the INVERT_X_DIR, INVERT_Y_DIR and INVERT_Z_DIR accordingly.
  • Home the printer by sending 'G28 X Y' command

Adjust the height of the inductive sensor

  • Lower the Z Axis until the nozzle slightly touches the bed.
  • This might need some trial and error. Use a paper to feel the drag force. It should be just enough for the paper to slide.
  • Then adjust the inductive sensor such that it triggers at this position

Calibrate the "Steps/mm" for the axes

  1. Move the axis to a certain distance
  2. Measure how much did the axis actually move
  3. then calculate the new steps/mm
  4. New steps/mm = (Desired Distance / Measured Distance) * Old steps/mm
  5. update the new steps/mm in DEFAULT_AXIS_STEPS_PER_UNIT setting
  6. Do this for all the axis and even for the extruder

Step 10: First Print

There are many software tools available for slicing such as PrusaSlicer, Cura, Simplify3D. I would be using PrusaSlicer for this Instructable.

  1. Open PrusaSlicer.
  2. If this is your first time a configuration window should pop up.
  3. Add the settings of the filament in the Filament Settings.
  4. Ensure the printer settings.
  5. Import the 3D model to be printed (often these are in stl files)
  6. Click on "Slice Now" and "Export Gcode"
  7. Open Pronterface and load the Gcode file
  8. Click the "Print" button and enjoy your print.

Step 11: Upgrades

In the course of these years , I made 3 main upgrades

1) Enclosure for 3D printer

Check this Instructable , which served as an inspiration for building my enclosure. The enclosure protects the 3D printer from dust and it confines the harmful fumes. There are numerous tutorials how to build one.

2) WiFi 3D printing using ESP3D

I often work in another room and being able to control the printer using WiFi is very helpful. You can also download the "Octoprint" App and use your phone as a remote to control the printer. To achieve this I used an ESP8266 board and connected it Serial 1 of the Arduino Mega.

3) Close loop control Nema 17 Motor

I also added a closed loop control motor. This isn't that necessary but it allows me to print faster.

Step 12: Conclusion

Overall all, I had super fun building this printer and I still use it to build projects, for example 3D printed Drone and even many more projects to be published. This project involves electronics, mechanics and software which makes it an excellent project. You also get insights into open source and open source hardware. I feel this is a great way to learn engineering, that is by building awesome projects.

Okay we have reached the end of this Instructable. I hope you enjoyed reading it. I would be posting more Instructables soon , so follow this channel if you don't want to miss such content. See you in the next one, bye and happy printing.