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:

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:
- The motors
- Belts or leadscrews
- Guide rails
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:
- Thermistors for the hotend and the heatbed. There are different models with different curves
but as long as they cover the required temperature range any thermistor one knows is sufficient
- Endstops. One can go the mechanical route with microswitches or use inductive / capacitive
sensors. Since 3D printers at home are normally not operated in harsh environments one can
safely choose mechanical switches - and since they are not triggered that often (normally once per
print) they also do not wear out too fast. Inductive or capacitive endstops offer more robustness
but one should measure repeatability
- Bed leveling sensors. This is one of the parts where one should really go the inductive or
capacitive route. One of course also has to check for repeatability and could choose
mechanical alternatives (like having piezo sensors attached to the hotend / press the hotend
down with springs and use a microswitch) but the capacitive or inductive sensors are the
best choice for this application. One cannot simply measure conductive contact with the
printbed because of non conductive print bed material and residues of plastics on the nozzle.
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):
- Material and geometry:
- Using plastic (PLA, Nylon, PET-G and ABS) filament in form
of 1.75mm strings (Considering non-easily available material
like FEP later on).
- A cartesian geometry
- Using round rods as linear guides
- Building most parts out of Aluminium
- Drive train:
- Extruder and hotend:
- Electronics:
- Sensors:
- NTC 3950 thermistors for heatbed and hotend.
- Standard microswitches for axis endstops
- LJ12A3-4-Z/BY PNP NO inductive sensor as Z endstop
and leveling sensor
- Additional Components used:
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.

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.

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

Cooling
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.

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.

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:
- Rigidity is really important.
- One requires space where the sleds can move - outside oneās print volume. If one doesnāt account
for that during building one will have a much smaller build volume later on
- Do not use aluminium linear rails.
- Keep guide rails adjustable
- Trapezoidal screws are way better for movement control than timing belts.
- Keep trapezoidal nuts adjustable
- Use separate endstops when using separate stepper drivers for both sides of the Z axis. This allows
them to resynchronize.
- Do not choose stepper drivers with a too low current rating. The TMC2100 are nice and silent
but they have a really tight current rating for the selected setup. It works - but itās hard to
get working and limits speed. But of course - it doesnāt sound as loud as DRV8825.
- If possible use servos
- Definitely use a leveling sensor
- Do not forget that bed leveling does not correct bed tilt (except when you use the nozzleās contact
with the print surface for as a leveling sensor). Imagine how the height between the bed and the
sensor / nozzle change if you tilt the bed. You have to have a separate way of calibrating that
if you want to use an inductive sensor (or you have to keep the print surface rigidly attached
to the printer and calibrate that manually)
- Do not adjust your inductive sensor so it triggers when youāve reached zero height. In case of
plastics residue on the nozzle that may turn out to be a bad idea. Let the sensor trigger a few
millimeters above and enter the difference into your slicer. Turns out to be a way better idea.
- Add cooling. Always
- Think about a heated bed from the start. Iāve added mine later on and am unable to use the whole
surface.
- Use endstops on both sides of the axis.
- Add separate endstops when using separate motors on the Z axis.
- Add tilt correction to your software when using an inductive leveling sensor
- Do not think about using your computer permanently for controlling your printer. Add a separate machine
or something like an RaspberryPi. Prints take a while and you do not want to get timing errors
or crashes, hogged resources, etc. during that time
- Heat conductive paste is a great idea when attaching thermocouples. But beware to not use
electrically conductive paste (had that problem with graphene based paste - of course itās logical
when one thinks about that but if one doesnāt think that far one might get funny thermal readings
that even change during printing).
- Adding a filament runout sensor is a good idea
- You should really oil your bowden tube from time to time. Makes the difference between working and
non working printer
- Cheap leaking hotends are a problem. In the best case you have an all metal hotend that doesnāt
require a Teflon tube at the end. They are also easy cleanable (just put them into a oxygen rich
flame and burn away pastic residue)
This article is tagged: