Introduction: Edge 3D Printer 1.0 - an Affordable Open Source 3D Printer!

Picture of Edge 3D Printer 1.0 - an Affordable Open Source 3D Printer!

Hello everyone! In this instructable I will show you how to make a low cost 3d printer that I designed! It should cost around $150 US dollars or $175 Canadian dollars, if you buy from the links provided in this project (parts are from Aliexpress). You can also buy locally but it will cost more (about $300- $400 instead of $150).

The print bed size is 5.5"x6"x6".

Update: Version 3.0 will be posted on Feb 8 2016 at 3:00 (PT)

You WILL need to have at least some knowledge in 3d printing to complete this project.

***Please vote for this Instructable in the CNC challenge (upper right corner) ! I'm 13 and I designed and built this myself so please, if you like this instructable favourite, vote and comment. It encouages me to keep doing what I do.***

Step 1: Parts and Tools

Picture of Parts and Tools


GT2 pulley x2:

GT2 Belt (about 2m):

USB type b to type b extender x1:

DC power socket x1:

LM8UU Linear Bearing x4:

Acrylic x2 8"x12" (You can also buy it from a local plastics shop and it is about the same price as aliexpress):

30mm Fan x2:

3d printer wiring pack:

Direct Drive gear x1:

608 bearings x1 lot of 5:

M3 8mm screws x1 lot of 50:

5mm to 8mm coupler x1:

SC8UU linear bearing x2:

1m PTFE tube (bowden tube) x1:

Arduino Mega and RAMPS board kit x1:

Endstops x3:

Nema 17 motors x4:

All Metal hotend: you can also use a ceramic one instead.

Smooth Rods: 1272T38 Mcmaster Carr part #

Threaded Rod: Home depot 5/16 inch threaded rod and a nut that screws onto the rod


Laser Cutter

3D Printer and filament or buy the parts from


Soldering Iron and Solder

Computer with Arduino IDE, Pronterface, Slicer software

Step 2: Laser Cut and 3D Print Parts

Picture of Laser Cut and 3D Print Parts

Go to this thingiverse link to download the files:


Step 3: Mount Motors to Acrylic Parts

Picture of Mount Motors to Acrylic Parts

Using the m3 10mm screws mount the nema 17 stepper motor to the main acrylic piece. This is the piece that has the most mounting holes. Do this for both the both the x and z motors.

Step 4: Wire Motors to the RAMPS Board

Picture of Wire Motors to the RAMPS Board

Plug the motor cable into the connector board. On the board, there are headers that you connect the cable to. Don't worry about polarity: this won't affect the motor, it will just spin in reverse which you can invert in the firmware.

Step 5: Extend Arduino's USB Connector

Picture of Extend Arduino's USB Connector

Extend arduino's USB connector by desoldering the type b connector and just adding wires to each of the pins bringing the wires to the connector. It sounds complicated, but it is really simple.

Step 6: More Wiring

Picture of More Wiring

Wire the hotend using the schematic above, solder both of the red wires to D10 (the screw terminal) and +. Again the polarity does not matter at this moment because the hotend is just shorting out a flame proof resistor to heat up. Then wire the thermistor wires to T0 on the board. The polarity also does not matter on this one because it is a resistor.

Step 7: Mount SC8UU Bearings to Acrylic

Picture of Mount SC8UU Bearings to Acrylic

Mount the SC8UU bearings to the same acrylic plate as the motors. To mount the bearings to the plate, put M3 25mm screws through the bearing then put the bearing onto the plate making sure that the screws are going through the screw holes that are placed in a rectangular pattern. These will be the bearings for the x axis.

Step 8: Couple Z Motor to Z Rod

Picture of Couple Z Motor to Z Rod

Couple the Z motor shaft to the Z motor rod using the flexible coupler.

Step 9: Build the Extruder

Picture of Build the Extruder

3d print the parts for the extruder. Then with a stepper motor and the direct drive gear use an Allan key to secure the direct drive gear to the motor shaft. Then secure the 625zz bearing to the 3d printed part. Next mount the whole 3d printed part and the bearing onto the motor's mounting holes. To finish off the extruder, connect the bowden tube to the extruder assembly using super glue or JB weld. Now the extruder is finished. Now onto the next step.

Step 10: Mount USB and Power Jacks

Picture of Mount USB and Power Jacks

Mount the two ports with some hot glue or JB weld. Onto the back piece that has a Canada flag on it (yes I'm canadian). I designed it so I have the maple leaf on it.

Step 11: Put Enclosure Together

Picture of Put Enclosure Together

Once all of the wiring is complete from step 10 you can route all of the wiring from the RAMPS board out of the opening in the front piece. Mount the RAMPS board into the bottom piece and then you can assemble the whole enclosure with some of the m3 screws and nuts. DO NOT OVERTIGHTEN. If you do the acrylic will eventually crack that's what happened to my acrylic so keep that in mind while tightening the screws. The enclosure comes together like a puzzle and there should be only one possible way to put it together.

Step 12: X Axis

Picture of X Axis

Now we build the x axis. Glue the endstop for the X-Axis to the left side of the top piece in between the two bearings. Mount the 3d printed part onto the motor using m3*15mm screws. Once the part is mounted to the motor push fit two 625zz bearings onto the part. After that mount the gt2 pulley onto the motor shaft, it's teeth should be about the same height as the bearings.

Step 13: Z Axis

Picture of Z Axis

Lets work on the Z axis. First lets start with the stabilizer piece. Mount the stabilizer piece to the Z axis motor with two M3*10mm bolts. Then push the 8mm smooth rods through the two parallel holes at the front. After that, put a nut through the threaded rod about halfway down the rod.

Step 14: Power Supply

Picture of Power Supply

You need a way to power the 3d printer of course! A really cheap and simple power supply is an ATX power supply from a computer so if you have an old computer power supply laying around you can put it to good use. To use it you must solder the green wire (Power Good) to any ground wire (Black wire) these wires are normally used to detect if the motherboard of the computer is connected to the power supply so if you don't solder those wires together the power supply will not turn on. Then wire any yellow wire (+12v) to the voltage in connector on the RAMPS board and any ground wire to the negative input connector.

An alternative to this is ordering a laptop power supply from the internet. the laptop power supply MUST be able to provide at least 5AMPs at 12 volts.

Step 15: Upload Marlin Firmware to Arduino

Picture of Upload Marlin Firmware to Arduino

Download the Marlin firmware here:

Then put the Marlin folder into your libraries folder under arduino. Do this by going into Documents --> Arduino--> Libraries and place the marlin folder into the libraries folder and rename the marlin folder to "Marlin" or anything without spaces or non-ASCII character.

Then open Marlin_for_edge.ino and compile it. If there is an error make sure you have the right board selected (Mega 2560) and the correct serial port selected.

Step 16: Calibration

Picture of Calibration

To calibrate your printer find this line in marlin's "Configuration.h" folder:

// default settings

#define DEFAULT_AXIS_STEPS_PER_UNIT {80, 80, 2618, 90}





Once you find this part, open Printrun Pronterface or whatever your favourite 3D printer controller is. Then having some calipers handy, press the move 10 units button (It should have a 10 on it) and measure the actual distance that your printer moved and write down that number for each axis.

Once you have the number of mm that your printer moved for each axis (for example 8 instead of 10mm), go into the code and find the default axis steps per mm. Use this formula to find out the new steps per mm :

S = (OS x SD) / RD

Where S= The correct step amount; the number that we are trying to find.

OS = The old steps per mm in our case this is 80.

SD = The number of mm's that the printer thinks that it moved in our case, 10mm.

RD = The actual distance that you wrote down for each axis

So if our 3d printer moves 8mm/10mm and our old steps per mm is 80 it will =

(80 x 10) / 8 = 100

So our new steps per mm = 100. If that is the number for the x axis replace the first number in the steps per unit line of code (we replace the first number because in the array the pattern is X,Y,Z,E).

Do this for all axes and yor 3d printer is calibrated.

Step 17: Room for Upgrades:

Picture of Room for Upgrades:

If you want to upgrade this 3d printer if you build it here are some upgrades that are worthwhile:

Auto bed leveling:

To do this you will need a limit switch, some 3d printed parts (I will provide links soon) and some modification in the marlin firmware. I will have another instructable showing how to do this.

LCD for 3D printing without a computer conected to it:You will need to buy an LCD like this one: they are fairly cheap and are definitely worth it. you will also have to change some things in marlin. Look for these lines in the configuration.h and make sure that these are un-commented:

//LCD and SD support
#define ULTRA_LCD





Build volume upgrade:For this upgrade you will need to buy longer rods for any of the axes that you would like to extend. you will need to make a larger print bed and you will need to change the print bed size in marlin:

// Travel limits after homing
#define X_MAX_POS 150 // change the x axis number to the print bed size in mm

#define X_MIN_POS 0

#define Y_MAX_POS 150 // change the x axis number to the print bed size in mm

#define Y_MIN_POS 0

#define Z_MAX_POS 150 // change the x axis number to the print bed size in mm

#define Z_MIN_POS 0

So if the old print bed size is 150mmx150mmx150mm and the new one is 200mmx200mmx200mm change the max pos numbers to 200 because it is 200mm in a cube.

Adding a Raspberry Pi with Octoprint:For this upgrade you need a raspberry pi, an SD card with at least 4GB, and optionally a raspberry pi camera. See this page fro more info:

Step 18: Slicing Settings and How to Use

Picture of Slicing Settings and How to Use

Here are the slicing settings that I currently use: (Use images)

These also work if you use them in Slic3r or any other slicer I just prefer Cura because it is fast and accurate.

To actually print something from the printer download an STL file from a site like youmagine or thingiverse. Once you have downloaded an STL file you can drag the file into your slicer or choice and click "Export Gcode" and save it to your desktop. To control the printer I like Printrun pronterface ( ). Once it is downloaded you can select "open" and select your G-code that you wnat to print. Connect your printer using a usb cable and press the "connect" button in pronterface. You are now connected to your printer and now you can press print. It will take a few minutes to heat up. When it is commpletely heated up it will start homing all axes.

Step 19: Things Printed

Picture of Things Printed

I still need to calibrate my printer a bit but here is my first print.


Zach Sousa (author)2015-04-13
rangersworld (author)2016-12-02

this is awesome i built a kit for someone who couldn't wire or build

you designed and built this printer I'm in grade 11 and I think your talented

Medelis (author)2016-06-03

very COOL instructable

If you want to buy powerful & cheap 3D Printer...
auto leveling

(NO MORE wasting TIME - 30sek. & Ready To Go)
super basic to use Cura 3D Printing Slicing Software ...MICROMAKE D1 ...

John T MacF Mood (author)2016-04-25

As well, the suggestions we "compile this" and use that , WITHOUT explicitly stating what language and where said compilers or languages can be had, or even which type controller the language is intended to be EEPROM burned to....

PLEASE leave specifications and links to compilers and code senders and WHAT controller you're sending to. You're assuming all people reading this have your level of expertise on this topic, when that is rarely the case.

John T MacF Mood (author)2016-04-25

I'd love to see a project that doesn't ask you to 3D print a part, when you don't have a 3D Printer completed yet...

Great concepts and project, just where do you suggest we print the parts we don't have when some of us have no mates or local 3D Hobbyist shops to rely on?

WiseSageBum (author)2016-03-26

About how much was the final price of this?

Zach Sousa (author)WiseSageBum2016-03-26

This version cost me about
$175 US, but I have made a 3.0 that works several times better for $200.

prosperer888 (author)2015-09-09

Hai, i want to purchase 3d printer from aliexpress do you think it worth the price for $255.00

i already have ramps and mega for the upgrade

JakobS3 (author)2015-08-06

You have to change the Motherboard Value in Configuration.h from



or it wont work.

Got it too work with an 20x4 lcd by now.

JakobS3 (author)JakobS32015-08-06

Also forgot to mention i needed to change line 693 and 694 from

#define LCD_WIDTH 20

#define LCD_HEIGHT 5


#define LCD_WIDTH 20

#define LCD_HEIGHT 4

Maxx57 (author)2015-07-15

The parts list for the bearings is wrong. You have a link to 608 bearings and specify 608 in your parts list, but then in the text you say using the 625zz bearings in the extruder. I bought what you had in the parts list and indeed the bearing is too big for the extruder 3d printed part. Please update the parts list. Thanks! I'm buying these bearings instead:

mac.pavia (author)2015-04-30

wow this is amazing and thanks to it being so cheap I might just be able to build it

p.s can you use the raspberry pi for it or do you need a computer


borgswen (author)mac.pavia2015-05-30

Of course you can but you will need to make sure your raspberry works with the software

profort (author)2015-05-28

How much did it cost and how long does it take to build please?

dwleo (author)2015-05-15

The instructions state:

Using the m3 10mm screws mount the nema 17 stepper motor to the main acrylic piece. This is the piece that has the most mounting holes. Do this for both the both the x and z motors.

My sheets came without mounting holes. Is there a template I am missing?

dwleo (author)2015-05-15

Great instructable!

Problem: The instructions state:

"Using the m3 10mm screws mount the nema 17 stepper motor to the main acrylic piece. This is the piece that has the most mounting holes. Do this for both the both the x and z motors."

The acrylic I got through your parts list are plain sheets with NO mounting holes.

bmoreno4 (author)2015-05-08

I'm so gonna do this

profort (author)2015-05-04

can you add a cnc machine to this

Zach Sousa (author)profort2015-05-04

You could add a burning laser diode, but I don't thing that the motors have a high enough torque for spindle for a CNC router.

Maxx57 (author)2015-04-21

I'm having trouble getting the .stl files printed by companies here near me. They keep asking me how big the largest part is, as if they cannot get the correct part sizes from the .stl files. So I imported the first .stl file into blender and looking at the 3d_printer_part_2.stl file, it is 150 feet when using the measuring tools. so, is there any way I can determine for sure the dimansions of the printed parts found here: I suppose I should ask you what program did you use to create the objects? and is it possible to list the dimensions of the items that need to be printed and laser cut so I can be exact when ordering them?

I have purchased all the other parts and only waiting on 1 item, other than the printed and laser cut items.

Thanks for your help, these are awesome instructables, wish I had waited for version 2 before making my purchases... :)

cindybutler (author)2015-04-15

Im 62, and soo impressed try to keep my self educated, love reading of all these builders , great work wish I new more about them but will read on your success, AKA THE DREAMER

EpicNickRocks (author)2015-04-13

I hate when tutorials require you to already have a 3d printer or laser cutter, we are trying to make this BECAUSE we don't have one.

Zach Sousa (author)EpicNickRocks2015-04-13

... Or if you want to make this I'm about to sell kits of this printer for about $225 to $250.

Zach Sousa (author)EpicNickRocks2015-04-13

I'm sorry, but it is quite difficult to design a completely laser cut 3D printer. Most open source 3D printers (repraps) require 3D printed parts because they are stronger than laser cut parts and are able to be much more complex parts because they are 3D instead of being completely flat. If you actually want to make this, just ask a member of the 3D printing community, I'm sure someone would be more than happy to print a few parts for you.

Kalkunz (author)2015-04-02

I think you could win the 3d printing contest if you entered it, it would be a big kickstart to your goals

Zach Sousa (author)Kalkunz 2015-04-13

I just entered V2.0 ( in the 3D printing contest!

masterrex1000. (author)2015-04-06

Would now be a good time to build this or will version 1.5/2.0 come out soon?

1.5 or 2.0 will come out soon, hopefully by Thursday. You should probably wait to build it.

hyperstock (author)2015-04-13

In step 12 the x drive the 3d printed part for the bearings is missing. What can the printer print in? (ABS/PLA) Good job love the project. I started to get the parts to build.

Thanks Matt

Zach Sousa (author)hyperstock2015-04-13

What do you mean the bearing part is missing? The printer can only print in PLA so far because it doesn't have a heated bed. If you want to build this printer, you should check out the version 2.0:

cmcmullen2 (author)2015-04-10

So what would be the total price tag to make this?

Zach Sousa (author)cmcmullen22015-04-10

For me, I spent around 200$. It depends on where you live and where you buy the parts though.

Xflyboy1 (author)2015-03-19

Have you been able to get the right implementation for like the 128x64 screen and SD card reader? Seems like that is where I am having my problem even with following other tutorials on how to implement it.

Zach Sousa (author)Xflyboy12015-03-19

I've never tried with that specific display but I have been able to get the 20x4 LCD to work with an SD card.

Xflyboy1 (author)Zach Sousa2015-03-19

I have the 128x64 with the built in SD card support. Do i have to do anything else to get it to work?

mickeypop (author)Xflyboy12015-03-20

Xflyboy1, there are several controllers out there. Can you be more specific as to model or even the link to where you bought it"?

Xflyboy1 (author)mickeypop2015-03-21

This is the exact kit i got for the electronics portion. I have not decided on which motors i want and if want to design or build my own frame yet.

mickeypop (author)Xflyboy12015-03-21

no problem the, yours is the "RepRap Discount Full Graphic Smart Controller.

As in my earlier post, comment out;

#define DISPLAY_CHARSET_HD44780_JAPAN with // at the left of the line and un-comment


A re-commpile should see the LCD, encoder, Stop and SD reader active.

Also double check the 2 ribbon cables, reversing them will not damage things but they will not work either. One other check, if your SD reader is working, Repetier ( ) can see your SD card from the PC and upload to it as well as select files to print.

Xflyboy1 (author)mickeypop2015-03-23

I have tried what told me to do. I get a high pitched noise from the beeper. and nothing on the display screen. I can see the SD Card though Repetier. But I can not see anything on the 12864 screen. Can someone help me?

mickeypop (author)Xflyboy12015-03-24

compile this. it will test only the LCD to see if the LCD is good or not


1. these pins assume a RAMPS 1.3 or 1.4 connection

2 make sure the u8glib library is 1.17, earlier don't have support for this LCD controller.

3 also swap the ribbon cables to see if the SD reader still shows up, just in case you have a bad cable.

/* Reprap Discount Full Graphic Controller -- LCD Test */
#include "U8glib.h"
U8GLIB_ST7920_128X64_4X u8g(23, 17, 16); // SPI Com: SCK = en = 23, MOSI = rw = 17, CS = di = 16
void u8g_prepare(void) {
void u8g_box_frame(uint8_t a) {
u8g.drawStr( 0, 0, "drawBox");
u8g.drawStr( 0, 30, "drawFrame");
void u8g_disc_circle(uint8_t a) {
u8g.drawStr( 0, 0, "drawDisc");
u8g.drawStr( 0, 30, "drawCircle");
void u8g_r_frame(uint8_t a) {
u8g.drawStr( 0, 0, "drawRFrame/Box");
u8g.drawRFrame(5, 10,40,30, a+1);
u8g.drawRBox(50, 10,25,40, a+1);
void u8g_string(uint8_t a) {
u8g.drawStr(30+a,31, " 0");
u8g.drawStr90(30,31+a, " 90");
u8g.drawStr180(30-a,31, " 180");
u8g.drawStr270(30,31-a, " 270");
void u8g_line(uint8_t a) {
u8g.drawStr( 0, 0, "drawLine");
u8g.drawLine(7+a, 10, 40, 55);
u8g.drawLine(7+a*2, 10, 60, 55);
u8g.drawLine(7+a*3, 10, 80, 55);
u8g.drawLine(7+a*4, 10, 100, 55);
void u8g_triangle(uint8_t a) {
uint16_t offset = a;
u8g.drawStr( 0, 0, "drawTriangle");
u8g.drawTriangle(14,7, 45,30, 10,40);
u8g.drawTriangle(14+offset,7-offset, 45+offset,30-offset, 57+offset,10-offset);
u8g.drawTriangle(57+offset*2,10, 45+offset*2,30, 86+offset*2,53);
u8g.drawTriangle(10+offset,40+offset, 45+offset,30+offset, 86+offset,53+offset);
void u8g_ascii_1() {
char s[2] = " ";
uint8_t x, y;
u8g.drawStr( 0, 0, "ASCII page 1");
for( y = 0; y < 6; y++ ) {
for( x = 0; x < 16; x++ ) {
s[0] = y*16 + x + 32;
u8g.drawStr(x*7, y*10+10, s);
void u8g_ascii_2() {
char s[2] = " ";
uint8_t x, y;
u8g.drawStr( 0, 0, "ASCII page 2");
for( y = 0; y < 6; y++ ) {
for( x = 0; x < 16; x++ ) {
s[0] = y*16 + x + 160;
u8g.drawStr(x*7, y*10+10, s);
void u8g_extra_page(uint8_t a)
if ( u8g.getMode() == U8G_MODE_HICOLOR || u8g.getMode() == U8G_MODE_R3G3B2) {
/* draw background (area is 128x128) */
u8g_uint_t r, g, b;
b = a << 5;
for( g = 0; g < 64; g++ )
for( r = 0; r < 64; r++ )
u8g.setRGB(r<<2, g<<2, b );
u8g.drawPixel(g, r);
u8g.drawStr( 66, 0, "Color Page");
else if ( u8g.getMode() == U8G_MODE_GRAY2BIT )
u8g.drawStr( 66, 0, "Gray Level");
u8g.drawBox(0, 4, 64, 32);
u8g.drawBox(70, 20, 4, 12);
u8g.drawBox(0+1*a, 4+1*a, 64-2*a, 32-2*a);
u8g.drawBox(74, 20, 4, 12);
u8g.drawBox(0+2*a, 4+2*a, 64-4*a, 32-4*a);
u8g.drawBox(78, 20, 4, 12);
u8g.drawStr( 0, 12, "setScale2x2");
u8g.drawStr( 0, 6+a, "setScale2x2");
uint8_t draw_state = 0;
void draw(void) {
switch(draw_state >> 3) {
case 0: u8g_box_frame(draw_state&7); break;
case 1: u8g_disc_circle(draw_state&7); break;
case 2: u8g_r_frame(draw_state&7); break;
case 3: u8g_string(draw_state&7); break;
case 4: u8g_line(draw_state&7); break;
case 5: u8g_triangle(draw_state&7); break;
case 6: u8g_ascii_1(); break;
case 7: u8g_ascii_2(); break;
case 8: u8g_extra_page(draw_state&7); break;
void setup(void) {
// flip screen, if required
pinMode(13, OUTPUT);
digitalWrite(13, HIGH);
void loop(void) {
do {
} while( u8g.nextPage() );
if ( draw_state >= 9*8 )
draw_state = 0;

Xflyboy1 (author)mickeypop2015-04-07

Ok I know it has been awhile since on here. I ran the code you gave through and it runs. Now why when I load the file as stated here in this I get nothing on the display for the graphics? It does not show the graphics for the reprap like it should.

mickeypop (author)Xflyboy12015-03-19

I used the "Discount Full Graphic
controller" when you compile the latest Marlin code you need a minor
edit and will also need the U8glib library version 1.17 to
support the LCD driver needed.

in the Marlin code folder, open configuration.h and starting at about line 600 you will need to find


for the 4x20 LCD and un-comment the line by removing the // at the beginning, this will enable the controller on compile.

for the "Discount Full Graphic controller" find and un-comment



ONLY un-comment 1 display according to your display type

then compile

mickeypop (author)mickeypop2015-03-20

UPDATE; in the current Marlin code download, at line 563,

#define DISPLAY_CHARSET_HD44780_JAPAN in enabled, for the reprap discount controller you need to also comment this out

Xflyboy1 (author)mickeypop2015-03-19

Ok, I was able to get the Full Graphic Smart controller up, but nothing is being displayed. i get the back light, and contrast but no words or showing anything else. Is there something i might have missed?

egambo (author)2015-04-07

I have access to aluminum and stainless steel for the bottom acrylic body part. Would there be any drawbacks to using metal instead of the acrylic for mounting everything?

NathanSellers (author)2015-04-04

I'm pretty impressed with your technological savvy. Very cool that you were able to build your own printer at such a low cost.

jpunzalan1 (author)2015-04-03

Thank you for this. This will be my first time building a 3D printer. I have ordered all the parts, just waiting now. I cant wait to get started.

Rexxy (author)2015-03-29

Is there anyway to make this without having a 3D printer to make some of the parts? I don't have access to a 3D printer or the money to get a part made from one :(

masterrex1000. (author)Rexxy2015-04-03

ask around on /r/3Dprinting there are people there who would be happy to print off parts for you.

About This Instructable




Bio: My name is Zach Sousa and I'm a Canadian highschool student that has a passion for making.
More by Zach Sousa:CNC Oak Watch BoxCNC Camera SD Card HolderEdge 3D 3.0 - A $200 3D Printer
Add instructable to: