GeekSocket Plug in and be Geekified

Building RepRap 3D printer

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.

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

Assembled frame in FreeCAD

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 600x600 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 bolt2 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 fan3. 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.

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.

Replacing the nozzle of Bowden v6

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.

Multiple prints showing shifted layers

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.

The printer at its dedicated location

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.

References


  1. The FFF term was coined by RepRap project members as FDM is a trademark of Stratasys Inc (source). More details: FFF vs FDM: Difference and Best Printers↩︎

  2. The latch on the edge of doors is called tower bolt, it took me 20 minutes of Internet search to figure that out. This is how it looks↩︎

  3. Using the servo ports on RAMPS for PWM fan
    It is possible to use RAMPS servo pins for PWM fans. Re-define the FAN_PIN or FAN1_PIN as servo pin, and enable FAN_SOFT_PWM.

    #define FAN_PIN SERVO0_PIN
    #define FAN_SOFT_PWM
    

    You need to add a jumper between 5v and VCC pins (it is on the left side of the reset switch). The fan can be tested with M106 G-code from Proterface.

     ↩︎

Comments

Comments are not enabled on this site. The old comments might still be displayed. You can reply on one of the platforms listed in ‘Posted on’ list, or email me.