The Zombie Printer

From Richmond MakerLabs
Jump to: navigation, search

This 3D printer was originally a CTC printer, but had been modified by a previous owner. It was donated to RML with a missing extruder and dubious internal wiring. On the Plus side, it had all three axis motors and an Arduino Mega with a SainSmart 3D printer shield including 4 Polulu stepper motor drives.

CTC printers are a cheap Chinese version of the early US MakerBot, which was based on an open-source design. MakerBot deserted open-source in 2012 and switched to making printers to its own proprietary design.

This is no longer a CTC printer because of its history of being hacked. As it has been re-animated, it's being called the Zombie Printer. What's in a name, anyway?

What you want to know is how to use it and what to do when things go wrong. Let's get started.

Overview of Software

A 3D design is held in a file of type .stl. These files are readily downloaded from Thingiverse, or exported from 3D design software such as Fusion360, Blender, OpenSCAD or Rhino. We start with an .stl file.

The 3D printer cannot read an .stl file. The printer needs to be given commands to move on an X-Y plane to lay down a trail of molten plastic representing one layer of the finished object. Then it must have a command to change height by one increment and receive commands that place another trail of plastic on top of the previous layer.

Printer move commands are given in g-code, similar to the commands that control 3D milling machines, derived from commands for X-Y plotters. The language of g-code is well established and written up all over the internet.

The software we use to convert from .stl to .gcode is called slic3r (pronounced 'Slicer'). The process of producing gcode from stl is known as 'slicing'.

The important thing about slic3r is that it holds parameters specific to the printer we are using. For instance, setting the maximum distances that can be moved in the X, Y and Z directions, the working temperature of the extruder and the build plate temperature, defining the size of the extruder nozzle and the diameter of the PLA filament.

Slic3r calculates the commands necessary to extrude exactly the right volume of plastic for every movement. Because the gcode file is written to match the printer, you can't use that gcode on a different model of printer.

The 3D printer can't accept the whole gcode file all at once. It has a limited buffer. So now we need a piece of software that feeds the gcode to the printer just when it's needed. This software also provides a facility to control the printer manually. You will need to move the extruder motor by itself when loading new filament, and move the build plate table when setting the initial Z=0 height. The zombie printer typically uses Pronterface for the task of sending g-code to the 3D printer.

Happily, slic3r and Pronterface are open-source software available for Linux, MacOS and Windows, so you can load them on your own laptop and plug into the Zombie printer using the attached USB cable. Alternatively, the desktop computer by the kitchen corner has them already installed and you just need to plug the printer's USB cable into that computer.

Using the printer, Getting plugged in

Power up the printer. There's an IEC mains connector on the back panel, on the left-hand side, and it should have a mains cable already plugged into it. There's no mains switch, so the power supply fan will start running as soon as the mains power is applied.

The front panel display should come on at this time.

Plug the attached USB cable into the computer. This will be either your own laptop with slic3r and Pronterface on it, or plug the printer into the kitchen corner desktop computer. Start running the application Pronterface.

At the top left of the Pronterface screen, there's a box labelled 'Port'. Click once on that, to scan the USB ports, then click 'Connect'. (Leave the speed setting at 115200.)

If it doesn't connect, it will hang with the message 'Connecting...' If so, you may have to select the correct USB port from the pull-down box beside 'Port'. A successful connection results in a dump of information about the internal printer settings.

Using the printer, Setting the Z origin

The next thing only has to be done once at the start of your printing session. You need to check the Z=0 height. To do this you will need to enter a few manual commands, using g-code. You type the letters and numbers in to the box at bottom right of Pronterface, and click 'Send' to execute the command. You can use upper or lower case. Don't type  ; or my comments.

G28 ; This homes all three axes. X and Y home to their maximum positions and Z goes to zero.
G1 Z5 F3000 ; lift nozzle by 5mm at a speed of 3000 mm per minute.
G1 X10 Y4 F3000 ; go to bottom left corner of the build plate.
G92 X0 Y0 ; record this point as X=0 and Y=0.
G1 X100 Y75 F3000  ; Move to approx centre of build plate
G28 Z ; home the Z axis alone

At this point the nozzle should be able to touch a single sheet of paper, slightly gripping it against the build plate so it can't easily slide about, but loose enough to let it be pulled out without tearing.

The height of the build plate can be manually adjusted by turning four wing nuts underneath it. A quarter turn will make a noticeable difference, but try to move all four nuts the same amount and the same direction, or the plate will no longer be level.

Turn the nut clockwise to move the plate higher, trapping the test paper more strongly. In this context, clockwise means imagine the build plate is transparent and you can see the wing nut from above. Then move the wing nut in what would seem to be a clockwise direction.

Recheck the Z=0 position, moving the z axis up by 5 mm and homing again, e.g.

G1 Z5 F3000
G28 Z

and try with the piece of paper again.

Using the printer, Starting the print

When you've used slic3r on the .stl file and saved the corresponding .gcode file, you are ready to print.

In Pronterface click 'Load file'. Select your gcode file and press OK. An image of the object will show up on the centre area (looks like graph paper) and a lot of information appears on the right: number of layers, estimated filament length and estimated print time. Just click on 'Print' and the process will start.

At first it will do 'axis home', then move to the bottom left corner of the build plate. This is followed by a longish pause as the extruder nozzle warms up to the required temperature (185 or 190 degrees C).

If you have set up slic3r to use a heated build plate, then on pressing 'Print', the axes will home to the top right position (max X and max Y), and there will be a very long pause while the bed reaches the prescribed temperature (about 60 degrees C). Once the bed is hot enough, the axes will move to 0,0 and the nozzle heating begins.

The front panel shows the set temperature and the current temperature of the heated bed and the extruder nozzle.

Once the correct nozzle temperature is reached, printing starts. The first extrusion is an outer circumference of the object. This gives the extruder a chance to get the plastic flowing properly before the object itself is printed.

When the circumference is completed, the printer lays down the first layer of the outline of the object. It repeats this twice more, laying down plastic lines beside each other to create the outer surface.

Watch carefully, because if the plastic does not stick to the build plate, the print attempt will have to be stopped. The two most likely reasons for failure at this stage would be a poor setting of the Z axis height or a slightly greasy build plate surface.

If you do have to abandon the print, use the 'Pause' button on Pronterface, then send 'G1 Z15 F3000' to lift the nozzle clear. Click 'Heat: Off' (over on the left hand side of the Pronterface screen). Clear the build plate, maybe wipe the build surface with isopropyl alcohol to de-grease it, maybe check or adjust the height setting. Then use 'Restart' to get going again.

If the first layer object outline has been laid down successfully, the printer next fills in with diagonal lines, hatching across the whole area. The Z axis moves by the layer height, 0.3mm in this case, and a second outline is extruded on top of the first. After that, the printer fills in again with diagonal hatching, in the other direction, at 90 degrees to the first layer.

The process continues until the object has been built.

Using the printer, What could possibly go wrong?

There are a few things to look out for, once the print is under way.

  • If the object is quite small, there will be little area holding it to the build plate. As it cools, it might contract enough to lose adhesion, and move. If there's a blob of plastic on one layer due to misoperation of the extruder nozzle, the nozzle could hit the blob and cause the object to move. Once it's moved, none of the layers line up and the print has to be abandoned.
  • If the object has a flat rectangular base, the bottom may warp as it cools. This can be avoided by adding a 'raft', which is a larger size for the first layer. The raft must be cut off after printing is complete.
  • If the object has an overhang, such as the handle on a teacup, there's nothing beneath the overhang for layers to build upon. This kind of shape requires supporting structures to be printed. The supports must be cut off after printing is complete.

Slic3r has options to create rafts and supports when needed, but these must be selected before 'slicing' the .stl file. Sometimes it's necessary to adjust the dimensions of the support settings, if the first try turns out not to be satisfactory.

As a rule of thumb, an object doesn't need support if the edges are less than 45 degrees from the vertical.

There's a lot of help and information at http://reprap.org/wiki. The zombie printer is not a RepRap, but it's a close relation and shares the same software and same electronics as many RepRaps. If you can't get the results you want from the Zombie, then check out reprap.org, or ask IanB, or ask on our own mailing list.

Using the printer, Heated bed or not

Originally, 3D printers always laid molten filament onto a base heated to 60 degrees. The base was generally glass. Some printers continue this practice, but others have found alternative surfaces which are used at room temperature. It's all about getting good adhesion of the first layer.

I use blue decorator's tape on glass, and that works well enough for me. The tape has to be replaced after about 50 prints, or if it sticks so well that it becomes damaged when lifting off the object.

If you want to use a heated bed, turn over the glass plate so that the plain glass is at the top. This should not affect the Z-zero-height setting. Wipe the glass clean using isopropyl alcohol. Change your slic3r setting to heat the bed to 60 degrees, and make a new gcode file.

Some people get good results with heated glass, by adding 'purple stick' adhesive to the glass surface. I don't know where to purchase that glue, so I've never tried it. Someone else told me he uses hair spray on heated glass. I tried hair gel and that seemed to work fairly well. But in the end I settled on blue decorator's tape on cold glass. Your mileage may vary.

How to load the filament

The printer has a spool of 1.75mm white PLA filament at the back. For simplicity's sake, don't change it. But if you must, or if it snaps or otherwise gets tangled up, here's what to do.

Remove any existing filament from the extrusion chamber. That's best done by heating it to 90 degrees C (g-code for that is M104 S90 ). Remove the outer tube at the top of the extrusion chamber by pressing down on the black collar where the tube enters the chamber, and pulling back on the tube. The black collar holds the tube in place, and pressing down the collar releases it.

Don't forget to turn off the extrusion heater with the command M104 S0.

At the back of the printer, remove filament from the extruder motor assembly. The tube is released in the same way, pressing down on the black collar. Cut off the filament either above or below the motor assembly and pull it forward or back to be clear of the motor assembly.

Take the spool of filament to be loaded, find the end and make sure it is not threaded underneath another turn of filament on the spool. It needs to be able to roll off easily once loaded. Pass the end into the bottom of the extruder motor assembly, push past the motor shaft and get the filament to poke out of the top of the extruder motor assembly. This may take a few attempts and a little cursing. It might help to reduce the strength of the pressure wheel, using a 2mm hex key.

Pull through about 500mm of filament, then pass that filament through the flexible tube. Fit the tube into the top of the extruder motor assembly, pushing it fully home while the black collar is pressed down. Fit the tube into the extrusion chamber, you may need to cut the filament shorter if it won't allow the tube to be properly fitted.

Finally, you need to heat the extruder to 190 degrees C and run filament into the chamber (using Pronterface' 'Extrude' control) until it builds up enough pressure to come out of the nozzle.

Settings for slic3r

Slic3r can be configured to suit any 3D printer, but you have to know enough about the printer to do it. There are three sections for slic3r parameters. Here's a list of the main ones which should give good results.

Feel free to experiment with settings. Save your settings under a separate name so that the 'default' or 'zombie' settings are still available to other users.

Print Settings

Layer height: 0.3
First layer height: 0.3
Vertical Perimeters: 3
Horizontal solid layers Top: 3 Bottom: 3
Extra perimeters if needed: Y
Avoid crossing perimeters: N
Detect thin walls: Y
Detect bridging perimeters: N
Infill density: 20%
Fill pattern: Rectilinear
Top/bottom fill: Rectilinear
Infill every: 1 layer
Skirt loops: 3
Distance: 6
Height : 1
Min ex length: 0
Brim: 0
Generate support N ( Y if you need it )
Raft layers 0 ( 1 if you need it )
Pattern spacing: ( guess and repeat )
Pattern angle: ( guess and repeat )
Speed for perimeters: 60
Speed for infill: 60
Multiple extruders: 1 for everything
Extrusion width: 0 for default ( all )

Filament Settings

Diameter: 1.75
Multiplier: 1
Temperature: 190 ( all layers )
Bed: 0 ( or 60 for heated bed )
Cooling: (we have no cooling fan)

Printer Settings

Bed shape: Rectangular
Size: X= 220 Y= 150
Origin: X= 0 Y= 0
Z offset: 0
Extruders: 1
G-code flavor: RepRap(M/S/R)
Custom G-code Start:
:G28 ; home all axes
:G1 Z5 F3000  ; lift nozzle clear
:G1 X10 Y4 F3000 ; go to corner
:G92 X0 Y0  ; set new origin here
Custom G-code End:
:M104 S0 ; nozzle heat off
:M140 S0 ; heated bed off
:M84     ; disable motors
Extruder 1 Nozzle: 0.4
Offset:

X= 0 Y= 0

Retract length: 1
Lift Z: 0
Speed: 30
Retract on layer change: Y