My 3D printer project (“Cheezbot”) has been progressing at a slow pace over the past year. It’s not up and running yet, but a lot has changed since the late-2014 post I made when I had just powder-coated and assembled the frame.
Makeit Labs, where I store the project and do the majority of the project work, is roughly 45 minutes away, so I don’t get over there too frequently; usually only about once a week. Usually I try to go on a day when I can spend most of the day at the labs, so I get a good 4-6 hours of time in working on the project, with some additional time set aside for various things like printing things on the labs’ 3D printers, playing video games, helping to clean and organize the space in the wake of our recent move, visiting the local comic store and drooling over their substantial assortment of Gundam kits, etc. In the course of this project I’m also struggling with my limited skills on various tools I need to use, as well, so seemingly simple problems can be significant challenges.
But basically, since assembling the frame much of my effort has been spent adding laser-cut acrylic panels to the machine, installing the electronics package, and building the X/Y gantry which moves the print head.
From a purely practical standpoint this project has been a mess. It’s taken over a year to build the machine and I could have bought almost any hobbyist-level 3D printer for less than the cost of this project. But I wanted to build the machine myself. I actually wanted to use a kit, strike a nice balance between DIY and convenience… But things have worked out “well enough”. And this project gave me an excuse to join the makerspace. Before joining I felt like I couldn’t justify the expense, like the space was too far away, etc… But having joined, I’m glad to be a part of it. One of the other members is a droid builder, so we’ve had this guy brightening up the labs for the past several months:
One of the really useful resources available to me at the labs is our laser cutter. This is a big computer-controlled machine that cuts or etches different materials according to a design file provided by the user. For the purposes of this project, I mostly use it for really simple stuff, like cutting rectangular pieces of acrylic sheet with holes for various components to be installed. But it’s great to have a computer-controlled machine for the job because it makes the job fast and easy. The challenge, usually, is to correctly design the panel before I cut it. When I get it wrong, I waste material, In the case of the clear acrylic panels used for the sides of the machine and the doors it’s not a big deal, as there’s generally plenty of scrap acrylic lying around at the labs, free for the taking. But for some of the larger panels, or the black panels, I have to supply the material myself, since we usually don’t have that stuff on hand.
The electronics package has four main components:
- A 24V power supply which acts as the main power source for the project
- A 5V regulator used to power the Raspberry Pi
- The Raspberry Pi, which will allow me to connect the printer to my home network and print without having to shuttle data across on memory cards
- The RUMBA board, an Arduino-like board which handles the lower-level details of operating the printer and incorporates drivers for the motors and various heating elements
The electronics are housed in a roughly 150mm-tall section in the base of the machine. Most of the electronics are mounted to an aluminium plate which serves as the “floor” of this compartment.
I had initially planned for the Pi to be “headless”: it wouldn’t be operated via a control panel or monitor, it would just provide a LAN web interface. That would have been fine, honestly, but while working on the machine, setting up the Pi, etc. it’s way easier if the Pi has a display. To that end, I picked up a small HDMI touchscreen and installed it. The touchscreen had to be altered slightly to fit in the machine’s front panel (its circuit board includes mounting tabs on the top and bottom which make the unit too tall for the 85mm front panel – these had to be cut to fit.)
One change I made from the original Hackerbot design is that all of my front-panel electronics (the control panel for the RUMBA, on the right, and the touchscreen for the Pi, on the left) are all mounted into the front panel. In the original design the control panel was mounted in a 3D-printed box which was attached to the front of the machine. Printing such a box would have taken several hours of print time (which can be difficult on a shared machine at the labs), while changing the design for my front panel and laser-cutting a new panel is relatively easy.
When the machine is finished, the touchscreen could be used as a control panel and informational display, but for now its main purpose is to make it easier to set up the software on the Pi.
The Hackerbot design doesn’t use a whole lot of 3D printed parts, but there are a fair number of bits and pieces for which 3D printing is a handy solution. To provide these bits and pieces I used the 3D printers at MakeIt Labs, primarily the 3D Touch:
This printer has a few issues, the sorts of issues that everyone should understand before buying a non-open-source 3D printer. Basically, the printer doesn’t use standard G-code files like most open source printers do. It was meant to work only with the slicer software provided by the manufacturer. A limitation like that is fine at first, but as time goes on it tends to become a problem. Eventually the manufacturer stops supporting the machine. This printer is maybe 4 years old at this point, and it’s unsupported. Because it uses its own flavor of G-code, that means we’re stuck with the 4 year old proprietary slicing software the manufacturer provided. Good slicer software is very important to getting successful 3D prints, and good slicer software is available on the internet for free: but because of the proprietary nature of this printer, we can’t use it. A member at the labs has a Makerbot Replicator 2 as well, and it’s a similar situation. It’s about 4 years old, only works with proprietary software, and the manufacturer has mostly discontinued support for it. (And the Replicator 2 isn’t exactly a cheap machine!) Even if you don’t care about the principles of open source, as a consumer you have to recognize the practical issues: if you get stuck with inferior software, you’ll get stuck with inferior print quality.
Specifically, in the case of the 3D touch, the slicer software has a few specific problems:
- Each layer in a 3D print is drawn as an outline (or “shell”) along with a certain amount of material added to provide additional strength to the shell (the “infill”): a common option to make parts stronger is to print a thicker shell. But if you try this with the 3D touch software, the infill won’t print correctly.
- The slicer software has no option for “minimum layer time”, which is important because you need to material to cool a bit before printing the next layer. (This is less important when printing with PLA, as you’d normally be blowing a fan on the part as you’re printing to make it cool faster. But with ABS you need to give it a little time.) As a result, if there’s an area of the part where a single layer can be printed quickly, the part is likely to turn out deformed and scorched.
- The software doesn’t always make good decisions about where to provide additional support material, or how much to provide.
Despite these issues, however, the 3D Touch has been quite useful to me for printing parts for my printer, as well as various model parts I’ve printed for the sake of experimentation. For instance, I used it to print the extruder assemblies for my printer: these parts are attached to a stepper motor and used to drive plastic filament into the heated nozzle:
As I started installing electronics and running wires to the motors, I found it useful to 3D print some cable guides that could be bolted onto the frame: (The T-slots in the aluminum frame are designed to make it easy to bolt on additional parts)
Additionally I decided to 3D print the mounting parts for the end-stop switches. In the original design these were drilled from pieces of aluminium. In more recent versions of the design the whole end-stop design has been reworked, and uses a printed circuit board. Going with either option would have been a bit complicated for me: in the earlier design the end-stop switches were supposed to mount on the angled plates at the corners of the X/Y gantry, but my angled plates (purchased online from the designers of the machine) were built according to a later design, which didn’t include the mounting holes for the end-stops. Rather than drill those holes (and possibly have to take apart the gantry to do it) I chose to design new end-stop holders which would mount directly to the frame.
The main, ongoing challenge for me in this project so far has been building and tuning the X/Y gantry. This is an assembly of six 8mm steel rods that guide the movement of the print-head. The gantry on the Hackerbot is similar to the one on the Ultimaker machines: four steel rods (the “rails”) are arranged in a square. The ones on opposite sides are connected together with belts, and rotate in unison. On each rod is a sliding block, also attached to the belt. Each sliding block carries one end of another steel rod (the “carriage rods”). These carriage rods hold the print head. So as the belts rotate, the blocks on either end of one of the carriage rods move together, moving the print head along one axis.
The benefit to this kind of design is that the mass attached to each axis is kept low. On many designs, the Y axis carries the entire mechanism for the X axis (including the X-axis motor, and possibly the extruder motors as well), and thus it’s pretty heavy. This can lead to visible artifacts in the print: as the print head rounds a corner, the inertia of the print head fights the rigidity of the frame, which can cause the “turn” to go wide, or the head to wobble for a little while after making the turn. Minimizing the mass attached to each axis reduces these effects.
However, the down-side to this gantry design is the large number of variables, different elements of the gantry that must be properly aligned in order for it to work. Opposing rods must be parallel. Adjacent rods must be perpendicular. Carriage rods must be parallel to rails. The vertical space between the X and Y rails (and thus also the corresponding carriage rods) must correspond to the distance between the bearings in the print head… And so on, and so on. I struggled with these issues for months. At this point I think maybe I’ve finally got it sorted out. I gradually figured out ways to improve the alignment of the rods, without having to take precise measurements of their position. I bought better lubricants for the moving parts. And I discovered an important issue that had been causing me a lot of trouble: the rails were not close enough to parallel. The distance between them was different on one end than on the other, and so the gantry got stuck as the carriage rod tried to maintain equal distance between two rails which were not equally spaced.
If the X/Y gantry issues truly are sorted out, the next steps will be to resolve some issues with the electronics package (in particular, I had a short circuit which left some of the electronics badly damaged) and then build the print bed and Z axis gantry. Building the Z axis should be simpler than the X/Y axes, but it does have its own share of challenges.