I started working with 3D printing in 2013, initially to make my wife's wedding band and then to make other jewelry and mathematical art. (Check it out here!) I started by using a 3D printing service (Shapeways) to make all my designs, but by the end of the year I wanted my own printer at home to make things. After pondering my options for a while, I decided to go the route of making my own from scratch. (MakerBots are expensive! And other hobbyist-oriented FDM printers didn't seem all that impressive.) I was inspired by the various designs produced by the RepRap community, and in fact they have a name for the kind of printer I made: a RepStrap. The name comes from the pull-yourself-up-by-your-bootstraps nature of the process, where a hobbyist like me creates a rudimentary 3D printer using whatever skills and materials he or she has available. Then that printer is used to print the parts of a better one, perhaps one of the standard RepRap designs.
I have continued to go in my own direction after building this printer, but I think it might be helpful to some if I document, in particular, the first versions of the first printer I made. For tools I had only hand tools, a battery-powered drill, and a bench vise; for materials I used as much as possible what I could get at the local hardware store plus components (motors, bearings, switches, springs) that I had collected over the years from old printers and other pieces of electronics. This does make for an odd mix of inch and metric parts. I didn't make absolutely everything from scratch: I did buy the extruder, heatbed PCB, and RAMPS board and stepper drivers, as well as pulleys, belts, and smooth rods pre-cut to length. These components are increasingly commonly available from online stores catering to hobbyists like me.
If all you want is a working printer, I don't think going this route is a good choice -- the value of the time you'll end up spending is probably much greater than the price of a RepRap kit or possibly even a MakerBot. But I found this process to be a fascinating exercise in how to make something precise out of crude components and methods, and I learned a whole lot about FDM 3D printers!
I am splitting my documentation up into separate articles that correspond to versions of my printer(s). The divisions are somewhat arbitrary, but I had to break things up somehow or this would turn into a monster-sized article. This first article covers what I'm calling version 1.0: the initial build of my RepStrap plus fixes and tweaks needed to get it working. Later articles cover improvements to this original RepStrap as well as later printers.
Anyway, on with the show!
Base, build platform, and y axis
I took inspiration for the overall design of my RepStrap from the Prusa i3, and I started with a set of smooth rods pre-cut to the proper lengths for a Prusa from MakeMendel. I should mention that I generally didn't plan ahead more than one or two steps; it was very much a seat-of-the-pants build. This set of smooth rods set the overall size of the structure, and then I just built each axis bit by bit while leaving as much room as I could for the later pieces of the puzzle.
I cut a base plate from thin plywood (about ¼ inch thick) with width equal to the length of the x-axis rods and depth just a little larger than the length of the y-axis rods. To mount the y-axis rods I cut two pieces of furring strip (cheap wooden boards, roughly 5/8 x 2-3/8 inches in cross-section) and match-drilled holes the same diameter as the rods, then screwed the furring strips to the baseplate from underneath. (Lessons learned: furring strips aren't cut square on all four sides! Look for the side that's square, or least-crooked, and make sure it is the bottom side. Also, even though I match-drilled the holes for the rods, they didn't end up perfectly parallel, which makes the platform want to jam. Be prepared to widen one of the holes to allow a rod a little horizontal play.)
I cut a build platform out of plywood just a little larger than the standard heatbed PCB, about 8.5 x 8.5 inches.
I used brass bushings on the smooth rods for linear motion on all three axes. It looks like linear bearings are used more often in the RepRap community, I assume because they are more forgiving of misalignment and torque. But linear bearings are more expensive than bushings (especially for this build, because I already had the bushings) and larger. As I refine my printer designs I'm trying to make them as compact as I can, so I decided to figure out how to work with bushings from the beginning. To hold the bushings I needed to make bearing (or bushing) blocks -- blocks of wood or some other material that hold the bushings securely. I first tried to make bearing blocks out of four small pieces of furring strip. This was not successful. There was enough flexibility in the assembly that the blocks would rotate slightly around the x axis and cause the bushings to jam. (Lesson learned: bushings are very sensitive to misalignment and will jam.)
Bearing blocks: My second attempt at mounting the build platform to the rods worked much better, and I used this approach on the other axes as well. I started with four-inch lengths of a 2 x 2 inch board and drilled through the length of the block. This first hole was just large enough to fit the smooth rod. Then I drilled counterbores in both ends to fit the bushings. I tried to use a drill size one size smaller than the diameter of the bushing, and kept the drill more-or-less centered on the original hole. Then I drilled out the remainder of the hole a bit larger to give some clearance around the rod. After all the drilling, I either pressed the bushings in or lightly tapped them in with a hammer. Then I inserted the rod into one bushing at a time and most of the way through the block and wiggled it back and forth a little bit to get the bushings aligned with each other.
It might not be obvious in the photo, but I failed to drill exactly squarely through each block, so the build platform is twisted. That's why I used only one screw to attach the platform to one of the bearing blocks; I didn't want to torque the platform too much (which also would put more force on the bushings and make them more likely to jam).
To attach the y-axis motor, I made a bracket from aluminum angle to mount it to the baseplate at the front. I had to cut a notch out of the middle of the furring strip to let the belt through. This proved to be a bit wobbly due to the flexibility of the baseplate, but it worked well enough to get started.
At the rear, I made a pulley for the y-axis belt out of a ball bearing on a bolt, and I bent a couple of 90-degree brackets to hold it in place above and behind the furring strip. I cut another notch in the strip to let the belt go through. I had to put the pulley so far back because the build platform, when it slides backwards, will pass over this rear mount. At this time I didn't know exactly how I would attach the y-axis belt to the build platform, so I put the pulley as far back as I could to give myself as much room to work with as possible.
One end of the belt was anchored to a spring on the build platform, while I fashioned a hook for the other end which went around the head of a screw mounted to the baseplate near the front. I adjusted the length of the belt so that the spring would be under some tension when everything was connected. The point of the spring is that I wasn't able to get all the mounting points and pulleys for the belt perfectly aligned, so the total length of the belt's path would change as the platform moved forward and backward. The spring ensured that the belt would remain under tension, but not too much, as that occured. The hook for the other end of the belt was right at the front of the build platform so that I could reach under and fasten it after everything else was in place.
For all of the belts in this printer, I initially secured the ends by just folding the belt over on itself so that its teeth interlocked and then wrapping tape around the doubled-over part of the belt. This worked for a while, although the tape eventually loosened and the belt teeth skipped over each other. Replacing the tape with a small zip-tie proved to be a permanent solution. With a few execptions, any small drive components that I needed to buy I bought from SDP/SI. The belts are GT2 with 2 mm pitch, 6 mm width, and the pulleys match.
I built a U-shaped frame that sat over the build platform to hold the extruder and x and z axes. The frame is made of plywood with 1 x 3 inch boards reinforcement.
On both left and right sides I mounted a smooth rod to guide the z axis and a threaded rod to drive z axis motion. Each threaded rod is located 35 mm in from the edge and 29 mm in front of the frame, and each smooth rod is mounted 25 mm out from the threaded rod. The threaded rod has standard ¼-20 thread. The rods on either side are supported by top and bottom mounts made from small pieces of 1 x 3 board. The bottom mounts were secured by screwing from behind through the plywood of the frame, and the top mounts were secured using steel strap screwed into the top of each mount and into the top of the frame reinforcement. The threaded rods poke out through the top of the top mounts through a hole in the steel strap, so I added a bushing to each top mount to keep the rod from wobbling and hitting the strap.
z axis drive, first attempt: The locations of the threaded rods were driven by the size of the stepper motors I attached to the bottom mounts to turn the rods. This is more-or-less the same arrangement as in the Prusa i3, where each z-axis threaded rod has its own stepper motor driving it located at the bottom of each rod. It didn't work out for me, though. The friction of the nut turning on the threaded rod is relatively high, and the stepper motors had rather thin shafts, which made the connection between the stepper motor and threaded rod difficult. I turned down the end of the threaded rods to match the diameter of the stepper motor shafts by putting the threaded rod in the chuck of the drill and spinning it while applying a file to the other end. I used a ¼ inch bushing held in the vice to support the far end of the rod. I tried connecting the threaded rods to their stepper motors by wrapping tape around their shafts, but after a short while the tape started slipping. I also tried using pieces of rubber tubing, but they slipped even more. The tubing might have worked if I could have used pipe clamps to put extra squeeze on the tubing, but there wasn't room for that in my design. So the combination of high torque and small-diameter shaft made this arrangement not work for me.
z axis drive, second attempt: I made this fix a bit later, but it makes sense to describe it now: Instead of driving each rod with its own motor, I decided to use a belt drive with a single motor to turn both rods together. Since I didn't need to save space for motors at the bottom of the rods any more, I just cut the bottom of the vertical frame off flush with the lower z axis mounts, making the whole machine about 1-½ inches shorter. To support the weight of the x-axis assembly, I put a nylon locknut and a thrust bearing at the top of each threaded rod. Above that I filed a flat side into each threaded rod and added a pulley. I mounted a single stepper motor at the top of the frame with another bracket made from aluminum angle, put a pulley on its drive shaft, and ran a belt around both threaded rods and the stepper motor. I added an idler pulley to take up slack in the belt and to make sure the belt wrapped far enough around the motor's pulley that it would engage the belt properly. The idler is just a pulley on a short piece of 4mm smooth rod with a couple of bushings between the two. I drilled a hole in the top of the frame and pressed the rod into it, and I think I just got lucky that that hole was straight and in just the right place to make the belt tight. (I was prepared to adjust the motor's bracket to properly tension the belt, if needed.)
I put a bearing block made from 2 x 2 board on each z-axis smooth rod (see the y axis section above for details about the bearing blocks). I drilled the hole through each block as close to one side as I could, because these blocks would also have to hold a number of other things. In each block I then drilled two holes crosswise to hold the x-axis smooth rods. These holes are supposed to hold the rods securely, so I drilled them just large enough to fit the rods (no bushings here). I didn't match-drill these holes, I just tried to get them straight and with the same spacing in each block, and I enlarged one hole in the righthand block with a rasp to allow that rod to move vertically to make up for misalignment of the holes.
I added a bracket made from steel strap to the bottom of each bearing block to capture a nut on each threaded rod. I tried to make a little cavity for the nut to sit in, but I didn't attempt to make the brackets fit closely enough to prevent the nuts from turning. These brackets transfer the weight of the x-axis assembly to the threaded rods, which in turn are supported by the thrust bearings and the top z-axis mounts. At this stage, because I still had a lot left to build, I didn't do anything to fasten the nuts to the brackets. Later, once I was finished building everything else, I filled in the cavity in each bracket with hot glue, essentially potting the nut and fixing it in place relative to the bearing block.
Motion on the x axis is driven by a stepper motor attached to one end of the x-axis assembly. I made another bracket from aluminum angle to mount the x axis motor to the lefthand bearing block. I had to cut a notch in the bearing block to make room for the belt, just like with the y axis.
On the other side, I made a pulley by sticking two bushings on a screw and I mounted it to the righthand bearing block with a short piece of aluminum strip (1 x 1/8 inch cross-section). On both sides, the belt was aligned front-to-back with the x axis rods, give or take a few millimeters.
I made another bearing block for the lower x-axis rod, and screwed a screw-eye into it to attach the belt to. Just as with the y axis, one end of the belt was attached to a spring that would maintain tension in the belt, and on the other end I made a hook so that I could attach and detach the belt.
I made a second, small bearing block for the upper x-axis rod, and I connected the two blocks with another piece of aluminum strip. Given the trouble I had with jamming and binding on the y axis, I was really surprised to find that this arrangement just worked with very little adjustment needed. The top bearing block had a slight tendency to jam, which got worse towards the right side of the printer -- an indication that I didn't get the two x-axis rods perfectly parallel. But it worked well enough to start with. That completed the mechanical build for this version of the printer!
Electrical components: extruder, endstop switches, heated bed
Here is the extruder I started with. I bought it on eBay; it was one of the cheapest ones I could find. It had a single 6 mm threaded hole in its back for mounting, so I drilled a corresponding hole in the aluminum strip of my x-axis mount and screwed it into place. I added a few washers behind the extruder as a spacer so that it didn't hit the other screw heads protruding from the front of the aluminum strip.
And here is the y-axis endstop switch. It's a microswitch that I've mounted to the vertical frame using a small 90-degree bracket. I put a small screw in the lefthand bearing block under the build platform in just the right spot to hit the microswitch's lever. The x-axis endstop switch was another microswtich with a very long lever. It was mounted to the lefthand z-axis bearing block, and I put a small bracket on the x-axis bearing block in the right spot to hit the lever. I can't find a photo of the z-axis endstop switch, and I can't remember how I mounted it. It was probably something very similar to these two. The x and y switches were not placed very precisely. I programmed retract distances into the firmware to make sure the extruder ended up over the heatbed after homing.
The electronics (Arduino, RAMPS v1.4 board, and Pololu stepper drivers) sat on the baseplate to the left of the build platform. This photo shows it after most of the wiring was done but before dressing the wires. I intended to move the electronics to the back side of the vertical frame, but never got around to it. So the electronics just stayed where you see them in this photo, and after all the wiring was done the wires held the boards in place; I never fastened the Arduino down. The power supply was a standard ATX power supply, sitting on the desk to one side of the printer. I wired a switch between the PS_ON wire and a ground wire to control it.
I got a PCB heated bed, and mounted it to the build platform with a screw at each corner and a spring between the heatbed and platform. The purpose of the springs was to make height adjustment easier by tightening or loosening each screw and to reduce the risk of breaking something if I crashed the extruder into the bed. The bed in this photo is pretty well levelled, and notice how it isn't even close to parallel to the build platform! Making the heatbed easily adjustable made up for sloppiness in my earlier construction. On top of the heatbed is a square of regular window glass that I bought and had cut to size at the local hardware store.
I generally got my electronic components from the cheapest sources I could find. This is skipping ahead a bit, but Lesson Learned: Don't Do That! I got the extruder from a small Chinese seller on eBay. The hotend lasted about four days before its wiring went bad. I eventually got the seller to agree to replace it, but after I mailed the hotend back to China at my expense, I never heard from him again. That seller has since disappeared from eBay entirely. I got the heatbed, Arduino, and RAMPS board from SainSmart. The heatbed had a much higher electrical resistance than advertised, so I was able to get it up to the temperature required for printing ABS only by getting creative with a laptop power supply, and even then it heated extremely slowly. The Arduino occasionally failed to program; I wonder if the microcontroller in it was used or even counterfeit. The RAMPS board pretty much worked correctly, although I eventually had to add heatsinks to the power MOSFETs on it (they came with no heatsinks). SainSmart's customer service was completely unresponsive as well.
I eventually replaced the heatbed with one from another company (whose name I cannot find at the moment), and it had the correct resistance and worked much better. I replaced the hotend with one from Rp1 labs -- I made sure to buy American this time, so that if there was a problem I would be able to contact the manufacturer! But his hotend worked very well, and I have since bought more components from him and been happy with them.
Finally, I used Repetier for the printer -- both Repetier firmware in the Arduino and Repetier-Host on the laptop controlling the printer. I initially used Slic3r as my slicer, but later switched to Cura when Slic3r malfunctioned on some of my models. Lesson learned: The Pololu stepper drivers needed a longer step pulse than what the Repetier firmware initially gave them, and that caused me all kinds of confusion. I had to increase the parameter STEPPER_HIGH_DELAY to 1 or 2, from its initial value of zero. Another source of confusion was the different parameters for the printer size and shape and speed settings. There are settings both in the firmware and in Repetier-Host, and they sometimes seemed to fight each other.
Checkout and tuning
That concludes the initial build of my RepStrap! Unfortunately I don't remember many specifics about what I had to do to get it running. There are some good articles on the reprap website that cover what has to be done to get a new printer working: commissioning, software tweaking manual, and calibration.
I did not have much trouble getting the stepper motors calibrated. My motors are way oversized for what I am using them for, so I was able to leave the current through them relatively low and still have plenty of torque without any risk of overheating. Finding the steps per millimeter is a simple calculation for anything driven by a belt or screw (no possibility of slippage), and getting the extruder's steps per mm correct within a couple of percent is not too hard and is good enough to get started.
It is important that the printer have working x and y endstop switches, but their placement is not very crucial. The z endstop switch, though, does need to be very consistent -- if the height of the extruder's nozzle is inconsistent by just a few tens of microns when the z axis is homed, it will mess everything up. It is very helpful to make the z endstop adjustable. Initially I didn't want to move the switch, and I tried to adjust the height of the printhead nozzle by changing the offset distance in the firmware. That was a pain, as was adjusting the height of the printbed by turning the screws at each corner by the same amount. Getting the printbed levelled is very important. This step should be done separately from getting the height right -- first get the printbed levelled using whatever measure is easiest. I put a piece of paper between the extruder's nozzle and the heatbed, and adjusted the height of each corner so that at zero height the paper was just barely gripped. Once the bed is levelled, then you can worry about getting the height of the first layer right.
Getting the temperatures right (hotend and heatbed) seems to be more art than science. It seems like for every printing problem a possible cause is a temperature being too high, or too low, or possibly not temperature-related at all! So how do you know what to adjust, and in which direction? It seems to just be a matter of trial and error. Just make sure you only change one parameter at a time, and be methodical about it and be patient! I started with printing ABS, which requires higher temperatures and is therefore in some ways more difficult. In general, it seems better to use the lowest temperatures you can. The lowest temperature for the heatbed that still gives you adeuate adhesion will give you the least amount of trouble with peeling and curling. Same with the hotend temperature, although there the lower limit seems to be defined by the point at which you start getting problems with layers ahdering to each other.
Do start with slow speeds and slow accelerations. That's especially important when you're not sure that everything is mechanically sound yet; it gives you more time to stop the printer if something is going wrong.