Building RepRap 3D printer · GeekSocket
My younger brother goes by the name
HemRobotics almost everywhere. I have been working with him on a 3D
printer build. We completed the first build of our RepRap machine
based on Prusa i3 printer. I will be talking about our experience and
learnings from this project.
Mục lục bài viết
Why did we build a 3D printer?
It’s a hacker’s
dream to have a 3D printer on their desk. I had seen 3D printers on
television when I was in school. I wanted to own a 3D printer since I
saw one in real life at the reserved-bit
hackerspace. My brother keeps building
different mechatronics projects. So, having a 3D printer was going to
help him build more complex, precise parts in less time for his
projects.
In the last couple of years, Creality (and probably other companies
too) brought affordable 3D printers to the market. These are available
from ₹12-15k on Amazon in India (prices keep fluctuating).
While the prices are comparatively less than other printers like Prusa
i3, it is still a significant amount of money for us. On top of it, we
had questions like, what if it does not work as expected, or keeps
failing? Because my brother’s friend has a printer, and he said that
only 1 out 3 prints are usually successful for him.
We watched a couple of YouTube videos about building a 3D printer,
most of them seemed pretty straightforward. That’s because they did
not talk about the efforts required for calibration of the printer,
more on this later. After estimating the total cost for building our
own printer multiple times, we decided to do it with an estimation of
₹10k to ₹12k.
My brother already had basic knowledge of using stepper motors and
electronics related things in general. We knew that building our own
printer will help us learn more. Even if it fails for some reason, we
will have freedom to make as many modifications as we want. It will
also make sure that the printer uses free software and open source
hardware. So, with a bit of hesitation, we decided to take up this
challenge of building our own 3D printer.
The type of the printer
We built a Fused Filament
Fabrication (FFF)
printer, also known as Fused Deposition Modeling (FDM). In an FFF
printer, the filament, which is plastic material in our case, is melt
with heat. This melted filament is deposited on a bed layer by layer,
and these layers get fused together to create a 3D object.
We decided to use the PLA material for printing, as it is easy to work
with. Unlike ABS, it does not require a heated chamber and can be used
even without a heated bed.
Polylactic acid (PLA) is a bio-degradable polymer that can be
produced from lactic acid, which can be fermented from crops such as
maize. […] PLA is harder than ABS, melts at a lower temperature
(around 180°C to 220°C), […] so is potentially a very useful material.
— PLA – RepRap wiki
The design and components of the printer
Our printer’s design is based on the RepRap printer Prusa
i3. Typically, this type of printer
has a glass/metal bed which moves along the Y axis, and the printer
head moves along the X and Z axis.
Let’s briefly take a look at various components the printer usually
has (this is a high level list of components).
Y axis assembly
The Y axis assembly consist of a bed which rests on two smooth steel
rods with the help of liner motion
bearings. A belt loop is
attached to this bed’s base. This belt is driven by a stepper motor on
one side and an idler pulley on the other side.
X axis assembly
The X axis holds the printer head. Similar to Y axis, this assembly
also uses liner bearings, smooth rods, stepper motor and a pulley.
Z axis assembly
The Z axis consist of two stepper motors which have a threaded rod
attached to each of them. These stepper motors drive the whole X axis
assembly up and down along the Z axis. There are smooth rods and liner
bearings to guide this motion.
Printer head and extruder
The printer head usually consists of a hot end. This hot end has a
nozzle from where the melted filament comes out. It also has a
temperature sensor (thermistor),
so that the controller can know the current temperature. Based on
that, it turns the heater on and off to maintain certain temperature.
The extruder assembly has a stepper motor and a few gears. It pulls
the filament from the spool
and feeds that into the hot end.
Our printer uses the Bowden system where the hot end and extruder
assemblies are separate, and are connected with a PTFE tube. Read
more about it: Bowden vs Direct Drive | Comparing 3d printer
configurations.
Controller and power supply
The controller board has all the electronics required to drive the
printer. This includes driving stepper motors, hot end, heating bed
etc. This controller is flashed with a firmware for the printer
(software part of the printer).
And power supply, as the name suggests, powers all these components we
have seen so far.
Now with the basic components covered, let’s take a look at how we
proceeded step by step.
Design and estimation
Initially, I was not sure if we need to design everything in a CAD
software. I
thought that just taking dimensions and cutting aluminum angle should
be enough to build the frame. This is how the YouTube videos I had
watched showed it.
But my brother said that it won’t work out well, and we might end up
with wrong dimensions for other parts. For example, even if we build
the frame somehow, we will still have other parts to build, these are
X axis assembly, Y axis bed, and more. All these parts have dependency
on the frame, and they need to have correct dimensions too. So, it is
better to design everything from ground-up. That way we know the
precise dimensions for all the parts which we will design one after
the other.
I always insist my brother to use free software tools. In other
words, I push him to try and make things work using free software.
Despite that it was his first time using a CAD software, he was able
to learn the basics and design all the required components in
FreeCAD.
This involved designing multiple parts and arranging them together to
understand how those will fit in together. The following image shows
the assembled frame.
I’m working on pushing all the FreeCAD files to the GitHub repository
hemrobotics/reprap-printer.
Most of the parts we bought were of the length 12 ft (~3660 mm), so we
thought of building a printer which is 600×600 mm in dimension. This
is a relatively large size compared to usual desktop printers, which
are 300 mm to 400 mm in length.
Collecting all the parts
While we were designing things, we also started collecting the various
parts. These were the ones which we knew that we will anyways going to
need. And a few we bought later once we were done with the designing.
We had fun roaming around the city and finding different shops for the
parts mentioned below. Now, we know which hardware is available in
which part of the city, along with the exact shops 🙂
List of the parts used (click to expand)
Item
Quantity
Source
M8 threaded rods
12 ft
local shop
Aluminum L angle
12 ft
local shop
Liner ball bearings
12
Amazon
Nema 17 stepper motors
5
Amazon
8 mm steel rod
1.47 Kg, 12 ft
local shop
Flexible motor coupling
2
Amazon
GT2 Timing belts and pulleys
2 pulleys, 4 m belt
Amazon, Robu.in
Bowden v6 hot end
1
Robu.in
MK8 extruder
1
Robu.in
0.4 mm nozzle
1
Robu.in
Arduino Mega 2560
1
Robu.in
J-head fitting
2
Robu.in
PTFE teflon tubing
1 m
Robu.in
A4988 stepper motor driver
5
Robu.in
Limit switches
4
Robu.in
RAMPS 1.4 controller board
1
Amazon
We found the 8 mm steel rod in a shop which had material related to
railings. We were not sure if it will work out well, if it’s hardened,
chrome plated etc. It turned out that it was not well-made, not
uniform. This caused us some trouble while fitting it in the liner
bearings. We had to find a correct orientation where the bearings were
freely moving on the rods. Later we observed some scratches on the
rods because of bearings. So, it is better to go with some rods from
Amazon or Robu.in based on the reviews.
If your budget allows, go for
DRV8825 stepper motor
driver instead of A4958. As DRV8825 has more features, it can handle
more current, supports 1/32 micro-stepping etc. More details: A4988
vs DRV8825 Chinese Stepper Driver
Boards.
Apart from the above list, we bought wires, pins, nut bolts, washers,
zip ties, few bearings, plywood sheets, wooden blocks, all this from
local shops.
Where we did the cost-cutting?
Here are a couple of things in which we saved some cost. Most of this
just boils down to reusing parts/things from scrap.
- Power supply
Instead of buying a new power supply, we decided to use a computer
PSU, which we already had. - Heat bed
As we had decided to print PLA only, we did not buy a heat bed. We
used glue stick on the glass bed for securing the print on the bed
(adhesion). - Printing from the host
I had an extra laptop, on which we installed the host software. We
were able to skip the LCD
controller
for the time being. - Rod holders
We had a bunch of tower bolt holders lying around, we just used
those as rod holders. - Glass bed
The glass we used was taken out from an CRT monitor
filter.
How everything came together
We started by building the frame first. This involved cutting the
angles and wooden blocks, drilling holes, making sure that all the
parts are in right angle, and more.
In case of our own designed parts, we first printed the design on
paper with 100% scale. Then glued it on plywood sheet or aluminum
angle, so that it can be cut correctly.
After that, we connected all the electronics parts by following the
wiring section of the RAMPS 1.4 page on RepRap
wiki.
This whole assembly was fairly easy and took less time than we
anticipated. It took around a month, and we were working on this
mostly on weekends.
Firmware configuration
The Marlin
firmware, which
is flashed on to the Arduino Mega, has many configuration
parameters. These need to be tweaked according to your printer, bed
dimensions is one such example.
We followed the video [2016 version] How to set up the Marlin
firmware!, and did a few
basic changes related to maximum bed and hot end temperatures. We
found that the thermocouple in our hot end is 100kOhm NTC thermistor
(104GT-2)
(5). Then
we used the RepRap
calculator to set
correct steps/mm parameters.
When we tried to flash the firmware with Arduino IDE on Fedora, we got
"Parameter 'tools' in mandatory"
error. The Solution was to create a
directory with sudo mkdir /usr/share/arduino/tools-builder
. You can
read more about this
here.
After flashing the firmware and connecting Arduino in Pronterface, we
started getting Printer halted kill called()
on the console. This
happens when the hot end thermocouple is not connected. Marlin’s
thermal protection feature kicks in and stops the printer. GitHub
issue related
to this.
We also had to make changes for the X axis motor being on the right
side, using two separate motor drivers for Z
axis
(E1 as Z2), and many more. You can find all these modifications in
this GitHub
repository.
Fan setup
Our plan was to use a CPU fan from a laptop for part cooling. The part
cooling fan makes sure that the printed layers get solidified
immediately. As it was a three pin fan, our assumption was that the
third pin is a PWM. We tried to use the servo port of RAMPS for
running this fan. But it did not work, there was no difference in
the way the fan was spinning.
It turned out that the third pin on the 3 pin CPU fans is for reading
the RPM of the fan. It is called as sense or tachometric
signal. Basically, this pin can be kept disconnected. Refer to
Motherboard (CPU) 3 Pin Fan Connector ·
AllPinouts
and Adding fan to RAMPS 1.4 and
Marlin
for more details.
This was a 5v fan, so we used
LM7805 to
step down the 12v from RAMPS to 5v. The fan speed was not very high,
but it served the purpose, and the LM7805 did not dissipate much heat
either.
Marlin configuration for the fans
After some trials with our so called PWM fan, we decided to go with
BOARD_RAMPS_14_EFF
(Extruder Fan Fan) instead of EFB
(Extruder Fan
Bed). In this setup, the RAMPS_D9_PIN
is used as FAN_PIN
(part
cooling fan). And the RAMPS_D8_PIN
is used as FAN1_PIN
(extruder /
hot end fan). The hot end fan works only when we set the correct auto
fan pin. It turns on the fan when the temperature of the hot end
increases above a certain value.
Take a look at the following links for more information:
The first print
Our first print was part of the initial calibration which we did. We
followed the Calibration and
Triffid Hunter’s Calibration
Guide
pages from RepRap wiki. Some sections like finding steps/mm from these
guides are already covered by the RepRap Calculator.
A 3D model is usually exported as an STL file format. Then a
slicing software is used to convert
this 3D model to G-codes suitable
for a specific printer. We are using Slic3r in
our case.
This *.gcode
file is sent to the printer using host software,
Pronterface in our case. The printer
performs various actions like moving to certain coordinates by
interpreting the G-codes.
Your browser does not support the video tag, please download the video instead.
It was fascinating to see the printer in action for the first
time. That was just the beginning, the continuous calibration and
tweaking efforts start from here now 🚀.
Other issues and tweaking
After printing the Bed Leveling Calibration test
object, we did a couple of
prints of XYZ 20mm Calibration
Cube and 5mm Calibration
Cube Steps. While doing that
we faced multiple issues, prints failed for different reasons. All of
this was frustrating. None of the YouTube videos I saw mentioned the
struggle, they just showed how their printer magically started
printing high quality calibration cube out of the box. Enough of
ranting about the videos, following are the issues we faced, along
with their solutions and learnings.
Nozzle getting clogged
The default nozzle on our Bowden v6 was of 0.2 mm width, and it was
getting clogged frequently. It’s possible that it was happening due to
our mistakes, but generally 0.2 mm nozzles are hard to work with.
We tried to push the filament while the nozzle was clogged due to glue
or extra filament around the tip. Because of this extra pressure, the
filament got stuck in the gap in hot end’s heat sink. This area is
usually not as hot as the nozzle. The filament was soft when we tried
to push it, and it got clogged in the heat sink area itself.
We already had a 0.4 mm nozzle, so we decided to use it. We had to
apply a good amount of force to disassemble the hot end for changing
the nozzle.
Lesson learned: Never push the filament manually or via the host
if the extruder motor is skipping steps.
Nozzle getting clogged due to dust
The filament had caught some dust on it, this resulted in a clogged
nozzle. We used a piece of steel wire from break cable to clean it.
To prevent this, we added a piece of sponge near the extruder input to
make sure the filament is clean (filament
filter).
Tilted glass when doing bed leveling
While doing the bed leveling, we observed that the glass was getting
tilted on the one side. It was fixed on one side of the bed with
binder clips. This was happening because of a bump in the middle of
the plywood sheet. The sheet was bent when we tightened the bed
leveling screws. We used double-sided tape and fixed the glass in the
middle of the bed.
The glass came up after some time while printing. So, we drilled extra
holes on the base plywood and used nut-bolts to secure the glass in
the middle of the bed. This also resulted in less amount of bending of
the plywood.
Shifted layers
When the printer was moving rapidly during non extruding moves, a good
amount of steps were getting skipped. When the motors miss steps,
layers of the print are shifted. This was happening for Y axis most of
the time, as the bed is relatively heavy.
Adjusting the acceleration
One of the solutions was to decrease the feedrate, max acceleration
and the default acceleration values for all types of
moves. Configuration
changes.
Misalignment of pulley and idler
After fixing the acceleration related settings, we noticed that X and
Y axis were still missing steps intermittently. The idler sides of
both the axis had some extra friction. This was because the pulley and
idler bearings were not aligned correctly.
Adjusting the motor driver current
We had kept the ampere potentiometer of motor drivers to less current
setting. We thought that the motors should remain cool. But the
working temperature of NEMA 17 motor is pretty high, so it is okay to
have heated motors.
Videos and photos
Here are more photos and videos of the prints and the printer.
Your browser does not support the video tag, please download the video instead.
Your browser does not support the video tag, please download the video instead.
Conclusion
Building a 3D printer is definitely a challenging project. At times,
we had the machine in front of us, failing for some reason. We had to
take a pause, read up more about a specific thing, make changes to the
system by understanding the consequences. A small mistake can result
in hardware damage like fried boards or components.
Building this project was a great accomplishment for both of
us. Despite frequent lockdowns in the city, we managed to make
consistent progress. The final cost of this first iterations is around
₹9k. If you are planning to build a 3D printer, go for it. Even if you
don’t know much, you will learn many things along the way. If you
decide to settle with buying a printer, you might still have to
calibrate the machine, like we did before using it.
Credits
All this was possible because of the people who decided to keep their
hardware design and software freely available. The RepRap
project, Prusa
Research,
E3D are only a few names out of
many, who chose free software and open source hardware. The parts are
available in affordable prices, as anyone can manufacture them by
using the freely available designs and specifications. And of course,
thanks to all the YouTubers who have put efforts in making tutorials
related to 3D printers. Installing all the required tools was just one
dnf install
command, thanks to the Fedora 3D Printing
SIG.
One of my friends Kuldeep
Gaikwad who is a structural
engineer, has been a great help in making a strong frame design.
What’s next?
Although this first revision of the printer works well, it has a lot
of nut bolts. These heavy parts might not last longer, they can start
loosing up. Also, we saw some weird waves/lines on the prints. We were
not able to find the root cause, we suspect that those are because of
unstable bed or slightly misaligned nozzle tip.
As soon as we got the printer working, we started printing parts for
the printer itself. In other words, we built a self-replicating
machine.
At the time of writing this post, we have already started building the
second revision of the printer. It has the following changes:
- It uses 3D printed parts.
- It has a smaller frame.
- It has a better part cooling fan.
- It will have an improved Y axis, and a bed with auto bed leveling.
- We will be doing a lot more calibration.
Update on 20th March, 2022: Read about the second revision in RepRap
3D printer revision
2.