3D Printer by Cooking Hacks: How to Assemble Your Own 3D Printer

Difficulty Level: Expert -

Yes, still another 3D Printer... but just give us one minute to show you why this is interesting for a person who starts on the 3D printer world.


The price of these printers drops while its performance is improved. This opens a huge world of opportunities. These are some of them:

Bring your own designs to life

Turn your product designs into reality with 3D printing. Imagine, Print, Go!

Repair objects

Create your own replacement pieces for all kinds of things. No more expensive technical repairs.

Molds for products

A 3D printed object is perfect for building a mold for wax and other silicone and plastic injection techniques.

Rapid prototyping

Engineers and product developers can now create their own prototypes in hours.


Imagine printing your own personages from your favourite role games such as Warhammer.

Mockup / Miniatures

Create your own world. Construct your own city at home.

1. Introduction

1.1 3D printer features

  • Input voltage: 220V (Europe) / 110V (US)
  • Material: 3mm ABS (recommended) and 3 mm PLA
  • Approximately assembly time: 12 hours
  • Printing area: 20x20x20 cm
  • Printer dimensions: 34x44x37 cm
  • Based on the PRUSA ITERATION 3 - IT3

1.2 3D printing process

A 3D printer is just like a normal colour printer. The main difference is that it prints with plastic and 3-dimensional objects. The printer prints small plastic threads in layers forming the object you want.


Depending on the machine used, material or a binding material is deposited on the build bed or platform until material/binder layering is complete and the final 3D model has been "printed." A standard data interface between CAD software and the machines is the STL file format.


To perform a print, the machine reads the design from an .stl file and lays down successive layers of liquid plastic to build the model from a series of cross sections. These layers, which correspond to the virtual cross sections from the CAD model, are joined together or automatically fused to create the final shape. The primary advantage of this technique is its ability to create almost any shape or geometric feature.

Construction of a model with contemporary methods can take anywhere from several hours to several days, depending on the method used and the size and complexity of the model.

3D printers give designers and concept development teams the ability to produce parts and concept models using a desktop size printer.

1.3 Bill of materials

Here's the parts you need to get:

1.4 Kits and accessories

2. Mechanical assembly

Before joining the 3D printer we recommend:

  • Drill all the plastic parts:
    Some of the holes will most likely need to be widened. Depending on the size and amount of widening needed either use a round file or a drill. Be extra careful if using a drill. The parts can easily crack if the drill bit gets stuck or angled.
  • File plastic parts:
    Most of the parts need clean up. Usually the printing material closest to the heat bed tends to bleed some. Use a fine file or sandpaper and be careful with some parts
  • Insert nuts in their sites:
    Sometimes you need tu insert the nuts in their marks. To do that, slightly heat the nut using a soldering iron then push it in his mark. Be careful with this operation.
  • 2.1 Y axis assembly

    In this link you can find Y axis assembly video-instructions "Prusa IT3 Animation" by Andrés Dans

    Assemble the Y frame using four short threaded rods.Find two of the SHORT M8 threaded rods (there are long and short ones), 10 M8 nuts, and 10 M8 washers, and the printed parts shown in the picture: Build this part of the printer as show in the picture. If necessary, use the 8mm drill bit and 3mm drill bit to clean out the holes in the parts. Fit the y-idler on one of the upper short M8 threaded rods. Secure with nuts and washers on either side. If you forget it is easy enough to fit it later. No need to tighten this yet.

    Place 2 of the Y-corners (printed) on the ends of the rods. Make sure the open side of the printed pieces pointing the same way as the forked side of the center piece.

    Repeat for the other side. Thread two of the threaded rods through the y motor holder parts. Again, secure with nuts and washers.

    Do the same for the other rods. This time the open side is points the same way as the motor holder in the middle, just like in the photo:

    The distance between the two printed parts will be adjusted later. Check that the distance is the same on the bottom too.

    Now, take the long M10 threaded rods, 4 M10 washers and 4 M10 nuts. And the previous two parts.

    Put two washers in the middle of each rod, and a nut on each end to hold them in. Leave those around 10cm from the middle of the rod.

    Put a nut on one end of each rod, followed by a washer. Put the motor holder end onto the ends of the threaded rods, and put a washer and nut on the other side to hold them in. Tighten the nuts. Repeat the process with the y-idler part.

    Depending on the type of linear bearings that we have, there are 2 possibilities. If we have LM8UU bearings, we have to join them to the hotbed plate with a plastic flange. If we have SCS8UU bearings, we have to join them to the hotbed plate with some screws, washers and nuts. In this case, we provide LM(UU bearings.

    Now that we have the linear bearings in their positions, we can join the plastic beld holder to the hotbed plate and put the plains rods in their place.

    Finally, join the hotbed with the hotbed plate using some screws and nuts and the springs. These will help us to level the bed.

    Before joining the Y-frame, we have to fit the Y motor in his support and the belt guide in the Y-axis idler.

    To make the belt guide we have to use a 623ZZ bearing and two plastic parts. If it is necessary, join the plastic parts with some glue.

    Now we can join the hotbed group with the printer stand.

    To complete the assembly of the Y axis, we have to put the belt in his place.

    Check that the bed slides smoothly. It will feel rougher because of the detent torque of the stepper. You should be able to feel each step.

    2.2 Z axis assembly

    First, join the Z motors to their plastics supports and fit them to the principal plate. Do it with the two motors. As we can see in the photos, we will use a coupler to join the motor to the Z-Axis M5 threaded rod (first we have to do the X-Axis assembly).

    Make sure that the smooth rods can fit inside the support. If they cannot go through, drill out the holes. Then, fit the Z-axis top mounts to the plate with the smooths rods.

    2.3 X axis assembly

    Fit two linear bearings and the two smooth rods into the X-end and the X-idler plastic pieces. Before joining the group, fit three linear bearings to the X-carriage using six plastic flanges and put the X-motor into the X-end.

    Now that we have got the three parts, we can join them and put into the Z smooth rods. Also, fit M5 nut into the x-motor and x-idler ends, screw the M5 threaded rod and join them with the coupler to the Z-motors.

    After joining the Y-frame, the belt guide in the X-axis idler. To make the belt guide we have to use a 623ZZ bearing and two plastic parts. If it is necessary, join the plastic parts with some glue.

    To complete the assembly of the X axis, we have to put the belt in his place.

    Once we have done these steps, we will have something like this:

    Check that the X-carriage slides smoothly. It will feel rougher because of the detent torque of the stepper. You should be able to feel each step.

    2.4 Extruder assembly

    Locate the pieces shown in the photo. Drill out the holes of the plastic pieces for a perfect fit.

    Take the shortest smooth rod with a 623ZZ bearing and place it in the smallest part of the extruder and put the a M3 nut into the trap. You can use pliers and some heat to fit them into position.

    Fit a 623ZZ bearing into the plastic part.

    Put the extruder bolt with the nuts into the gearwheel.

    Put the plastic pulley in the extruder motor and join all the pieces.

    Locate your hot end and with a piece of metal wire or two screws (depending on the model) place it.

    After these steps, we will have an extruder like this:

    Finally, put two screws and nuts like in the image, you can improve this part with two long springs in the screws:

    NOTE: The extruder is one of the most important parts of the 3D printer. The assembly instructions can change as a function of the extruder chosen.

    2.5 Printer assembly

    You have to join the drivers, the ramps and the arduino mega.

    Electronics are mounted on the back of the frame.

    Fit the extruder in the X-carriage with two long bolts a two nuts.

    Join the Z-X-frame with the Y-frame and you will have your printer.

    3. Electronic assembly

    Here is what you need to assemble your electronics. Take your time to find these items in your kit and choose how you want to connect them.

    Here are some guidelines on how to start:


    Place the headers on your RAMPS (optional), and the motor drivers on them as shown. Watch out for the orientation.

    NOTE: In some cases, to prevent the overheating of some components, is recommended to upgrade the electronics using some heatsinks in the mosfets and drivers and put a fan.


    Take your heated bed and solder two high current cables:

    You must place the thermistor in the center of the bottom of the heated bed using some Kapton tape to measure the temperature.


    This simple hack is needed. Put all the wires except the two yellow-black ones to the side. You can cut the excess wires.

    NOTE: You can use more than two yellow and black wires. You can put all them in the connector to give the current to the circuit in a better way.


    Cut motor cables to your own length and solder with junper wire connector.

    Make sure to connect the motor wires in the correct position. They will fit the RAMPS motor connectors, in addition the z driver will need 2 motors connected.

    To adjust the drivers, measure the voltage on the wiper of the pot you are adjusting and set it to 0.4V. That will give 1A, which is the max the driver will do without a heatsink, It seems to be enough to run all the axes of your 3D printer, it might be a bit low for an extruder.


    Make the same wiring/solder process as the motors (jumper wire - 2 pin).

    Place the end-stops limiting your maximum printer movements. A simple way is to place them using some plastic parts or with a plastic flange directly.

    4. Software

    Here is a brief list of the software that you need to use our 3D printer. There are other firmwares and programs that you can use, but this list is which we recommend for beginners.

    • Arduino IDE

      The open-source Arduino environment makes it easy to modify the firmware and upload it to the Arduino Mega.

    • Marlin

      It is the code that Arduino needs to understand all the commands that our computer sends to it. We have to configure most of our 3D printer parameters on it.

    • Cura

      It is the software for dealing with STL files. With this program we translate our 3D design into GCODE, the 3D printer language.

    To make things easier, here is a link with all the necessary software that we are currently using.

    5. Calibration process

    Depending on the software and firmware you are going to use, the calibration of your 3D printer can be slightly different. In our case, we recommend using Marlin and Cura due to their simplicity.

    5.1 Setting Marlin

    Now, we are going to setting Marling to work properly.

    To upload the firmware on our Arduino Mega, we recommend to use the Arduino IDE 0.23 but actually with some new Marlin versions you can use Arduino IDE 1.04 too.

    Once we have installed the IDE we have to search and open the Marlin.pde file.

    Now we have to go to the configuration.h. In this tab is where we have to do all the changes.

    The first variable that we have is “baudrate”, it is the communication speed between Cura and our electronics, thats why the must be the same. We recommend to use 115200 or higher.

    Now, we choose the electronic board that we have in our 3D printer.

    With our 3D printer, we are using an Arduino Mega with Ramps 1.4 and one extruder.

    If we go down, we find the configuration of our thermistors and thermocouples.

    You will select the sensors we have installed on our 3D printer, and introduce the following variables. Depending of your Hot End, you will select one sensor or other.

    #define TEMP_SENSOR_0 7
    #define TEMP_SENSOR_1 0
    #define TEMP_SENSOR_2 0
    #define TEMP_SENSOR_BED 1

    Now continue going down, we pass some variables to find the endstop settings. If we need to invert the logic of them, we have to do it in the following parameters.

    const bool X_ENDSTOPS_INVERTING = true; // set to true to invert the logic of the endstops. 
    const bool Y_ENDSTOPS_INVERTING = true; // set to true to invert the logic of the endstops. 
    const bool Z_ENDSTOPS_INVERTING = true; // set to true to invert the logic of the endstops.

    If you need to invert the direction of an axis, we can do it from the following variables, in this configuration, we must ensure that when we make a “homing” they go to their limits, or otherwise the can collide with the other end.

    #define INVERT_X_DIR false    // for Mendel set to false, for Orca set to true
    #define INVERT_Y_DIR false    // for Mendel set to true, for Orca set to false
    #define INVERT_Z_DIR true     // for Mendel set to false, for Orca set to true
    #define INVERT_E0_DIR false   // for direct drive extruder v9 set to true, 
                                  // for geared extruder set to false
    #define INVERT_E1_DIR false   // for direct drive extruder v9 set to true, 
                                  // for geared extruder set to false
    #define INVERT_E2_DIR false   // for direct drive extruder v9 set to true, 
                                  // for geared extruder set to false

    The next thing that we recommend to set are the maximum dimensions of our printer. With this, we avoid reaching the limits of each axis and burn any driver. With our 3D printer we recommend the next values:

    // Travel limits after homing
    #define X_MAX_POS 170
    #define X_MIN_POS 0
    #define Y_MAX_POS 170
    #define Y_MIN_POS 0
    #define Z_MAX_POS 180
    #define Z_MIN_POS 0

    The best way to know the limits is doing a “homing” and then, cliking the “move 10mm” button and count in each axis.

    We have to edit the next instruction if we see that our 3D printer do the homing very fast, we only have to reduce the values.

    #define HOMING_FEEDRATE {50*40, 50*40, 4*40, 0}  // set the homing speeds (mm/min)

    The following variable is the most important and it will allow us to calibrate your machine properly, so that if you move 10mm, it moves 10mm and not 35mm!

    #define DEFAULT_AXIS_STEPS_PER_UNIT   {145,145,5255,1900}  // default steps per unit for ultimaker

    These four value correspond to axes X, Y, Z and E, where E is the extruder.

    To adjust these values, we have to measure the movement of the axis when we puss in Cura (in the manual control menu) the arrow with the number 10 of each axis. And with a simple rule of three we will change the values. If my variable is 1000, and my axis move 14 when it should move 10, we have to correct the value with the next formula: (1000·10)/14=714,28 so we have to put 714,28 instead of 1000. We recommend to put the same value in X and Y to obtain perfect circles.

    Finally, we have a variable that will determine the speed of the printer, we recommend putting low values, and if it is necessary, increasing them gradually.

    #define DEFAULT_MAX_FEEDRATE          {30, 30, 5, 45}

    Now we have to upload the code and change to Cura.

    5.2 Setting Cura

    When Cura is installed, we can see a very basic setup wizard. We don't recommend using this mode because it is very important to know all the printer settings. That's why we will change to normal mode.

    Now we will set the preferences of the program.

    In Machine Settings, we will put the dimensions of our 3D printer (width, length and height), the number of extruders, if we have or not heated bed and a parameter called “Steps per E”, it allow us to change the number of steps per unit of our extruder, so that if we see that we have changed the plastic and for this is necessary inserting more plastic, we only have to increase this parameter to solve it.

    Filament Settings allow us to put some parameters of our plastic. It allow us to get the price of the piece that we are going to print.

    In Communication Settings we have to set the baudrate and the port where our Arduino is connected.

    Slicer Settings saves the profile in a file.

    SD Card Settings allows you to choose the location of the SD to savethe files for stand-alone mode. It can save the files in short filenames, so they are properly shown on the LCD.

    5.3.1 Expert Mode

    Now we have to set the expert mode.

    Accuracy gives an additional wall thickness of the bottom and top layers.

    Cool is for setting the parameters of a fan (if we put it), especially if we use PLA. We can set the minimum feedrate, the layer when the fan is on and the fan speeds.

    Raft (if enabled) configures the RAFT parameters. The Raft is a base layer which is very useful for parts that don't have a good adherence.

    Support sets the parameters of the support material. This material is used for printing overhangs.

    Infill sets the filling of the pieces. Infill pattern sets the type of pattern of the none-solid infill. Solid infill top creates a solid top surface, if set to false the top is filled with the fil percentage, it is very useful for cups and vases.

    Bridge sets the speed at which layers with bridges are printed, compared to normal printing speed.

    Sequence sets the print sequence.

    Joris is a code name for smoothing out the Z move of the outer edge. This will create a steady Z increase over the whole print. It is intended to be used with a single walled wall thickness to make cup and vases.

    Retraction. Only retract when we are making a move that is over a hole in the model, else retract on every move.

    5.3.2 Print Config

    In this windows we are going to set the details of our print.

    Layer height. This controls the thickness of the layers that directly affects the quality of the final print. For an extruder of 0.5, the value of 0.35 provides decent prints.

    Wall thickness. Thickness of the walls. This is used in combination with the nozzle size to define the number of perimeter lines and the thickness of those perimeter lines.

    Enable retraction. Retract the filament when the nozzle is moving over a none-printed area.

    Bottom/Top thickness. This controls the thickness of the bottom and top layers, the amount of solid layers put down is calculated by the layer thickness and this value. For a layer height of 0.3 the value 0.9 will generate 3 solid layers.

    Fill density. This controls how densily filled the insides of your print will be. For a solid part use 100%, for an empty part use 0%. A value around 20% is usually enough.

    Skirt is the printed line around the object. This helps us to prime the extruder, detect if the bed is bad leveled and if the object fits on our platform.

    Print speed. Speed at which printing happens. For some 3D printers a value of 45mm/s is enough.

    Printing temperature. The temperature at which we will extrude the plastic, usually 230ºC fir ABS and 185ºC for PLA. Bed temperature. Temperature used for the heated bed. We use 110ºC for ABS and 60ºC for PLA.

    Support structure. This includes support material to make some parts that have overhangs. You need to remove the material after printing.

    Add raft. A raft is a few layers of lines below the bottom of the object. It prevents warping.

    Diameter. Diameter of your filament, as accurately as possible.

    Packing density. This should be 1.00 for PLA and 0.85 for ABS.

    5.3.3 Advanced Config

    This tab allows you to configure some settings of your printer.

    Machine size. We set the size of our nozzle (extruder nozzle) and the center of the platform where you start printing.

    Retraction. We can set the minimum trip vacuum to retract the filament (Minimal travel), the retraction of the extruder speed (speed), the amount of plastic retracts (Distance) and the amount of plastic added to extrude when it starts again (Extra lenght on start).

    Speed. First, we have the movement speed in vacuum (Travel Speed), then we have the maximum speed of the Z axis (Z Max ​​Speed) and finally the speed of the first layer (Layer Bottom Speed) if we have adhesion problems, we can reduce this value to find the optimum for our printer.

    Cool. This option will activate or not a fan to cool the pieces.

    Accuracy. Here we set the initial layer thickness and a very interesting option SKIN, skin makes the outer perimeters improving the visual quality of the piece.

    5.3.4 Plugins

    In the latest versions of Cura, the developers have added the possibility of using third-party plugins.

    Pause at height. It is a feature to perform an operation, like switching the filament, cleaning a part of the object while you can still access it or inserting an object that will be encapsulated into your print. The plugin is included by default since version 12.11 of Cura.

    5.3.5 Start/End G-CODE

    The 3D printer work thanks to some instructions, whose language is called G-Code.

    In this tab we can add or remove additional code.

    6. Hello world with your 3D printer

    Once we have configured the program to print (in our case CURA), we must click on Prepare Print, which will generate the G-Code, and then we will click on PRINT. A new window will appear called Panel impression. In the new window, we select to print, and the printer starts to get the optimum temperature.

    Next we have the JOG tab, where we can control our printer axes, make homing clicking on home button and extrude and retract plastic.

    Finally we have the TERMINAL tab, where we can see if there is an error in printing.

    To start with the printer can use the method of calibration cubes.


    This is a simple method that tests the settings of your 3D printer. You can print test cubes each of a different size. This collection contains 10 different sizes (edge length) reaching from 5 to 50 mm with increments of 5 mm.

    Calibration cubes collection

    This is a plain, simple and accurate 20mm cube for use with calibration:

    If you are having problems with uneven surface finish in things with curved surfaces, this calibration shape provides a quick print shape with a diversity of surfaces to check.

    Surface finish calibration test shape

    7. Getting new renders to print

    3D printing lets anyone make almost anything with a simple machine and a roll of plastic filament.

    Thingiverse is a place for you to share digital designs with the world. Thingiverse is a universe of things. Download our files and build them with your lasercutter, 3D printer, or CNC.

    The process is simple:

    Choose an object

    Download the .stl file

    Print it with your printer

    8. Links and documentation source

    Download our IT3 frame: IT3 frame (modified)

    9. Forum

    There is a forum available in which our team will help you with any issue related to the 3D Printer.

    10. Training Courses

    Cooking Hacks brings the opportunity to build your 3D Printer with some help from our engineers. Along the year, we will make events, workshops and e-learning courses to join the 3D Community, learning how to build and calibrate your Cooking Hacks 3D Printer.

    11.1. Face to Face Workshops

    Here you will find the upcoming events. If you are interested in attending them, we will post all the information in our Blog with all details to sign up. You can subscribe to our RSS to stay tuned.

    11.2. e-Learning Support

    12. Recognitions

    We want to thank to all people who constitute RepRap 3D printer community project as well as the spanish community Clone Wars for their great documentation and support.

    We also want to thank you too to Josef Prusa, for his dedication to the 3D Printers and all the R&D that he has done for the community.

    The Cooking Hacks Team.

    If you are interested in Internet of Things (IoT) or M2M projects check our open source sensor platform Waspmote which counts with more than 100 sensors available to use 'off the shelf', a complete API with hundreds of ready to use codes and a low consumption mode of just 0.7µA to ensure years of battery life.

    Know more at:

    Get the Starter Kits at: