Project Timeframe: June 2015 – February 2017
This was a 3D printer I designed and built to satisfy my high school’s senior project requirement and also to learn more about 3D printing. I had become fascinated with 3D printing when my high school’s robotics team first received a couple of Makerbot Replicator 2 3D printers and I got to work with 3D printers for the first time. This is my most mechanically complex project to date, and I’m proud of all the design work and time I put into this project. Check out the videos below of the working project, and I’ve done a (really long) full build write up below if you are interested in more details!
3D Print Examples:
Here are my favorite examples of things I have printed with this printer!
The Design Process:
Initially my goals for this project and the 3D printer were:
- Design and build a printer from scratch, on a budget.
- Learn the ins-and-outs of 3D printing to achieve as high of a print quality as possible
- Design wise I wanted to have close to a cubed foot build area (12″x12″x 12″), large enough to print the largest components on my tricopter, an auto-leveling probe, dual extruders, and a heated bed.
- Keep the design as compact and as unobtrusive as possible. I didn’t want a monster printer taking up all the room in my house. I ended up putting a lot of thought into how I wanted to keep things compact
- Keep the design simple, easy to manufacture, and easy to fix.
This printer was heavily based on the Prusa I3 line of printers, and I tried to stay relatively true to the RepRap mission of creating a printer that can replicate itself. Besides the large wooden frame pieces, and metal components, all the joints and pieces holding the printer together are 3D printed. In fact, later on, after I built and got this 3D printer working, I would 3D print upgraded parts for my 3D printer! As for the software, I used the Marlin variant of the RepRap software.
First let’s talk about my design process. When I first started this project, I wasn’t really sure what printer style I wanted. I initially started the design off my memory of looking at an Ultimaker 3D printer at a Maker Faire event. As you might imagine as a result of just going off of memory, the results had a lot of room for improvement. I first started off by designing the build plate assembly:
The build plate above I assumed to be a 1/4″ piece of aluminum, 12″x12″ square. The weight of that piece of aluminum on my original design above would have put serious weight on the bolts and ~single~ ziptie holding each bearing in place, and I realized it would have been a very weak and shaky setup, so I made a revision for the second version, based on the Ultimaker original laser cut frame:
Overall, I thought this version of the printer’s z-axis wasn’t so bad. I liked that everything was laser-cut and I liked that the build plate seemed to be in a nice sturdy location. However there were a few deal breakers for me on this version. One, the amount of laser cut parts that would be necessary. There were too many laser cut parts for this assembly to be reasonable in my opinion. It would require a lot of wood, and a lot screws to hold it all together. This assembly is also fairly complex, and not simple like I originally envisioned. So, on to version 3. This time I tried to replicate the Ultimaker 2’s build plate, but with laser cut wood instead of metal.
Overall I was happier with this version of the z-axis for my printer than the previous two versions, but with this version I still had a few issues that made me not continue in this direction. Firstly, I came to realize that having a 12″x12″x.25″ build plate cantilevered over thin air, and only having a flat piece of plywood supporting the aluminum build plate was probably not a good idea. Secondly, I didn’t like the idea of flange bearings and the expensive leadscrew nut. At this point I decided the core-xy bot solution was probably not the printer that was right for me. I wanted a printer that would be much simpler to build, and less risky if I got some measurements wrong or I needed to change something about it after the fact.
Considering the lessons from my past three design attempts, I began to look around and eventually settled on building a variation of the much simpler I3 Prusa. After I decided to design a printer based on the I3, the design phase went very smoothly. The genius of the I3 Prusa design lies in its simplicity. I only needed three laser cut parts, some 3D printed parts, and some threaded rod and smooth linear rails for a complete printer. If I had continued to go down the Ultimaker “box style” (core-xy) style route for my printer, I would have needed a lot more linear motion components and laser cut parts.
The Build Process
Unfortunately I don’t have any pictures of the design process for my I3 Prusa style printer, but as I mentioned the design was pretty straightforward, and I have plenty of photos of the build!
I bought a plain old 1/4″ plate, not cast (and therefore not perfectly flat), to use as the build plate for my 3D printer. However, this plate had a big bend in it, so to correct that problem I tried to use my high school’s CNC machine to mill the build plate perfectly flat. However, the bend was so significant in the plate the vice jaws didn’t have a good grip on the plate, so when I tried to face off the plate with a 2″ face mill, the plate started to get pulled out of vice jaws, causing the facemill to chatter like crazy. I was forced to stop the machine, and that was the end of me trying to even this plate out. It’s possible I could have gotten away with this if I had just used a regular 1/2″ endmill and used very shallow cuts, a slower feed rate, etc.
After my almost disastrous attempt to flatten my build plate on the CNC machine, I just decided to use the undamaged side of the build plate and live with the bend that was already there. After all, as I will discuss later the Marlin firmware can compensate for that in software.
I next assembled the first version of my hot end assembly:
I also designed and 3D printed my own filament spools; they were made of four flat plates glued together.
The filament reel itself sat and spun on four small bearings. I did this instead of mounting the filament above the printer like most Prusa-style printers do today because I was worried (correctly) that the wooden frame of my 3D printer couldn’t support the weight of one or even two filament reels suspended directly above the printer. Instead, I went the route of designing and 3D printing my own filament spool holders that would sit behind the printer and hopefully reel out filament. These filament reels had four bearings each, which in theory should allow the reels to spin freely and feed the 3D printer. In reality, I didn’t get the tolerances quite right on the sides of the filament holders. There is a tricky size i had to get right where I wanted the filament reel to sit on the bearings but be supported by the sides of the filament holder so that the filament reel wouldn’t just fall off, and I didn’t get this right on one of the two filament holders I made. I found that one of the filament holders worked for the most part, but after some of the filament got lighter after some of the filament being used up, the reel would stop spinning and the the 3D printer extruder would just start pulling the roll of filament into the printer. In retrospect I think there are better ways to go about this design, but generally just suspending the filament on a holder above the holder is the easiest.
Next I got the pieces for the frame of the 3D printer laser cut. I decided to make the printer out of wood because wood is cheap and easy to work with. I used some sort of composite wood I picked up at a lumber yard, which I later would realize was a little too flimsy for my liking. The printer had a tendency to deflect easily, which wasn’t good, although for the most part this didn’t seem to affect the print quality too much. I only used 1/4″ wood if I recall correctly, which for a composite wood was definitely not enough, so if anyone reading this is looking to build their own 3D printer and wants to use wood, definitely go a bit overkill in this area, get like 1/2″ thick at least.
I put a lot of work into making the wiring somewhat neat and uniform on my 3D printer. I redid all the wiring on the stepper motors to have longer cables, and I tried to route all the cable to the RAMPS v1.4 board as neatly as possible.
Next I got rid of all the unnecessary cabling on the PC power supply I would use as my 3D printer’s power supply:
In order to get a nice 3D print, traditionally the print surface (the bed) of a 3D printer needs to perfectly level. This was achieved manually, usually by adjusting little knobs underneath the print bed. This operation was generally more of an art than a science, and always a huge annoyance, so I wanted to automate the bed-leveling process with an auto-bed leveling setup for my 3D printer. I decided to use an inductive sensor probe that detects when the probe is close to the surface of the aluminum build plate. When the inductive probe is brought in close to a piece of metal, the sensor will trigger just like a regular limit switch, except unlike a limit switch an inductive probe doesn’t actually need to make contact with the printing surface which can be advantageous. Because the inductive probe doesn’t make contact with the print surface I could eliminate the deflection of a limit switch as a potential source of inaccurate bed leveling. However, annoyingly the inductive probe required an extra circuit to work properly with the RAMPS v1.4 board, and what I saw recommended online was a voltage divider circuit to drop down the 12V output signal to a 5V signal. At this time I was not very confident in my circuit abilities, and understanding the the purpose and circuitry of this voltage divider circuit was difficult for me.
I don’t remember exactly why, but this voltage divider circuit didn’t work out for me, so I ended up pausing on the inductive probe front for a bit while I looked for a solution to the problem. In the meantime, I was excited to try out the hot end and my 3D printer for the first time, but I learned the hard way that the Teflon tube included with the hotend package has to go ALL the way down the hot end….
Thankfully the PLA solidified to the inside walls of the hot-end was easily removed by just heating the hot end up, and pushing the Teflon tube through- I think anyways. Hard to remember exactly how I fixed this years later as I write this, but I remember it wasn’t as much of a disaster as I thought it would be!
After properly inserting the Teflon tube and re-building the extruder, this is what the whole extruder assembly looked like:
Now it was time to go back and get an inductive sensor probe working on my 3D printer! I ended up asking one of my mentors at school for advice, and as I was talking him through what I was trying to do, he recommended I use a mosfet instead of a voltage divider. At least, I believe he recommended a mosfet, but as of writing this the circuit for the inductive probe is another detail I don’t remember much about. Regardless, his recommendation, whether it be mosfet or transistor and the accompanying resistors, worked perfectly, and I had a working inductive probe sensor on my 3D printer!
The inductive probe sensor was a life-saving feature on my 3D printer. Before every print, the 3D printer took a survey of a nine-point grid on the print-bed with the inductive probe, and from those data points the software could accurately compensate for the warp of the bed on the fly. Because the bed was “leveled” in software, this eliminated the need to manually level the bed every few prints which I always found extremely tedious, and rather hit or miss on the 3D printers I had used at school. Furthermore, due the large bend in my aluminum printbed, manual bed-leveling would not have been sufficient to properly “level” my printbed, since it was already bent.
After all of that, I now had a working 3D printer! Now it was time to try my first 3D prints!
Although I had my first successful 3D prints with the above setup, there was still a lot of tuning and work to be done on my 3D printer! I had originally mounted each of the y-axis bearings on the bottom of the print bed with a single zip-tie, which turned out to be unsatisfactory. I would have to redo the y-axis carriage, but since I didn’t have access to a laser cutter anymore, I decided to make the new y-axis carriage by hand. In the end I think the new y-axis carriage turned out pretty nice! For the eagle-eyed among those reading this wondering why there is space for two bearings on one side of the carriage and only space for one bearing on the opposite side of the carriage, this is done to avoid over-constraining the print bed, and is a standard technique for all Prusa-style printers.
First 3D Prints and NinjaFlex
Now that my 3D printer was up and running, the fun could really begin! I could finally start 3D printing! I’ve posted some of the examples of what I was printing at this point below. I was really impressed with the print quality from my printer right off the back! I was expecting more melted-puddle looking objects at the beginning but I really didn’t have any major problems with getting pretty decent prints from the get-go.
I did notice a few artifacts on my Benchy test that hinted that the plastic wasn’t cooling fast enough, so I began experimenting with adding a “print fan”, a fan that blows air directly on the print. This print fan was an afterthought on my part, I had been aware that a print fan might be necessary for my 3D printer, but I took a risk and didn’t include a print fan in my initial CAD design and just hoped a print fan wouldn’t be necessary. As usual for me, this gamble didn’t pay off. Adding an effective print fan to a 3D printer can be trickier than it would first appear. Naturally, one wants to get the airflow from the print fan to blow as close to the plastic being laid down from the extruder as possible, but if the fan shroud gets too close to the hotend the fan shroud could be melted. Secondly, 12V print fans don’t have a lot of air-blowing power, and one wants to avoid ninety-degree bends in the air duct or pipe as each ninety-degree bend significantly reduces the airflow from the fan. As a result, getting a good print-fan setup can be kind of tricky, especially if one doesn’t think out print fan placement before hand (not that I would do that). Initially I tried just sticking a print fan to the side of the extruder stepper motor and 3D printed (with my 3D printer nonethless!) a very simple fan shroud that had a slight bend in it to aim the air close to the nozzle and 3D print.
With my new print-fan setup in place, I next tried printing with NinjaFlex, a flexible 3D printing material.
I was actually surprised at how easy I found it to print with NinjaFlex. I was under the impression from what I had read online that it would be really difficult to print with a flexible material like NinjaFlex, but I found it to be pretty straightforward when I followed the recommended print settings.
Next I went back to printing with PLA, and the below is perhaps my first practical 3D print. I made a battery cover for my English teacher’s guitar pedal thing. I’m not really too sure what it is, but it was fun trying to get this to work!
As I mentioned at the beginning of this article, part of the impetus for this project was to fulfill my high school’s senior project quota, and at this point it was time to present the “final” result of my senior project to my English class, and give my class a 3D printing demonstration!
My presentation went well, but I wish I had been more enthusiastic! My 3D printer was a project I had put a lot of passion into, but I felt like I didn’t convey my enthusiasm very well while presenting to the class. One of my peers commented that I sounded “bored” during the presentation, and frankly I agreed. For future opportunites I’ve had to talk about my projects, I’ve tried to remembered this lesson and let my natural enthusiasm and passion out. Regardless, just because I had technically finished my senior project requirement didn’t mean this project was where I wanted it yet, I had a few more ideas for improvements to make!
Returning to printing with flexible filaments again, I had the idea to use NinjaFlex to make a speed loader for my paintball gun. These “speed loaders” are usually commercially sold to make it easier to reload when playing paintball, and are designed to bend one way and only let paintballs fall into the hopper/gun, and not fall out. I realized using NinjaFlex I could design and make my own speedloader instead of buying one!
Overall I was very pleased with how my 3D printed speed loader turned out. I wasn’t sure of the durability of a 3D-printed speed loader, and I remember thinking I would be impressed if it made it through one full day of paintball, but as of this writing it has lasted me more than a few days out on the paintball field! The speed loader shows no signs of fatigue, and it has become a permanent addition to my paintball gear.
Double the colors, double the struggles
One of my big goals with the “Shayper bot” 3D printer was to print with multiple colors or materials simultaneously. There are several ways of printing with multiple materials, but the most straightforward as of this writing and when I built my 3D printer is known as “dual extrusion”. With dual extrusion, there are simply two independent extruder mechanisms each printing a different color or material. Since I knew I wanted to try dual extrusion when I was designing my printer, I put a lot of thought and foresight into my 3D printer’s design with the intention that it would be dual extruder capable in the future. I designed the initial version of the x-axis carriage to accept two extruders, but the way I designed the extruders to mount to the x-axis carriage made adjusting the extruder’s positions in fine increments very difficult, and those fine adjustments were necessary for getting a good dual-extrusion setup.
The hard part about dual extrusion is everything has to be lined up just so. The two extruders have to not only be perfectly aligned in the x and y-axes (at least in software) but the height of the two extruders has to be setup in JUST the right way (which can’t be fixed in software). Both extruders have to have ever so slightly different Z-axis heights, so that when the 3D printer is printing, one extruder does not scrape against or damage the plastic that the other extruder is depositing, which could ruin the print. Desinging a mechanism to allow me to finely tune the z-axis reliably turned out to be the largest hurdle for getting dual extrusion to work reliably on my 3D printer.
I initially bolted both extruders directly to the x-axis carriage, but I found it very hard to make small incremental changes to the extruder with nuts and bolts. So I took some inspiration from CNC lathes, and tried to design a “rail” system, where the extruder assembly could be slotted into one of two sets of rails on the x-axis carriage. The extruder assembly could be, in theory, freely slid up and down between the two rails of the x-axis carriage to adjust the height of the z-axis, and when I was satisfied with the z-height of the extruder, I could tighten down two bolts that put clamped the extruder assembly into place on the x-axis carriage
The rail system worked a lot better at giving me granular control over the position of both extruders in the z-axis, and using this system I had dual extrusion working on my 3D printer for a bit (see my first video at the top of this blog post), but the rail system still wasn’t that reliable in general. It was still a hit-or-miss affair whether the extruders would be aligned correctly on the z-axis or not after trying to adjust their heights. I also realized having my auto-bed leveling probe on an extruder who’s height was frequently changing was not a good idea, because whenever I changed the height of the extruder, the offset for the height from the probe to the print bed would change and I would have to tune the height offset for the probe again. To fix this I 3D printed a little mount that went on the x-axis carriage and allowed the inductive probe to be mounted between the two extruders.
The probe fix was much needed, but shortly after this I gave up on dual extrusion. Dual extrusion on my 3D printer was just too unreliable and too much of a hassle for me to want to use it regularly.
Conclusion and Lessons Learned:
At this point, the “Shayper bot” 3D printer had been my main project and use of my time for close to two years! After my struggles with dual extrusion, as in all projects, I eventually began to lose interest. I came to the realization I wanted a tool, not a toy, for a 3D printer. I wanted a printer that would “just work”. My printer often did not “just work”, and required constant maintenance. Furthermore, after a while I felt like I wasn’t learning anything new, instead I was just trying to keep this thing running, and that’s when I decided to shelve this project and move on. In order to fulfill my “3D printer gap”, I decided to buy my own 3D printer, the i3 Prusa Mk3, which has worked out wonderfully for me and for the most part really does “just work”!
If I had to do this project again, what would I do differently? First off as I touched on before, if I had the resources, I would make my frame from metal, or at the very least much thicker, much sturdier wood. There was a lot of flex in this 3D printer, and while overall the print quality on my printer was more than adequate for my purposes, I’m sure I was loosing some quality to non-rigid components. Secondly, I would absolutely not use m8 threaded rod and a single nut for lifting the z-axis. I went the route of using threaded rod, and a standard m8 nut to control the vertical motion of the printer because it was vastly cheaper than going for a proper leadscrew. However, the decision to use a threaded rod and nut cost me more time in the end than it was worth. The overall weight of the z-axis wore out the nuts and threaded rod out quite frequently, and using software bed-leveling only sped up this process since the z-axis was constantly in motion, if only in fractions of a millimeter at a time. Changing nuts and threaded rods was never a fun task, and not worth cheaping out on proper linear motion components for. Finally, I could do a better job on designing a “slot” system for the extruder, one that was more “captive” like on CNC machines. As it stands right now, if I tighten the nuts down too far on an extruder assembly, the slot system has a tendency to either pop the extruder out of its slot and bend the rails. A lot of this could have been alleviated if I stuck more closely to how CNC lathes handle this same problem.
Complaints aside, I am really quite proud of what I came up with. I put a lot of work into this project and I think it was a good learning experience. That about sums it up for my “Shayper Bot” 3D printer project. If you made it this far you’re a trooper! Thanks for reading, I appreciate it!
My next big project would go in the complete opposite direction as this one. My 3D printer was a mechanically complex project with little, if any, coding knowledge needed, while my next project, a self-balancing inverted pendulum robot, would be a simple mechanical project but a very large programming project, at least for a beginner programmer like myself.