The Zombie Printer

Jump to navigation Jump to 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.

Printer control

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 control the extruder motor when loading new filament, and control the build plate table when checking the nozzle height. The zombie printer typically uses Pronterface for manual control and for 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 your computer. This will be either your own laptop with slic3r and Pronterface on it, or plug the cable into the white USB cable socket labelled 'Zombie'. It's an extension cable connected to the kitchen corner desktop computer. Start running the application Pronterface.

Click 'Connect'. Sometimes it doesn't connect and you have to try again. Sometimes it gives an error message. Whatever happens, if the 'Connect' button label changes to read 'Disconnect', then it has successfully connected.

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, so it's safe to move across the table.
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
G1 Z0 F1000 ; Move the Z axis to zero height

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.

Height adjustment

If necessary, the build plate height can be adjusted, to level it up and to set it exactly to the nozzle position corresponding to Z=0.

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 (more than 0.1mm). The build plate needs to be level within 0.1mm, so move the wing nuts with care.

The procedure for fine adjustment of the build plate involves positioning the nozzle 5mm above each of the four adjustment screws in turn, then moving the head to a Z-height of 0.0 and seeing how tightly or loosely a single strip of paper is trapped by the nozzle.

We have custom buttons on Pronterface to help with that process. They are ZA to ZD, representing the four adjustment positions, and 'Test height' which brings the nozzle down gently.

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. A small adjustment to the plate height above one screw position should have a minimal effect on the other three positions.

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.

Load File and 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).

Heated build plate

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. We don't generally need a heated plate when printing on to blue tape or on to PEI sheet.

First layer

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.

You might see extruded plastic accumulating on the nozzle instead of sticking to the blue tape. If you are quick, you can help the plastic onto the blue surface with the blade of a knife. Once it starts sticking to the tape, it generally continues OK.

Or you may find it helpful to put a little upward or downward pressure on the edge of the build plate, effectively changing the distance from nozzle to surface by a tiny amount. This shouldn't be needed, but you are dealing with a zombie, remember.

First layer fails

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.

First layer succeeds

Once 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 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, 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.

A new variant of that is PEI sheet. I'm experimenting with it and will fit it to the Zombie printer if it works better than blue masking tape.

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. Instead of changing your slic3r setting to heat the bed to 60 degrees, I recommend that you simply set the bed temperature to 60 deg C as a manual operation in Pronterface before even loading the file you will print from. Then the bed will be up to temperature by the time you press the 'Print' button.

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. The filament should release cleanly from the extrusion chamber at 90 deg C.

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

At the rear 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 the spool easily. Pass the end of the filament 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 other end of the tube into the extrusion chamber with about 25mm of filament protruding beyond the end of the tube, to pass beyond the press-fit collar, into the body of the brass nozzle.

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 flow 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

X= 0 Y= 0

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

Andy's notes

Seems to be an CTC Bizer, originally dual head.
Theoretical build size 225 × 145 × 155 mm

Alex Gibson from Edumaker did great work getting some of the worst sins tidied up and running for us, thank you Alex.

Board is RAMPS v1.4 with a Arduino Mega.


Note that the extrude is on E0. 'Cama Caliente' tr: 'Hot Bed'