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

Similar projects worth following
This project is submitted for

This project was created on 04/15/2014 and last updated a year 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

  • Quad Extrusion

    09/29/2014 at 06:28 5 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

    09/27/2014 at 09:37 1 comment

    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

    09/25/2014 at 08:27 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

Enjoy this project?

Films4You wrote 06/02/2015 at 21:18 point

Are you sure? yes | no

changdy009 wrote 01/29/2015 at 09:11 point

Dear Tyler Anderson, Can you upload a video about your 3D printer, when it is working?

Are you sure? yes | no


[this comment has been deleted]

Tyler Anderson wrote 11/27/2014 at 07:56 point
Still going. Just got a job at MatterHackers and they are excited about this machine, so thats good news for the future.

Since the Decapede never came to fruition, I am using a breadboard to expand a standard RAMPS to handle the extra stuff. The thing is a total rats nest. The breadboard has 5 stepper drivers, 2 voltage dividers for reading thermistors, and 2 MOSFETs for driving heaters. This is all connected to AUX-3 and 4 on the RAMPS. The circuitry is copied from the RAMPS 1.4 schematics ( ). Here are the pin assignments ( ) and their locations on the board ( )

I wouldn't recommend this as your first printer unless you really know what you're doing. This machine works as a proof of concept, but there are A LOT of rough edges. 3D printers are troublesome machines to begin with, and with this one that is only compounded.

Are you sure? yes | no


[this comment has been deleted]

Tyler Anderson wrote 11/29/2014 at 00:45 point
I would love to have other people building these and contributing. Just wanted to make sure you know what your getting into. I'll be glad to help in any way I can.

The main issue right now is that the bed refuses to stay level. It wobbles around as it spins. I'm planning to completely redesign the middle section to eliminate this. Calibrating the machine is also frustrating, but it will be greatly simplified for you since you only plan on doing 1 extruder at first. There are a ton of other issues that I have documented in ( )

I highly recommend that you use 1.75 mm bowden extruders ( ) instead of the 3.00 mm direct drive extruders I have. This will greatly reduce the moving mass and make things much less crowded.

Changing the movement to be truly radial is something that I was planning to do for version 2, mainly because I saw the R-360 ( ) and slapped myself in the forehead.

As for reading material, have a look at the RepRap Magazine ( )

Are you sure? yes | no

zhangguodong wrote 10/31/2014 at 06:07 point
How to print 200 * 200mm objects (using a single extrusion)?

Are you sure? yes | no

zhangguodong wrote 10/31/2014 at 06:00 point
I have a question:
Whether the object can be placed in the center of the bed single extrusion printing?

Are you sure? yes | no

zhangguodong wrote 10/31/2014 at 06:02 point
Can single extrusion print objects placed in the center of the bed?

Are you sure? yes | no

Tyler Anderson wrote 10/31/2014 at 06:39 point
Yes, but the speed decreases the closer you get to the center. Its faster to print objects away from the center if possible.

Are you sure? yes | no

zhangguodong wrote 10/31/2014 at 10:58 point
I have 5 questions:
1、Y homing centers in the bed?
2、Single extrusion using G93?
3、Its faster to print objects away from the center if possible?(Automatically adjusting the speed of the extruder?)
4、Set slic3r Print Center (0,0,0)?
5、How to adjust the number of steps X Y axis?

Are you sure? yes | no

Tyler Anderson wrote 11/01/2014 at 05:22 point
It looks like you have some interesting questions, but they are kind of getting lost in translation. I'll try my best to answer them.

1. Calibrating the Y axis ( you could also call it the r axis or θ₂ axis) is done by setting Y_MAX_POS in Configuration.h. It needs to be done separately for each extruder. The value is determined by running the calibration script I posted in the project logs. 50° is a good starting point. Using calipers, measure the diameter of the circle drawn by each extruder. Divide that by 2 to get the radius and then convert it to degrees using trigonometry. Find the difference between what you got and what it is supposed to be (35°) then adjust Y_MAX_POS by that amount.

2. Single extrusion works in both native mode (G94) and cartesian emulation mode (G93).

3. The speed is not adjusted automatically. It is just a natural effect of using the spinning platter.

4. Go to File > Preferences and make sure you are in expert mode. Under Printer Settings / General, set the bed size to 320x320 and the print center to 0x0.

5. Set DEFAULT_AXIS_STEPS_PER_UNIT in Configuration.h.

Are you sure? yes | no

zhangguodong wrote 11/01/2014 at 12:46 point
Thank you to answer!
How accurate calibration steps XY axis?

Are you sure? yes | no

Tyler Anderson wrote 11/01/2014 at 22:03 point
The calculations for determining the steps per unit are shown in Configuration.h ( ).

The gear ratios were chosen so that the θ₁ would match the accuracy of a normal RepRap near the perimeter. As you move closer to the center, the accuracy increases to infinity. This is also a natural effect of using the spinning platter.

The θ₂ axis also matches the accuracy of a normal RepRap.

Are you sure? yes | no

zhangguodong wrote 11/02/2014 at 05:32 point
Use gear for: GT2 18 teeth?

Are you sure? yes | no

zhangguodong wrote 11/02/2014 at 15:20 point
Do you want “R、 C、 A、V、 A_filament、 L” setting in the firmware?

Are you sure? yes | no

zhangguodong wrote 11/03/2014 at 12:50 point
I'm sorry!
I do not know where to set the "R, C, A, V, A_filament, L"

Are you sure? yes | no

Josh Wright wrote 08/29/2014 at 00:41 point
Would love to start making my own!

Are you sure? yes | no

Guille wrote 08/25/2014 at 22:38 point
@Tachyon, you mean CLV, constant linear velocity? A regular wheel is CAV.

Are you sure? yes | no

Tachyon wrote 08/29/2014 at 15:14 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 04/18/2014 at 17:03 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 04/19/2014 at 03:53 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 04/15/2014 at 17:23 point
This is really cool.

Are you sure? yes | no

RodolpheH wrote 04/15/2014 at 16:22 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 04/19/2014 at 03:55 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 04/15/2014 at 15:12 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 05/01/2014 at 11:38 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 08/29/2014 at 15:22 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