Does this project spark your interest?

Become a member to follow this project and don't miss any updates

Theta Printer

A 3D printer with 4 extruders that can move independently and simultaneously

7.8k 11 182 90

This project was created on 04/15/2014 and last updated 25 days ago.

The Theta Printer is a platform for printing with as many different materials as possible. Whether it be different colors of plastic, wood, carbon fiber, chocolate, or anything else you can make an extruder for. Each extruder moves simultaneously and independently, allowing the printer to lay down 4 different materials onto the same object at the same time.

With most 3D printers, adding more extruders makes the machine slower and reduces the build volume. The Theta Printer overcomes this by using polar coordinates. A polar printer works kind of like an old fashioned record player. Your objects are printed onto a platter which spins. The advantage is that you can have many print heads. Each extruder is on the end of an arm which swings in and out. The spinning platter is called the ϴ ("theta") axis and the swinging arm is called the R axis. Together these replace the normal X and Y coordinates you're used to. A polar printer has a couple of advantages over normal cartesian 3D printers.

  1. Less moving mass means better acceleration
  2. Finer resolution, especially near the center
  3. Multiple toolheads without reducing build area

The spinning platform makes this machine ideal for integrating a 3D scanner. In addition, you can easily swap out an extruder for a mill or any other tool, making the Theta Printer the perfect all-in-one fabrication machine.


This machine is completely open source, under whatever license the RepRap project uses.

The complete parts list is on GitHub.

  • 48 × 3D Printed Parts
  • 20 × Lasercut Plywood Parts
  • 5 × Lasercut Acrylic Gears
  • 6 × Meters of Threaded Rod M8x1.25
  • 3 × Meters of Smooth Rod M8 Chrome Plated
  • 28 × Skate Bearings 608ZZ
  • 8 × Linear Bearings LM8UU
  • 329 × Nuts M3, M4, M8
  • 227 × Bolts M3, M4, M8
  • 1 × Timing Belt GT2 1210.00 mm

See all components

Project logs
  • Quad Extrusion

    a month ago • 0 comments

    I have been working on adding support for 4 extruders to Marlin, using [dob71]'s dual extrusion code as an example. Its on GitHub under the bipolar-quad branch. I've double checked everything and it compiles, but havn't had a chance to test it yet since I've been working on the semifinals video, which is uploading as we speak. Really getting tired of my own voice.

    In other news, I was getting terrible adhesion to the print surface. The problem seemed to be the tape I was using. It was shinier and smoother than regular blue masking tape. I ran to home depot and got some Scotch "Classic" painter's tape and things are sticking much better now.

    The aluminium platter may have been a bad idea. We chose it because we wanted something light, rigid, and thermally conductive. But in reality it just acts like a giant heat sink, cooling the part rapidly unless you have the heater turned on. Also it doesn't help that the heater is being run at half power (12V from the ATX instead of 24V). It reaches steady state somewhere around 60C, which is good enough for PLA but not great for ABS.

    Here are the latest test prints. Its having a lot of trouble with more complicated objects because the arm motors keep skipping steps. Don't know whats up with that.

  • Calibration

    a month ago • 0 comments

    Now that I know that the firmware works, its time to dial in the machine. As you can see in the test prints from the last log, the extruders are horribly out of alignment with each other.

    I wrote a G-Code script to generate a test pattern for calibration. It has each extruder draw a large circle and two arcs. The circle is for calibrating the position of the endstops and the arcs are for calibrating the position of each extruder along the arm. The distance from the pivot point to the nozzle needs to be exactly 160 mm. Ideally, the patterns from each extruder should be directly on top of each other and the arcs should intersect at exactly the center of the platter. Here is the code:

    G94			; Set to native coordinates
    G28 Z0			; Home Z axis
    G1 Z10 F60		; and move up 10 mm
    ; Home each extruder
    G28 Y0
    G28 Y0
    ; Print test pattern with first extruder
    G92 X0 E0
    G1 E10 F100		; Prime extruder
    G1 X5
    G1 Y35 F1000
    G1 Z0 F60		; Move down to surface
    G92 X0 E0
    ; r = 2 * 160 mm * sin( 35 deg / 2) = 96.226 mm
    ; C = 2 * pi * r = 604.605 mm
    ; A_nozzle = pi * (0.35/2)^2 = 0.0962 mm^2
    ; V = A * C = 58.170 mm^3
    ; A_filament = pi * (3.0/2)^2 = 7.069 mm^2
    ; l = V / A = 8.23 mm
    G1 X180 E4.11 F1000	; Draw semicircle
    G92 E0
    ; 1/8 * full circle = 1.03 mm
    G1 Y40
    G1 Y-5 E1.03		; Draw arc
    G1 Y35
    G92 E0
    G1 X360 E4.11		; Finish circle
    G92 E0
    G1 Y40
    G1 Y-5 E1.03		; Draw second arc
    G1 Z1.5 F60		; Lift
    G1 Y45 F1000		; Retract arm
    ; Second Extruder
    T1 F1000
    G92 E0
    G1 E10 F100
    G1 Y35 F1000
    G1 Z0.2 F60
    G92 X0 E0
    G1 X180 E4.11 F1000
    G92 E0
    G1 Y40
    G1 Y-5 E1.03		; Draw arc
    G1 Y35
    G92 E0
    G1 X360 E4.11
    G92 E0
    G1 Y40
    G1 Y-5 E1.03
    G1 Z10 F60
    G1 Y45 F1000
    G93			; Switch back to cartesian emulation
    M18			; Disable motors
    And here is the resulting pattern:

    Its hard to tell from the picture, but the circles are way off and the arcs are lined up pretty well. I adjusted the position of the endstops in firmware by measuring the radius of each circle with calipers and comparing it with the expected value (96.226mm).

    Another problem is that the extruders ooze a lot when idle. The ooze gets carried over and stuck onto the print and it eventually builds up into big globs of plastic that the extruders crash into, causing them to skip steps. I tied some string so that the nozzles wipe across it when the arms retract, knocking off the excess plastic.

    I'm having a lot of trouble getting the nozzles level with each other and the build surface. Its like their vertical position keeps changing.

    Here's the latest test squares along with a couple failed tries at the Jolly Wrencher, which I put up on Thingiverse.

  • Captains Log, Stardate 56925.25

    a month ago • 0 comments

    Dual extrusion is working! Through the magic of Git, I have managed to combine a firmware that handles multiple extruders on independent axes with my firmware that does the bipolar conversion. Amazingly, the thing compiles and runs. I reworked the way Marlin stores the current position in both coordinate systems internally. The way it was doing it before was confusing me and causing bugs while homeing. Also had to add support for multiple sets of endstops per axis. For more details check the github

    First dual extrusion test prints are promising, but clearly a lot of work still needs to be done. Definitely need some way to clean the extruders when switching between them. Having flashbacks about dealing with oozebane in skeinforge. No cleanup was done on these aside from removing whatever excess I could with my fingers.

View all 8 project logs


Josh Wright wrote 2 months ago null point

Would love to start making my own!

Are you sure? [yes] / [no]

Guille wrote 2 months ago null point

@Tachyon, you mean CLV, constant linear velocity? A regular wheel is CAV.

Are you sure? [yes] / [no]

Tachyon wrote 2 months ago null point

Yeah, CLV is what I meant.
And I do still see this as a big issue with this design. Without CLV, print resolution will be inconsistent across the radius of the print platform. Getting progressively worse as you move out from the centre of the platform.

Are you sure? [yes] / [no]

Sarah Wittman wrote 6 months ago null point

Just to verify, you use this modified marlin firmware, and then use a standard slicing software?

I was digging around in Cura, and I couldn't find a decent way to specify tool changes. Slic3r has the custom toolchange.gcode thing, but so far it looks like Cura only lets you speficy the offset between each head.

I might eventually go back and build one of these (with all credit to you, of course), simply because I'd never have to change my filament ever again. I suppose I could do this on a standard cartesian system, but it would feel so unwieldy to me.

How do you keep all of your printheads level to each other?

Are you sure? [yes] / [no]

Tyler Anderson wrote 6 months ago null point

Correct. The goal is to make it compatible with as much of the regular toolchain as possible. I made a log entry about the current state of the software.

Its nice to know other people are interested in this, but you might want to hold off on building your own until version 2 or 3. There are A LOT of kinks to be worked out. Leveling is one of them. You do it by adjusting nuts on the threaded rods, but is all trial and error. Getting two extruders and the bed level with each other is hard. Doing it with all 4 is going to be a colossal pain in the ass. In the future I'm definitely going to look into some kind of auto-leveling system.

Are you sure? [yes] / [no]

Sarah Wittman wrote 6 months ago null point

This is really cool.

Are you sure? [yes] / [no]

RodolpheH wrote 6 months ago null point

I'm wondering what software you're using ? I look forward to get more informations about your 3D printer, it looks really gorgeous!

Are you sure? [yes] / [no]

Tyler Anderson wrote 6 months ago null point

Modified Marlin for the firmware and regular old Slic3r/Printrun for everything else. Check out the log entry.

Are you sure? [yes] / [no]

Eric Evenchick wrote 6 months ago null point

The dual extrusion video is an interesting one to watch. Using polar coordinates is definitely a novel solution. I'm trying to think of what the disadvantages of it would be, but the ability to use two extruders on the same part simultaneously is a pretty huge plus.

Are you sure? [yes] / [no]

Tachyon wrote 6 months ago null point

The main disadvantage that I see is that your printer's resolution would be inconsistent across the print area. The print resolution would range from something approaching infinity at the centre of the print circle, to some approaching really bad at the outer diameter of the print circle.
One way around this would be to use some sort of CAV (constant angular velocity) drive system for the print table such that the print head traverses the same distance per unit of time at all points in the print circle's diameter.

Are you sure? [yes] / [no]

Tachyon wrote 2 months ago null point

The other issue I see is that while this would be great for printing things like gears, wheels, vases, and other round shapes, it would likely have issues with more square or rectangular shapes.
Imagine printing a lego brick on this, or another angular shape with a filled centre. Imagine the printhead paths and how this printer would move over those paths, especially without CLV.
For one thing, I imagine you'd have to print non round objects offset from the centre of the print platform.

Personally, I think I'd want one printer like this and one that uses more standard cartesian printing. One would be awesome for round things like gears and wheels. The other would be awesome for angular things with straight edges.

Are you sure? [yes] / [no]

Similar projects