3D Printer

Printer Image

I have wanted a 3d printer ever since I saw one in a tech magazine (I don't remember which one). My interests were further developed at Rutger's Day that year. There, they had their Makerbot Cupcake 3d printer. Although it was not operational at the time, I was intrigued. I kept on to the want for about year, constantly nagging my dad the whole time. I was delighted when, about December, he finally decided to buy me one; the deal was that I had to get an A in math, and I did. The printer selection process was long and tedious, but we finally decided in the RepRapPro Trocolour Mendel. We chose this printer for many reasons. One of the main things that I liked about it was that it came as a kit. This meant that I had to build it, which was a fun learning experience. Additionally, we thought that the three print heads would come in use one day, although we did not yet know for what. Furthermore, I also liked the idea that the printer can print all the plastic parts for the printer. This makes it easier to make another if we ever wanted to.

The process of building the printer was fun. It took about two weeks during summer break for the initial building, then another couple weeks to get the printer to work. The instructions provided on the RepRapPro website were very clear and easy to follow, making the build process much easier.Once the printer was built, we found the the power supply that was supplied was defective, not outputting the full 12 volts. We emailed RepRapPro, and they were nice enough to send another one. Unfortunately, it had to come all the way from England, and we did not want to wait that long, so we ordered one off Ebay in addition. We now have an extra power supply in case the one that we use ever has a problem, and it has not so far. This delayed the progress of the printer a bit, but I was able to test basic functions from the bench top power supply we have. This did not have enough current to drive any of the heaters, but we were able to move the axis around and test that the electronics worked, as well as basic calibration. I installed Proterface and the RepRapPro slicer on my computer, and I was ready. Luckily, there were not problems. Once the power supply arrived, I was ready to hook it up and test the rest of the printer. The heated bed and hot end worked flawlessly, so I was ready for the first print. The first print was one of the vertex frame pieces from the printer, and made an excellent fist print. Surprisingly, the first print came out nearly perfect. I noticed that the extrusion paths on the top finish of the part were squished together a little too much, which meant that I had to calibrate the extrusion flow ratio in the software. Everything worked fine for subsequent prints, until I noticed that the frame was not aligned properly. I went back through the directions, and it turned out that I had missed the step to measure the sides of each of the triangles of the frame. I than had to adjust all the sides, and nearly had to take the printer apart. Luckily, I has able to keep it together.

Once the printer was initially working, I starting making modifications and changes to my print flow. One of the first things I did was to switch to using Slic3r rather than the RepRapPro slicer. Originally, Slic3r only had support for one print head, making it unusable with my printer. Luckily, the great people that maintain Slic3r had been working on multiple print heads, and was released quickly. Slic3r proved to be more reliable and had more options to fine tune prints. Other modifications include

Azteeg X3 Pro Control Board

Azteeg Image

The default Melzi control boards that came with the kit were never designed to control more than one extruder. It was set up so that there was two melzi boards: One that controlled the movement of the printer and one print head, and the other controlled the other two print heads. They were then loaded with modified firmware that allowed them to talk to each other over a serial connection. Unfortunately, they serial connection was not very robust. There would constantly be communication issues, resulting in the reported temperature being unusable. This would cause all sorts of problems, and resulted in two of the three print heads being unusable most of the time. This lead to the decision to buy a new control board for the printer, that would handle all the print heads. I settled on the Azteeg X3 Pro. The Azteeg was one of the only control boards that I found that could effectively handle three print heads. Most control board could only handle one or two, as most printers only have one or two print heads. Once it came in the mail, I had to wire it. Wiring proved to be fairly simple, as it was a matter of screwing the right wire into the right screw terminal. The other challenge was configuring and compiling my own Marlin firmware. I had to go through the configuration file and set everything to match my printer. One everything was wired and configured, the Azteeg worked perfectly. It was worked wonderfully ever since. I have used the extra outputs to power a light on my printer, as well as a cooling fan, and to make the fan on the hot end only turn on when it is hot.


After some time of using the printer tethered to my laptop over USB, I decided that there was a better solution. After some web searching, I came across a web server called Octoprint. it is designed to run on a small Linux board such as a Raspberry Pi, and provides a nice web interface too your printer. It looked like the exact solution to my problem, so I set it up on a Pi that I had laying around. Once it was set up, it work wonderfully. It has since been running on a raspberry pi on my printer, and is the only way that I connect to it. I have used every model B Pi to run it, from the original Pi B rev 1 with only 256MB RAM to the new Pi 3 with 1.2GHz and 1G RAM. I have closely followed the development of Octoprint, as multiple print head support was originally only available on the development branch.


One of the nice feature of Octoprint is the ability to stream a camera feed to the Octoprint interface. This facilitates remote printing and allows long running prints to be monitored. I bought a Raspberry Pi Camera to use, and set up mjpg-streamer to stream the camera. I then set up Octoprint to show the feed, and I was set. The camera has proved to be very useful to monitor long prints, as well as to start prints remotely.

LCD and Buttons

Although the Octoprint web interface is great for normal printing, it can be annoying to use a laptop to control the printer while controlling the printer manually, such as for calibrating. For this reason, I decided that it would be nice to have a small LCD and some buttons to control the printer through Octoprint. Originally, my plan was to use an ATmega 328 microcontroller to handle the LCD and buttons, which would then communicate to Octoprint on the Pi through a serial connection. I got it somewhat working on the ATmega side, but it was the communication that had issues. I then decided to move to having the Pi control the LCD and buttons directly, hooks up through the Pi's GPIO. This proved to be much more effective than the separate ATmega, and was mostly working for a time. I had a python script running on the Pi that would communicate to Octoprint over its REST network API, and handle the menus on the LCD. Unfortunately, the REST API was a bit slow for constant use.


Touchscreen Image

When the official Raspberry Pi Touchscreen was released, I decided that it would work much better to control the printer than the buttons and LCD that I was using before. After receiving a touchscreen along with the new Raspberry Pi 2, I set to work on an Octoprint plugin for the touchscreen. By using the plugin API instead of the REST network API that I had used before, I would hook directly into Octoprint without having to constantly send it network requests. I used a graphics library called Kivy to handle the touchscreen, which made graphics much easier. Furthermore, because Kivy is cross-platform, I was able to run Octoprint with my plugin on my laptop for development. This proved to work much better than the LCD and buttons, and also provided a much nice interface and more features.

Spring-loaded Extruder

Some filaments, such as Ninjaflex, must compressed more than normal filaments in order to be pushed out of the nozzle. Unfortunately, the extruders that came in the kit had a fixed roller bearing to compress the filament, and it could not be adjusted to compress the Ninjaflex enough. As a result, I ended up modifying the extruder and reprinting it to have a spring loaded roller bearing, which pushes on the Ninjaflex enough to push it out of the nozzle.

Power Relay Box

In order to facilitate remote printing, the printer must be able to be turned on remotely. To accomplish this, I used a relay connected to a GPIO pin on the Pi to control the power to the printer. At first, I printed an outlet box that housed the relay and additional circuitry. Because the relay board the I got had two relays, I decided to have it switch two outlets to have an extra for anything else that I might have wanted to control from the printer. IN the box, I also had some manual switches to switch each outlet between off and Pi control, and a safety in case the Pi had an issue and could not turn the outlets off. Also, there was dual colour LEDs corresponding to each outlet, that would be either green or red to show on or off. Along with this was a small circuit to mix the inputs of the Pi and the switches, as well as control the colours of the LEDs. The box was mounted on the wall beside the printer, and had a cable running to the GPIO of the Pi. This came to be annoying whenever I had to bring the printer anywhere to display it, so I decided to redo the box to put it on the printer. This was mounted directly to the printer, I also mounted the power supply to the printer as opposed to it being separate. I could then wire the power to the printer and the Pi GPIO directly to the relay box, without long cables and connectors. I also got a single outlet to put in the box to be controlled by the relay. This box allows me to turn the printer on and off remotely, as well as have the printer turn itself off when it is done printing.