Reconnecting with the 3D Printer
It's been over 6 months since I used my 3D printer, and during the recent holiday I decided to break it out again. I wanted to write down some of the lessons I have learned since the restart, in no particular order.
The first thing I printed was a presentation piece using bronze-filled PLA. This is like regular PLA plastic filament except it has small particles of bronze embedded in the plastic. It is a very interesting material to print with - the plastic is about 3 times heavier according to MatterHackers, and the parts came out looking very rough. The key is to very thoroughly polish the parts so that they look as though they were cast in bronze, not printed. I found that the first parts I printed at 0.3 mm layer heights had many gaps and crevices that did not go away during sanding. A friend lent me his 3D printing pen (a hand-held heated extruder, essentially) to fill in the spaces. Unfortunately, I found that the material that was acting as filler subsequently fell out when I returned to sand it in to match the rest of the part. I printed the part again at a smaller layer height (0.2 mm) and it looks much more robust. I have yet to sand it so we will see how that comes out.
After successfully printing in bronze, I decided to pursue a project that I've wanted to do for a while - I'm going to 3D print a moving, scale model of a car engine. I found a model of a Chevy Camaro V8 LS3 engine on Thingiverse designed by Eric Harrell, and he deserves all the credit for meticulously creating this model. I found that I could not quite fit the engine block on my Prusa i3 print bed, so I have scaled everything down to 0.97 to make all the pieces fit. Over the first week of printing I have made the valve covers, rocker arms, and some components for the crankshaft.
Running a quick test print on the first part for the engine, the rocker arms.
The first problem I ran into was a problem of convenience - in the past I had always run my printer directly from my laptop because they both sat on my dining room table. Now, however, the printer has been moved to the garage and I didn't want to have to sit in the garage every time I wanted to use my laptop. Instead, I have figured out how to use the built in menu and SD card slot to operate the printer without the laptop. I now generate the g-code on my laptop and upload it to the SD card. That leaves me free to use my laptop to write blog posts while the printer runs parts for the engine.
The next problem I encountered was that when I ran parts from the SD card, the printer did not automatically return the extruder to the x-y plane origin after it finished a part. Instead, the extruder sat stationary at its last printing position and, since the nozzle continued to stay heated, plastic would just extrude out onto the part. Fortunately, I've been building a couple of extras each time I print a new component so it hasn't affected my part inventory, but I have started to add several lines of g-code to each program to move the print head to the x-y plane origin and then turn off the nozzle and the bed heaters. I don't change the z-height of the print head because I don't want the x-axis cross bar to accidentally run into the part if I move the print head down. The g-code lines that I add are pretty simple:
G1 X0.0 Y0.0 ; move print head to origin on x-y plane
M190 S0 ; wait for bed temperature to be reached M104 S0 ; set nozzle temperature
The code G1 indicates that the instruction is a move instruction. The x and y values denote the destination of the print head; since z is not specified, the print head does not change z height. The next two lines use G-codes that are specific to 3D printers. M-functions always represent miscellaneous functions (both for traditional g-code applications on CNC machines as well as for 3D printers). In this case, there are some miscellaneous M-functions that only apply to 3D printers. The M190 code is "wait for bed temperature to reach target temperature" and the M104 code is "set nozzle temperature." I copied those lines of code from the top of the g-code file where the bed and nozzle are initially heated up to the appropriate temperature; I adjusted the target temperatures to 0.
I use Repetier-Host (written by GEEETech) to run the printer and generate G code for my models, and it says that it has the ability to incorporate post-processors - I'm thinking about building a post-processor in Python that automatically adds the final lines to move the print head back to (0,0) and turn off the heating elements in the bed and the nozzle.
The next changes I want to make to my printing setup are to the power source so that it is safer to run when I'm not at home. I have a friend who owns the same printer who upgraded his power supply and built in a relay that would short if there was ever an electrical overload from the grid; I may try to do the same thing. I am also considering purchasing a webcam so that I can watch a print from anywhere. Of course, it wouldn't be very helpful just to watch the printer burst into flames if I couldn't do anything about it, so I may have to think about how to build a simple Internet connection to my printer to control it remotely... That might be overkill but it will take me over 50 hours to print half the engine block so I'm trying to think of a way to avoid sitting at home for that entire time.