“McGyver” DIY 3D printer project


The birth of the project

Some months ago, I decided to try my skills with building my own 3D printer. How hard can it be?

No, really, how hard can it be? In fact, 3D printers are one of the best documented projects on the internet. There are full instructions, open source hardware and software and a huge community. It sounds scary but there is more than enough support to be found for everyone, from beginner to expert.

Too easy, mate!

You can buy every single part of a 3d printer and simply assemble it. You can buy them all as a kit, or you can spend a day on ebay or amazon and source them from various vendors, but it is really the same.

So I chose a different path.

There are projects around the internet that describe building a 3d printer from salvaged scanner and printer parts. I decided to try doing that and, if that worked well enough that I can use it to 3D print any parts (at whatever level of accuracy and quality) of the “next” printer, then I would call it a success.

Starting from zero knowledge

Having used a CNC router, I had basic knowledge of how a 3D printer works but visiting reprap.org was an overwhelming experience: There are hundreds of different open source blueprints to follow and there is really no place to start figuring out what you will need. There is so much material that it’s actually confusing and it might discourage you at first.

Before deciding what project I would base my printer on, I used my experience with various machines and built a table that moves on the Z axis based on two screws. I CNCed 3 cogs and locked the two screws. 1


Next thing I did was find my old AGFA 1212U scanner. After disassembling the scanner I found that I could use it for the Y axis of movement by building a gantry and securing it on the scanner head.


I CNCed some more parts for the gantry bridge. Now I would need to actually start sourcing the electronics.

Prusa, Ramps, Marlin, J-head…

After sourcing numerous old printers and scanners from friends I was finally in possession of more than 4 stepper motors (the minimum amount I would need).

After researching reprap.org, I concluded that the project that mostly resembled what I was trying to make was some sort of Prusa derivative. I have XYZ axes so I was looking for a Cartesian configuration which is the most common one. There are also Delta and Polar configurations but I would not suggest one of those for a beginner.

Most Cartesian printers have the Z axis moving the gantry up and down and Y moving the table. In this regard my printer mostly resembles an Ultimaker as I move the table up and down and the gantry on the Y axis. However, it was obvious to me that for the electronics and the software there was no difference at all. So I went ahead.

I did a search on e-bay and the results were surprisingly enlightening: The electronics are mostly sold as sets containing more or less everything you will need: The Arduino Mega 2560 board, the Ramps 1.4 board, 5 Pololu motor drivers and I would suggest getting a set that includes the LCD screen.

The Arduino Mega 2560 is the heart of the project.


You need the 2560 model and not a smaller one because it plugs directly to the Ramps board.

The Ramps 1.4 board is an open source board that converts the Arduino pins into a configuration that you can plug the motor drivers in.


There are 5 sockets for Pololu stepper motor drivers and you will use 4 of them if you make a single extruder printer.


The LCD screen that was included in my order contains an SD card reader that makes the Printer completely independent from a PC should the situation in your space require such a setup.


I also ordered a 1.75mm J-Head hot-end part. This should contain the hotend complete with a thermistor, a small fan for the tip of the head and some tube for the filament.


The filament that I was going to use was PLA. It is a biodegradable thermoplastic with very good characteristics and very easy to use for beginners. It is also not so prone to warping so you won’t need a heated bed (more on that later).

Hooking up the electronics

After the Arduino arrived I started hooking up the electronics. So far I had only the salvaged steppers to use. These were of various makes and with extra gearing. As they also came with their metal rods and their belts I decided to use them for the first iteration of the printer. That meant I would need to do some calculations for the steps per mm.

There go the 5 volts 😦

I salvaged a PC power supply to power the Arduino and Ramps boards. It needs both 5 volts for the electronics and 12 volts for the heating elements and the motors.

However, disaster struck as a momentary lapse of concentration on my part resulted in connecting an end-stop to the wrong pins. An easy mistake to make as I found out from a quick search on the internet. The usual result is a fried 5v regulator on the Arduino.

But luckily…

Although the 5v input on the Arduino was no longer working, the Arduino is quite happy with the 5v off of the USB input!

Software and firmware

In order for the Arduino/Ramps to work as the brains of the printer, you need to load it with the proper firmware. The firmware I decided to use is Marlin. You open the Marlin project in the Arduino SDK and then you need to manually edit values to configure it. The speed of the motors, the number of extruders, the type of endstops etc are all configured in the Marlin project. When using an LCD screen you would probably need to add some extra library from the internet to the project. When you make your edits you compile the project and upload it to the Arduino. You will do this again and again fixing errors and refining values.

The extruder incident

The extruder is the part of the printer that pushes filament to the hotend. I was going to use a Bowden type extruder, which is a motor mounted on a non moving part of the printer (and not on the moving head) and pushes filament into a tube.


The extruder assembly that I ordered never arrived so I tried to construct an extruder assembly by myself. As I found out the hard way, it is really not worth the effort. I reordered an extruder plus a proper Nema17 stepper motor, as I realized that the small salvaged steppers would never have enough power to push the filament into the tube.

When setting up and tuning the speed of the extruder motor, keep in mind that the motors WILL NOT MOVE unless you preheat the hotend! It can drive you crazy but there is a failsafe that will not let you push filament into a cold hotend and risk havoc! You may think that there is something wrong with your board or your stepper drivers, so, please, check if the temp on the head is proper.

Flat steppers vs Nema17

The salvaged steppers I got from the scanners had reduction gears and were really quiet. However, they were really finicky with voltage and they needed very fine tuning of the potentiometers on the Pololu drivers.

Unfortunately, after initial success with the flat steppers I started having layer shifting in my prints. After more fine tuning the shifting on the X axis disappeared completely and I only had occasional shifting on the Y axis.

I decided to swap the flat stepper with a proper industry standard Nema 17 stepper motor and the shifting in the Y axis disappeared completely.

My victory was short-lived as I now started having layer shifting on the X axis. It appears that the small motors are so sensitive to voltage fluctuations that mixing them with larger motors would never work.

So I swapped the last salvaged motor to a proper Nema17 one. Now everything seems to work ok and the accuracy is evidently better while I can print with much faster speeds.


On the left the first try of the #3Dbenchy model. On the right, after all motors were swapped.


SD versus USB

There is no consensus in the community on the SD vs USB debate. If you don’t have an LCD with an SD card then you are stuck with printing from the PC and if you can’t have a PC next to the printer, the SD card is maybe your best solution. However if you have both there are some thing to consider. The LCD+SD unit is connected to the Ramps board with 2 ribbon cables. I have twice witnessed my printer going crazy (and potentially self-destroying) while printing off an SD card. The most probable cause is that I placed the LCD unit with the ribbons too close to motor resulting in data corruption. Maybe this is something that you will find unacceptable or maybe it will never happen to you. Still, I am not comfortable with plugging and unplugging the card dozens of times every day.

On the other hand many people are not comfortable with PC that can randomly crash or reboot for updates. These are real concerns but I not enough for me to avoid the PC solution.

In fact I decided to make the most of it!

Netbook to the rescue

I have an old netbook that I regret every time I start it up. The battery is also completely dead now. It is however upgraded to the latest Win10 version so there’s that.

What I decided to do is use the netbook as a completely remote solution.

First, I downloaded the Arduino SDK from the Win10 store (yes you can find it there!) and moved the Arduino project to the netbook. This way, should there need to be any more fiddling with the Marlin firmware I will not need another PC, or to move the printer.

Then I downloaded Pronterface. This is an application that can control the printer, feed it with G-code files and give you some visual representation of what the current layer looks like.

I shared a folder on the network where I send the g-code files that I slice on my main PC (using CURA for the slicing).

I also installed TeamViewer and set it up to work locally.

Finally I installed the “IPCAM Lite” app from the Win10 store. IPCam Lite is an app that takes your laptop camera video and broadcasts it on the local network as an IP cam would do. This way I can use the IP cam viewer of my choice to have video of the printer on any device in my LAN, mobiles, tablets, PC etc.


And that’s about it. There are numerous improvements I want to make on the printer but as it is, I can trust it to print any object and work for hours without a hiccup without me having to be in the same room.