Building a simple 3D printer (and what turned out to be not so simple)

14 Apr 2019 - tsp
Last update 07 Feb 2021
Reading time 20 mins

In this article I’m going to describe how I built my first own simple custom 3D printer a few years ago and what parts turned out to be not that simple - and what lessons had to be learned for the next machines.

Note that this article is currently under construction and will be extended - since it’s not a currently active project there is no time shedule for this.

Note that there has been a set of upgrades for the machine later on:

3D printer version 1 setup

Choosing the type of printer and material

Choice of material

The first step was to device what kind of 3D printer one want’s to build and which material one is going to support. First one has to device which material or class of material one want’s to print - of course as an entry level one chooses plastic filaments made out of PLA, Nylon, ABS or PET-G. They are readily available, cheap and are proofen to work for finite deposition modelling and PLA does not pose any chemical hazards either. It prints with relativly low temperature (between 180 and 220 degree celsius) and does not produce any hazardous fumes even if overheated. The simplest form of filament to handel is in form of a string with (at least somewhat) constant diameter. They’re available on spools weighting about 1 kg and having a string diameter of 1.75mm or 3mm.

Antoher easy route to take would be using a liquid photoresin but they’re much less readily available and the printers have a more complex design, require either a scanned laser or an HD projector with large UV output - or both if one want’s to have speed and acceptable resolution.

Choice of geometry

Building an 3D printer that will use strings of plastic to print leads to the next decision - the geometry. Currently there are two basic geometries that are often seen. First the cartesic printer, second delta printers. In cartesian printers one has got three perpendicular axis (normally termed X, Y and Z) in which the printer can move independently. This is the most common design but - as i’ve learned later on - has some drawbacks but it’s the simplest one to design. On the other hand there are delta printers which have (at least) 3 axis too but they’re not independent . They move in coupled non-perpendicular directions which are also constantly changing. Deltas normally provide lighter moving parts (which gives them less inertia) and because they normally use a fixed build platform they’re much better suited to print tall objects - they normally have a huge build volume compared with cartesian printers but there is also the drawback of them having to be much taller than their build volume - a little bit more than double the printable height is the absolute minimum.

Because of already available lienar bearings, rails and stepper motors I’ve decided to build a cartesian printer (even though I’m sure I’ll try to build a delta too later on).

The choice of material for structural parts

The next decision to take is from what part one want’s to build structural parts. There are many possibilities ranging from using aluminium or steel (you’re required to have at least some tooling to handle that), using plywood or even built it nearly entirely (except guiding rails and pulleys) from 3D printed parts. Because I had no 3D printer available the last idea was not an option to me - and because I prefer to work with metals instead of wood I’ve decided to build the entire machine out of aluminium. I’ve used 2.5mm thick aluminium sheet as a base plate, at the beginnin aluminium rods as the guide rails (that turned out to be a bad idea later on), Aluminium blocks to mount the rails and aluminium square-cut to built the remaining parts like motor mounts and the whole printing head (except the hotend). Metal has the advantage of being non-igniteable at the temperatures that will be used with 3D printing but it has also the drawback of being a good thermal conductor, having higher heat capacity and of course being more heavy than other alternatives. On the other hand it is unable to soften with the temperatures in use when printing plastics and it’s also stable if put into an heated chamber. Plywood would offer an good alternative if one already has that available - of course metals like Aluminium have a higher stiffness so they tend to bend less but that might not be an requirement anyways because of other sources of positional errors.

Choice of drive trains

The drive train mainly consists of:

Guide rails normally can be realized as round rods (cheapest and easiest to get; I first tried aluminium rods but that turned out to be a really bad idea when used with hardened steel balls of linear bearings), linear rails (expensive but easy to use) or lapped flat sliding guides (hardest to build when not having the right equipment and experience).

Motors that are useable for such an application can be mainly classified into servo motors and steppers. It’s undoubtful that servos are the better but way more expensive and more complex choice. Steppers on the other hand are the cheaper and somewhat simpler solution. The main difference is that steppers do not provide positional feedback whereas servos do. This means that servos can recover from situations where they’ve been too slow to react to a change (steppers would start to skip steps but the control system won’t notice that the targeted and real position are different) and they provide a way to sense the state of the system. One lession learned was: It would have been a better - but of course more expensive and complex - idea to use servos instead of steppers. But after some tuning steppers are really sufficient for a simple 3D printer.

Belts and leadscrews are two different ways of moving sleds. Belts are easy to use but one has to keep them under correct tension. Leadscrews offer different kind of (way better) resolution but their orientation towards the guide rails is critical. They have to be parallel (or capable of self orienting them in parallel). As soon as leadscrews are not parallel to the guide rails the elliptical motion leads to different distances per step during a whole rotation - which is known as z wobble in the 3D printing community. As I’ll be writing in the learned lessions section I’d always prefer trapezoidal leadscrews if possible.

Choice of sensors

A 3D printer requires some sensors:

Choice of electronics

Electronics choice is critical for success with the 3D printer but there is a pretty common standard configuration one can use if one wants to go the route using steppers, standard J hotends, etc. one can use many existing electronics components.

Starting from DRV8825 or TMC2100 stepper drivers (the latter one do not provide the same current range that the steppers can consume so one definetely requires separate drivers for left and right Z leadscrew stepper) over the RAMP 1.4 adapter board developed for RepRap as well as a standard Arduino Mega 2560 board for real time control logic. This is the easiest choice to make when building a first small printer. In case you have some additional requirements (using servo motors, wanting support for arc movement, different stepper drivers, etc.) of course one should simply build a custom board. In a future article I’m going to describe how one can build a whole 3D or mill control system built around an Microsemi IGLOO2 (Flash) FPGA, stepper drivers, some feedback sensing to build a servo circuit out of that and an additional microcontroller. The easier way is to simply use the existing hardware for a small scale project anways.

It’s always a good idea to decouple computer aided manufacturing hardware from your own PC so one may add a dedicated computer or an embedded SoC based computer like the Raspberry Pi to the system - this also adds network controlability.

Additionally one requires power supply for the computer (a 5V power supply in case of the Raspberry), 12V supply for the hotend and most steppers and if one uses a heatbed it’s a good idea to power that of 24V or 230V. If one uses an existing heatbed from the RepRap family one should go the 24V route. It’s also possible to wire these beds in a way to use double startup current. The bed should always be protected by an fuse against overcurrent. The same is true for the whole system

If one builds such an machine one has the choice of building it in an isolated enclosure or provide proper grounding. Since many people will use metal parts on the machine proper grounding is important.

Choice of software

If one takes the easy route of using an Arduino and RAMPS board for controle one can use the excelent Marlin firmware that has been originally developed for RepRap. I’ve personally made some modifications and have published them at my own GitHub repository. They mainly include the ability to switch more than one power supply when required (the heated bed) and provide a way of calibrating the slope of the bed by physical touch (via Piezo Sensors) so one can use the bedlevel sensor as desired. Why one needs additional calibration for that will be explained in a different article.

An additonal easy choice is using Octoprint on the control computer - in case of an RaspberryPi one can use the OctoPi image to get up and running fast. This has the additional advantage of providing remote control (via Ethernet) of the system and allowing easy integration into the slicer.

As a slicer I personally recommend Slic3r in it’s most current version. One could also take another route and use Ultimaker’s Cura or any other slicer that can output G-Code.

On the CAD side many people suggest the usage of Simplify3D which is definetely a good piece of software - but in my opinion it’s not necessary to use any of the commercial products. Depending on the approach you like one can use FreeCAD which provides an traditional interface like most CAD programs do and supports parametric models or a more extreme approach if one likes coding parametric models like OpenSCAD or in my opinion even better OpenJSCAD. Of course the approach of programming your models may not be suited for everyone - but it’s a nice way to provide easy combineable and parameterizeable models and in my opinion is worth the effort.

My choices

This lead me to the following choices (note: Amazon links are affilate links so the author makes profit if you buy through them, they may not reflect the cheapest choice nor the best distributor for such parts):

Building the frame and guide rails

The frame - as one can see - simply consists of a aluminium base plate, four blocks mounting the two 8mm aluminium guide rails for the X axis, two small square-cut aluminium parts providing the base for the 8mm aluminium Z guide rails and two square-cut parts providing the mounting for the X pulley and one small adapter that allows screwing the X axis stepper motor to the base plate.

3D printer version 1 setup

At first I just mounted the Z sled on two vertically mounted round rods. As it turned out that was a bad idea so I added some threaded rods to provide more rigidity. As it turned out using 5mm aluminium has been a little bit too thin for the baseplate as it tends to deform when tightening the threaded rods I’ve used to provide rigidity to the frame.

As it turned out using aluminium rods as linear guides was a bad idea. I’ve had to upgrade them from 8mm Aluminium to 8mm hardened steel rods - and change the now destroyed linear bearings (the steel balls of the linear bearings buried themselves into the aluminium and the aluminium debris was torn into the linear bearings - and destroyed them - which has only been discoverey because of periodic structures on the prints).

As one can see the whole moving parts have been built out of aluminium bars. This adds mass in contrast to a plastic solution but has turned out to be a really good idea in case of failures. Less plastic means less burnable parts.

The moving X axis has been realized also out of 5mm aluminium sheet and works out perfectly when mounted on four linear ball bearings. On top I’ve mounted the heated bed as an upgrade.It’s separated by two layers of 4mm cork to provide heat insulation.

Heated bed mounted

Another later addition have been Neoprene shock absorbers. These have been made out of 3mm Neoprene as well as plastic adapters (already 3d printed).

Neoprene shock absorvers


One really wants to have cooling on the hotend. The mount of the part as well as the hot end cooler has already been printed with the 3D printer itself. The hotend has been colled with the fan just being attached with cable ties to the hotend during that print. Works too but doesn’t look nice - and you cannot do bridges without part cooling anyways.

Wiring up

I’ve decided to permanently power the Raspberry Pi via the 5V power supply. This allows remote control of the whole machine - despite sounding gread for unattended operation of course I do not encourage unattended operation of such machines if you have not taken precautions against fire (more about how to do that later on). And you have to invent a solution (or Google about infinity beds) to remove your finished parts if you want series manufacturing anyways.

3D printer version 1 electronics setup

The other power supplies have been wired through an SSR module. The first idea of using mechanical relais has been turned out to be not a good idea (mainly because arcing during high inrush currents of these PSUs which just welded the contacts together). This allows control of both power supplies via Software (to control the second power supply independently I’ve had to patch Marlin and add an additional G-Code to allow turning on and off the heated bed PSU separately. The 12V power supply has been wired as described by the authors of Marlin. The firmware has also been extended to shutdown the second power supply in case of an emergency.

3D printer SSR module

I’ve decided to keep the heated bed detachable - one can see the 60A capable connector (be sure to not buy a cheap rip-off of them because these tend to catch fire). One has to keep a thermocouple connected to the printer control system allthough beause thermal runaway detection will prevent a printer to run in case of a detached sensor (which is a good thing - it prevents fire in case of a sensor malfunction whenever the heated bed is in use).

The power supplies are switched primary side so they do not consume power as long as the control system does not power them on. During that phase the Arduino is only connected to the RaspberryPi via the USB cable - do not try to flash the AVR while not providing 12V power supply. That won’t work relieable.

Lessions learned

One of the most important parts of this article:

This article is tagged:

Data protection policy

Dipl.-Ing. Thomas Spielauer, Wien (

This webpage is also available via TOR at http://rh6v563nt2dnxd5h2vhhqkudmyvjaevgiv77c62xflas52d5omtkxuid.onion/

Valid HTML 4.01 Strict Powered by FreeBSD IPv6 support