Building a 3D printer from cheap components

Chris Sawczuk
7 min readJun 23, 2020

--

This is the first in hopefully a series of posts documenting my attempt to build my own Prusa i3 mk2 clone. This is not a guide on how to mimic this process, but I will link to items that I purchased.

These links will not be affiliate links.

Introduction

My name is Chris Sawczuk and I not very recently fell into the world of 3D printing.

My first 3D printer was the Creality CR-10S as will be the case for a lot of 3D printer owners. The CR-10 as a printer offers all the standard features people expect of printers these days and the CR-10S I purchased came with a bunch of the quality-of-life upgrades people had contributed.

However, the CR-10S wasn’t my first choice; with orange being my favourite colour, it made the Prusa i3 mk2 a slam dunk in terms of a feature rich printer, loved by the community that looked pretty cool on a desk.

The price difference between the CR-10S I purchased and a Prusa was too much of a big deal for me when I was in the market to purchase a printer so I did opt for the CR-10S in the end.

As time went on, I started upgrading my CR-10S. I compiled and flashed an updated Marlin firmware onto the printer; I changed all the fans to make it quieter; I installed a BL Touch; I installed stepper driver dampeners.

I found that I wasn’t afraid to get my hands dirty with the printer, and as a once-seasoned Gentoo Linux user (stage 1 all the way baby), I honestly believe that building something from scratch is the best way to understand and learn something.

That’s when I stumbled onto Tom Sanladerer’s Dolly project: A Prusa i3 mk2 clone YouTube series.

Tom’s channel has a bunch of great 3D printing videos with useful information, but when he mentioned building a cheap Prusa i3 mk2 clone, I decided to play along.

Understanding the necessary parts

A simple way to think of a 3D printer is as a list of integral parts:

  • A hot-end, the part that melts the plastic that has a nozzle attached to it
  • A print bed, the part that plastic is printed onto
  • An extruder, the part that pushes plastic into the hot-end
  • A couple of stepper motors
  • A frame
  • A control box, the brains of the operation

There is however a lot of things you can easily overlook, such as fasteners, belts, springs, bearings, the list goes on.

Fortunately, Tom’s website has a handy reference list of parts you need to make the printer.

Ace!

Unfortunately, one of the parts that is not so easy to purchase cheaply is a frame.

Not ace.

Tom is one of those people with a massive garage jam-packed with construction materials due to his life filled with DIY and success.

My garage is not as well stocked as Tom’s, so tripping over some MDF was out of the question.

It’s at this point that I mentioned off-handedly to one of my friends what my ambitions were and after sending a DXF of a Prusa frame, 24 hours later I was in possession of a sheet metal cut outs of the frame.

So before I even purchased any parts for my build-a-3D-printer project, I was in possession of what I imagined would be the most labour intensive part of the process. Neat!

Purchasing parts

After having been pushed into commitment to the project by my good friend, I decided to go through the list that Tom had made and start building up a shopping basket with Aliexpress.

Ordering from a site like Aliexpress means waiting multiple weeks to receive parts. This works out well for tracking success in the form of posts!

I decided however to focus on getting the brains of the operation, the Arduino Mega 2560 board and the Ramps 1.4 shield.

Arduino Mega 2560 with Ramps 1.4 board mounted

I ordered this from Bangood, it was the Geekcreit ramps 1.4 controller board + Mega 2560 R3.

It came quickly from an EU redistributor which was nice.

I also wanted to grab a set of stepper motors to power the X, Y and Z movement as well as the extruder.

5 NEMA17 12 volt stepper motors

These motors also came from Banggood, they came as a pack of 5. These were the single most expensive purchase of the build.

Another cheap component is the hot-end.

A relatively cheap hot-end from Banggood, complete with heatsink fan was this E3D V6 Clone.

To date, this is all the parts I currently have for my 3D printer. As more arrive I’ll post pictures and links.

Incremental delivery of a 3D printer

With just a Ramps board, a hot-end and a handful of motors, I actually already have enough to start testing the water with my custom printer.

I wouldn’t be able to do anything with the motors as I would only have USB power via the Arduino Mega 2560, but USB power should be enough to get a read on the thermistro built into the hot-end.

By grabbing the latest stable release of the popular Marlin Firmware and using the Arduino IDE it was possible for me to program the Arduino Mega 2560.

The RepRap Ramps 1.4.4 & Marlin 2.0 guide gave me a quick start on the boilerplate configuration.

Because I currently do not have a power supply to power the board, controlling motors will not be possible, so I could overlook any configuration around the motors and the end stop pins. I simply made sure the motherboard type was uncommented (which it was by default, woo!)

After plugging my Arduino Mega 2560 with it’s fancy Ramps 1.4 hat into my machine, I was able to click on compile and a few minutes later, the board was programmed!

I wasn’t sure what to expect, so I headed over to the serial monitor built into the Arduino IDE. To my dismay, I was greeted with garbage.

Unperturbed I decided to try something a little more specific to gauge whether my 3D printer was working; Pronterface, the 3D printer interface.

Pronterface, the 3d printer interface

Pronterface had the same opinion as me when it came to the output of my printer.

I did a quick Google for Marlin 2.0 Ramps baudrate and found out that the default baudrate was 250000.

After setting the correct baudrate and connecting to the printer, I was greeted with a more functional UI.

At this point, nothing was connected to the board. The temperature reading, bottom left, was showing -15.00 degrees C.

When I plugged in the thermistor wire from the hot-end into the Ramps T0 port, I saw that the temperature started reading!

Hot-end temperature reading output from Pronterface
Pretty accurate temperature reading!

To make sure the temperature reading was accurate, I held the hot-end in my greasy clammy hands for a few moments.

Bingo! The temperature rose. I’m no scientist, but that was conclusive enough for me.

Going further with testing

It’s actually possible for me to do a full test of the Arduino Mega 2560 and Ramps board currently.

Though I don’t have individually a power supply, a frame, a print bed, endstops etc, what I do have, is a CR-10S that has all these things, conveniently located inside a control box.

I’m tossing around the idea of gutting my CR-10S control box in order to get a head start on configuring the Arduino Mega 2560, but, I think I will hold off for now. If I had all the time in the world (and who doesn’t during this COVID-19 lockdown, but shush) I would go ahead and disconnect everything from the CR-10S and connect it to all the ports of the Ramps 1.4 board.

The effort required to do this, is more than I’m willing to put in right now, but it’s a cool thought to think actually I’ve got everything I need to get the software right!

What’s next?

Hopefully, with the arrival of a power supply and an LCD display, I should be able to test the capabilities of the cheap hot-end as well as the motors. The next post will be linked below when it’s made.

EDIT: 09/07/2020 — Part 2 is here!

--

--