Tag Archives: Ashtar K 3D Printer

3D Printer: Ashtar K IDEX (Independent Dual Extrusion)

: verified design


  • 2021/07/30: design printed and mounted
  • 2021/01/19: improved 2nd X motor mount
  • 2021/01/15: removable/replaceable ooze prevention
  • 2021/01/14: Ashtar M (Moving Gantry – Draft) also with IDEX option now
  • 2021/01/13: ooze prevention at rest position added, mechanical conflict resolved
  • 2021/01/12: starting with a first draft, one mechanical conflict to be resolved


I have been pondering on a dual independent X axis upgrade or option for a while, but the other designs of the Ashtar Series I wanted to do first (Ashtar D and Ashtar M) those matured by now (2021/01), so I decided to get back to IDEX upgrade for Ashtar K:

For now I like to keep single 2020 V slot alu extrusion for the X beam where the X carriage rides, and route the 2nd belt above for the 2nd X carriage – and this was a quick solution as earlier version of Ashtar K had the belt routed above the alu profile so I just reused the old pieces again.

“Above routed belt” option with its pieces are weaker and possibly need enforcement improved the strength, so it’s a fast start – just took me 2 hours – but needs definitely some fine-tuning. Alternatively the 2nd belt could be routed at the back of the X carriages, but fastening the 2nd X motor would be challenging.

For now I use the same code base of Ashtar K and introduce IDEX = true flag, and enhance a few existing pieces in parts.scad and optionally add those new pieces when rendering printer-ak.scad.

As I progress with this option or upgrade I update this blog-post.


Issues to Resolve

  • X carriage #1 belt mount conflicts mechanical with belt 2: redesign xcarriage_beltmount_2020 piece, make it shorted in Z or fasten it inside V module: resolved, shifted 2nd belt a bit Y off, and shorten xcarriage_beltmount_2020(idex=true) by 2mm.
  • “Above routed belt” pieces are weaker: enforcement required, resolved: piece strengthened (2021/01/19):
    • xcarriage_short_hmount_motor_2020 which is the base piece which routes the belt within the 2020, with idex=true option provides idler holder on top
    • X motor #2 is mounted on a x-mirrored version of xcarriage_hmount_motor(20,"left",idex=true) but definitely needs reinforcement, added ooze prevention in case of idex set
  • Nozzle drip prevention:
    • using a piece of sheet metal which the nozzle moves over when in rest position left or right, first attempt done (see below)
    • and/or use purge box with brush to clean nozzle after and before use
    • make extending “nose” detachable/replaceable as it’s expected to break or overheat otherwise entire X motors mount needs replacement, resolved
      • xcarriage_nose-idex-left and xcarriage_nose-idex-right with 10mm wide sheet metal insert
    • how dealing with long resting hot nozzle?
      • drop temperature by 5-10°C in rest position, and heat up when in use again
      • heat creep possible weakening extending printed nose – heat insulation required attaching sheet metal


Ashtar M IDEX

And since Ashtar M (Prusa i3 Moving Gantry – Draft) shares much of the Ashtar K design it took me a few mins to add the IDEX upgrade option as well:


3D Printer: Ashtar K History 2018-2020

A brief history of “Ashtar K“, my first designed 3D printer I actually built – documented also for my own sake:

AluX: Prusa i3 Clone

It started with AluX (abbreviation of ALU-extrusion eXtendable) early June 2018, which used CTC i3 Pro B / Prusa i3 Clone pieces as the X carriage, X motor mount and X idler all in STL format. I coded the frame parametric using 2040 alu extrusions/profiles and using smooth rods as rails:

I realized then quickly I need to design and code my own pieces, every single piece I need to control and make it parametric if it makes sense, and not rely on existing STL files, as editing meshes of the STL seemed a waste of time but rather design the piece in OpenSCAD right away and derive new variants if necessary from the geometry itself.

Ashtar X & W Series: Riding on Smooth Rods

Mid June 2018, AluX became Ashtar X (abbreviated as AX), and Ashtar W were using 2040 alu extrusions but differently oriented at the base, still using smooth rods as rails:

At this point I got sufficient experience of the parametric approach and it was obvious to use the frame as rails.

Ashtar T Series: Riding Alu Profiles

Beginning of July 2018, with the Ashtar T series I began to use the frame as rails itself, utilizing 2040 alu extrusions, it also started with the parametric V module (due its shape) composed by 2x V-plates, using 3 wheels which ride on the alu extrusion:

With the parametric V modules the X, Y and Z frame beams became rails as well, simplifying the overall construction compared to earlier designs:

The dual Z motors still residing in the front for sake of accessibility, but then I realized I want them in the back and keep the front dedicated to the printhead.

Ashtar K Series: Riding Alu Profiles, Uni-Length Beams

Mid of July 2018 I started the Ashtar K series, I decided to use 2020 alu profiles and focused on the single length of alu profiles, uni-length so I could reuse the beams for other future designs and since all the designs were parametric, it was easy to attain to find an optimum of single length beams and a common build-plate or build-volume:

The 9 beams design turned out too weak when I actually built the printer, so I added two beams back on left and right, and lift up the 9 beam design.

Eventually I decided to use 500mm alu 2020 profiles to achieve ~380x300x360 build volume; Ashtar K #1 used 400×300 build-plate, and Ashtar K #2 300×300 build-plate. Ashtar K #1 was functional in August 2018, and since then became my working horses together with Ashtar K #2, reliably printing.

See more at Ashtar K project page of the current state.

Next Steps

Ashtar Series Genealogy (2018-2020)

After the Ashtar K I did the Ashtar C Core XY cubic frame also with 2020 alu profiles. Late 2020 I started to design Ashtar M, a derivative of Ashtar K but with a moving gantry and static bed, and Ashtar D with Classic XY alike Ashtar C; and also a draft of a parametric enclosure as well to be adaptable to all of my 3D printer designs.

That’s it.

3D Printing: Ashtar K Mod: X-Motor Mount / Belt Repositioned


For the past 9 months (2019/08) I printed with two Ashtar K printers, where the X belt was routed above the 2020 extrusion:


  • easy access (X motor & X carriage belt mount)
  • stabilizes the X carriage vertically


  • bending of the mount

And the bending of the mount became an issue more and more, as I kept tighten the belt and bend the mount more; time to redesign the part.

Update 2021/01/19: I resurrected the piece for the Ashtar K/M IDEX and improved the strength for its use-case.

New Option: Routing Belt inside groove of 2020 Profile

First I used T shaped 2020 aluminium profiles and the nylon wheels did have little surface to ride, hence, I wanted the belt also function as vertical stabilizing. Once I replaced the X beam with V shaped 2020 profile, and V shaped wheel in the V modules riding on the profiles, I thought to reposition the belt into the groove of the V 2020 profile, and so reposition the X motor mount. So I merged the horizontal 2020 mount with the motor mount in one, plus adjustable Z stopper:

Screenshot from 2019-08-22 07-32-01

which gave the desired stiffness of the part I sought.


  • remains stiff
  • easy to mount & accessible (belt, Z stop screw)


  • larger part, 2020 mount and motor mount combined

X Carriage Beltmount

In order to route the belt in the groove of the 2020 profile for the X carriage itself, a rather delicate piece was required, mounted at the backside of the X carriage V-module; I use a M3 to fasten the belts:


Part names with variables:

  • xcarriage_short_hmount_motor_2020(zstop=true): main motor mount with 2020 profile mount combined
  • xcarriage_beltmount_2020(th=32.7): new belt mount on the X carriage, th default at 32.7mm, but one needs to measure the total thickness of the V modules acting as X carriage
  • pulley_holder_2020(): right side of the belt routing

That’s it.

3D Printing: Ashtar K #2 with Diamond Hotend (Multi-Color) with RAMPS 1.4


  • 2019/04/17: more photos of examples incl. macro closeups
  • 2019/04/15: 16 palette mixed colors from cyan, yellow and glowing magenta (CMY) photo added, best result of mixing colors
  • 2019/04/12: added Firmware Retraction changes in Marlin, updated Trinary Color Palette
  • 2019/04/10: initial post

I print with Ashtar K #1 and #2 since a couple of months and since about 4 months with Ashtar C #1 successfully, and thought to convert Ashtar K #2 (300×300 build-plate) with a Diamond Hotend with 3 colors/extruders, renamed to “Ashtar K E3“:


Producing stuff like this:



Cyan, Yellow, Glowing Magenta, Cyan Z-transition

Firmware (Marlin) & Hardware (RAMPS 1.4)

In the Marlin following settings are required:


#define EXTRUDERS 1

Counter intuitively using 3 extruders with single nozzle in mixing operations, keep EXTRUDERS 1 and do not enable SINGLENOZZLE but leave is disabled.


 * "Mixing Extruder"
 *   - Adds a new code, M165, to set the current mix factors.
 *   - Extends the stepping routines to move multiple steppers in proportion to the mix.
 *   - Optional support for Repetier Firmware M163, M164, and virtual extruder.
 *   - This implementation supports only a single extruder.
 *   - Enable DIRECT_MIXING_IN_G1 for Pia Taubert's reference implementation
  #define MIXING_STEPPERS 3        // Number of steppers in your mixing extruder
  #define MIXING_VIRTUAL_TOOLS 32  // Use the Virtual Tool method with M163 and M164
  #define DIRECT_MIXING_IN_G1    // Allow ABCDHI mix factors in G1 movement commands

Use E0 for Extruder #1, E1 for Extruder #2, and use an Stepper Extender for Extruder #3:




#define MIN_AUTORETRACT 0.1 // When auto-retract is on, convert E moves of this length and over
#define MAX_AUTORETRACT 10.0 // Upper limit for auto-retract conversion
#define RETRACT_LENGTH 3 // Default retract length (positive mm)
#define RETRACT_LENGTH_SWAP 13 // Default swap retract length (positive mm), for extruder change
#define RETRACT_FEEDRATE 45 // Default feedrate for retracting (mm/s)
#define RETRACT_ZLIFT 0 // Default retract Z-lift
#define RETRACT_RECOVER_LENGTH 0 // Default additional recover length (mm, added to retract length when recovering)
#define RETRACT_RECOVER_LENGTH_SWAP 0 // Default additional swap recover length (mm, added to retract length when recovering from extruder change)
#define RETRACT_RECOVER_FEEDRATE 8 // Default feedrate for recovering from retraction (mm/s)
#define RETRACT_RECOVER_FEEDRATE_SWAP 8 // Default feedrate for recovering from swap retraction (mm/s)


Add following lines below E1_CS_PIN:

#define E2_STEP_PIN 58
#define E2_DIR_PIN 57
#define E2_ENABLE_PIN 59
#define E2_CS_PIN -1

In case the Extruder #3 (E2) runs reverse, invert it in Configuration.h:

#define INVERT_E2_DIR true

Mixed Colors Prints

Two ways to print mixed colors:

  • M163/M164: define mixing ratio palette and define a virtual tool per mixing ratio which can be used as “T<n>” in Gcode later
  • M165: define mixing ratio right away

Virtual Tools Color Palette

Within ~/.config/print3r/printer/ashtar-k-2-e3.ini I added in start_gcode different palettes:

Trinary Palette

A general palette of 19 mixed colors using 3 colors defined in Gcode:

M163 S0 P1 
M163 S1 P0 
M163 S2 P0 
M164 S0

M163 S0 P0 
M163 S1 P1 
M163 S2 P0
M164 S1

M163 S0 P0 
M163 S1 P0 
M163 S2 P1
M164 S2

M163 S0 P1 
M163 S1 P1 
M163 S2 P0
M164 S3

M163 S0 P0 
M163 S1 P1 
M163 S2 P1
M164 S4

M163 S0 P1 
M163 S1 P0 
M163 S2 P1
M164 S5

M163 S0 P1 
M163 S1 P1 
M163 S2 P1
M164 S6

M163 S0 P2 
M163 S1 P1 
M163 S2 P0
M164 S7

M163 S0 P2 
M163 S1 P0 
M163 S2 P1
M164 S8

M163 S0 P2 
M163 S1 P1 
M163 S2 P1
M164 S9

M163 S0 P1 
M163 S1 P2 
M163 S2 P0
M164 S10

M163 S0 P0 
M163 S1 P2 
M163 S2 P1
M164 S11

M163 S0 P1 
M163 S1 P2 
M163 S2 P1
M164 S12

M163 S0 P1 
M163 S1 P0 
M163 S2 P2
M164 S13

M163 S0 P0 
M163 S1 P1 
M163 S2 P2
M164 S14

M163 S0 P1 
M163 S1 P1 
M163 S2 P2
M164 S15

M163 S0 P2 
M163 S1 P2 
M163 S2 P1
M164 S16

M163 S0 P2 
M163 S1 P1 
M163 S2 P2
M164 S17

M163 S0 P1 
M163 S1 P2 
M163 S2 P2
M164 S18

After that, the virtual tools T0 – T18 are available, printing different mix ratios.

Full Saturated True Color (Hue) Palette

The following (source) defines 16 different mix ratios of common colors with Cyan, Yellow and Magenta:

; Cyan
M163 S0 P1
M163 S1 P0
M163 S2 P0
M164 S0

; Ocean
M163 S0 P5
M163 S1 P1
M163 S2 P0
M164 S1

; Blue
M163 S0 P1
M163 S1 P1
M163 S2 P0
M164 S2

; Violet
M163 S0 P1
M163 S1 P5
M163 S2 P0
M164 S3

; Magenta
M163 S0 P0
M163 S1 P1
M163 S2 P0
M164 S4

; Raspberry
M163 S0 P0
M163 S1 P5
M163 S2 P1
M164 S5

; Red
M163 S0 P0
M163 S1 P5
M163 S2 P1
M164 S6

; Orange
M163 S0 P0
M163 S1 P1
M163 S2 P1
M164 S7

; Yellow
M163 S0 P0
M163 S1 P0
M163 S2 P1
M164 S8

; Spring Green
M163 S0 P1
M163 S1 P0
M163 S2 P5
M164 S9

; Green
M163 S0 P1
M163 S1 P0
M163 S2 P1
M164 S10

; Turquoise
M163 S0 P5
M163 S1 P0
M163 S2 P1
M164 S11

; Cyan-Brown
M163 S0 P2
M163 S1 P1
M163 S2 P1
M164 S12

; Magenta-Brown
M163 S0 P1
M163 S1 P2
M163 S2 P1
M164 S13

; Yellow-Brown
M163 S0 P1
M163 S1 P1
M163 S2 P2
M164 S14

; Brown
M163 S0 P1
M163 S1 P1
M163 S2 P1
M164 S15

After that, the virtual tools T0 – T15 are available, printing different mix ratios.

I used following code to purge 30mm (10+10+10mm) filament from all 3 colors at once at the very beginning (start_gcode):

M165 A0.33 B0.33 C0.33  ; 1/3 for each filament
G92 E0
G1 E30 F100     ; extrude 30mm
G92 E0

Additionally, define the firmware retraction:

M207 F3000 S4 Z0.3   ; set firmware retraction 50mm/s 4mm, 0.3mm zhop
M209               ; use firmware retraction


For test purpose I have:

  • Extruder 1 (E0 or A): glowing magenta PLA
  • Extruder 2 (E1 or B): violett PLA
  • Extruder 3 (E2 or C): white PLA

As such I prepared 16x 20×20 plates with 1 layer height:

print3r --printer=ashtar-k-2-e3 --slicer=cura --random-placement --scad --multiply-part=16 --output=plates-16.gcode slice 'cube([20,20,0.2])'

which gave me plates-16.gcode which I edited and inserted the “16 colors palette” Gcode, and after each “WALL-INNER” lines I added T0, T1 etc. T15 to switch to another tool (mixing colors ratios) for each plate:

There is no purge block, but I wanted to see how fast the switch is possible. Some issues are once the mix changes the first 10-20mm extrusion may come out under-extruded.


16 mixed colors from 3 colors (Glowing Magenta, Violet, White)


16 mixed colors from 3 colors (Light Blue/Cyan, Yellow and Glowing Magenta)

With light-blue/cyan, yellow and glowing magenta gave decent results: the green turned out well, the orange as well, even the violet and darker blue came out well.

And finally some cubes with 2- and 3-color transitions in the Z axis:


where I used print3r directly, using --layer-gcode=... feature (I just added 2019/04/10):

2-color 2 phases: use variables a2 (fades 1..0), and b2(fades 0..1):

  • fade A->B: '--layer-gcode=M165 A${a2} B${b2}'
  • fade B->C: '--layer-gcode=M165 B${a2} C${b2}'
  • fade A->C: '--layer-gcode=M165 A${a2} C${b2}'


Violet to White, Glowing Magenta to White Z-transition

3-color 3 phases: use variables a3 (fades 1..0 first half), b3 (fades 0..1..0), and c3 (fades 0..1 for second half):

  • fade A->B->C: '--layer-gcode=M165 A${a3} B${b3} C${c3}'
  • fade A->C->B: '--layer-gcode=M165 A${a3} B${c3} C${b3}'


Glowing Magenta, White, Violet and Cyan, Yellow, Glowing Magenta Z-transition

3-color 4 phases: use variable a34 (1..0..0..1), b34 (fades 0..1..0..0) and c34 (fades 0..0..1..0)

  • fade A->B->C->A: '--layer-gcode=M165 A${a34} B${b34} C${c34}'
  • fade A->C->B->A: '--layer-gcode=M165 A${a34} B${c34} C${b34}'


Cyan, Yellow, Glowing Magenta, Cyan Z-transition


Cyan, Yellow, Magenta, Cyan Z-transition: Cyan, Green, Yellow, Orange, Pink/Magenta, Violet, Blue

Partial Mixing

20190410_200839At closer inspection, the Diamond Hotend doesn’t perfectly mix the filament:

  • left/back: white PLA
  • front/center: glowing magenta PLA
  • right/back: violet PLA


Now, let’s rotate the XYZ Hollow Cube around the Z axis:

In front with “X” the violet prominently comes soon, the “Y” (right-hand side) looks OK, whereas the back side the white/violet transition is not smooth, the same for the left-hand side.


Quickly after trying more complex and longer prints, I experienced filament jamming:


I chose Violet -> Magenta -> White Z-axis transition, and the jamming occured with the Magenta PLA about 5-6min after the start, not always the same height; I tried several things like feeding a minimum of 5% of each filament, but then lower the print temperature from 205C to 198C, and things worked:


LowRes-Minecraft and LowRes-LowPoly Easter Eggs (35mm height, 0% infill, no support)

I print with first layer (layer 0) 210C usually on cold bed, and dropping to 195C for the rest usually let the nozzle temperature sink below 190C, sometimes even 185C before reaching 195C again due the thermal mass of the Diamond Hotend, and below 190C risk of under extrusion is high (layer 2-3), therefore I now use 195-198C to limit that risk.

It’s recommended to increase printing temperature with Diamond Hotend to achieve better mixing of the filament, yet, it seems also increases the risk of clogging/jamming of filament as in my case. Although, I currently use an 40mm fan on top of the Diamond Hotend instead of 50mm fan – the heatsinks left/back and right/back are warm, whereas the center/front (with magenta) is cooler. So, I might use a bigger fan and see how things behave then.

That’s it.

3D Printing: Ashtar K Printer: Electronics


  • 2018/12/05: added MKS Gen L as alternative, for Ashtar C #1
  • 2018/11/25: added RAMPS 1.4 as alternative, for Ashtar K #2
  • 2018/08/28: initial version with CTC DIY I3 Kit

Sourcing Parts

The past months (2018/08) I began to use Aliexpress for ordering electronics – even prior going into 3d printing – and the past weeks my development cycles pretty much were depending on the 20-25 days delay until items arrived from China to Switzerland – and one develops some skill to anticipate what one would require as next – but some things only become known once you really tested parts thoroughly.

Anyway, the CTC DIY I3 Pro B (Geeetech DIY I3 Pro B clone) was still sold via Ebay (2018/08), at a price as low as EUR 80 incl. shipment, which is a true bargain.

Aliexpress (2018/08):

  • MKS Gen L mainboard (incl. drivers) with LCD (with dialer), 200×200 heatbed, end stops, cables: EUR 50
  • PSU 12V 240W: EUR 20
  • 5x Nema 17 45Nm stepper motors: EUR 35
  • Total: EUR 105 (without endstops and various cables to connect all together)

CTC DIY I3 Pro B Kit (2018/08):

  • Anet 1.0 mainboard, with 2 Lines LCD (4 buttons), 200×200 heatbed, end stop, cables, PSU 12V 240W, 5x Nema 17 45Nm stepper motors
  • Total EUR 80 (all cables included)

So I decided to get another CTC DIY to source the parts in one go, and likely upgrade later with individually sourced parts to have dual extruder motors (two color or material printing).

In 2018/11, when I started to build a second Ashtar K 38x30x33 #2 I checked Ebay with following prices:

Ebay (2018/11):

  • MKS Gen L: EUR 28
    • MKS Gen L mainboard: EUR 16
    • 5x A4988 drivers: EUR 6
    • RepRap Full Graphic LCD: EUR 11
  • RAMPS 1.4 with Arduino Mega, 5x A4988 drivers, Full Graphic LCD: EUR 28
  • 5x Nema 17 40-50Nm stepper motors with cables: EUR 26-35
  • PSU 12V 240W: EUR 20
  • Total EUR 74 – 83 (missing: endstops and various cables to connect all)

Burning Bootloader on Anet 1.0 Board

For now I use an “Anet V1.0” controller board (Atmel 1284P), as part of a “CTC DIY Kit” as mentioned, and it required some preparation:

  1. using Arduino Uno R3 (clone) and upload “Arduino ISP”
  2. attach Anet V1.0 board (detach all other cables) to Uno R3 bootloader-burning
  3. run “Burning Bootloader” with “Arduino as ISP” as writer
  4. downloading Marlin and edit main Configuration.h (not yet published) to match my specifications
  5. upload new firmware Marlin to “Anet V1.0” via USB upload

RAMPS 1.4 with RepRap Discount Full Graphic LCD

RAMPS 1.4 Schematic + PinoutFor the 2nd Ashtar K 3D Printer I used (2018/11) RAMPS 1.4 combo with Arduino Mega, which was easy to upload new firmware. RAMPS 1.4 is Open Hardware, the entire schematic and pinout is available or download diagram with pinout as one image (same as on the side) – but it’s also a hassle to plug correctly as the board plug descriptions are tiny or covered by parts so one has to consult documentation in details, and there many ways to do wrong (reverse or misalign plugs) and most of these can and do damage either the RAMPS 1.4 shield and/or the Arduino Mega beneath, including misaligning the endstops.


  • using C and NC on the endstop and the board (power connector on the left) above the 2x Z motor connectors: XMIN, XMAX, YMIN, XMAX, ZMIN, XMAX, each:
    • top (Signal) -> C
    • middle (Ground) -> NC
    • bottom (5V) -> empty

while waiting for proper endstops to arrive, I salvaged microswitches from a faulty computer mouse to work as endstops

Marlin Firmware Changes

  • Configuration.h:
  • Configuration_adv.h:
    • commented out #define MENU_HOLLOW_FRAME so selected item is inversed
  • pin_RAMPS.h:
    • see #if ENABLED(REPRAP_DISCOUNT_SMART_CONTROLLER) and the following #if ENABLED(CR10_STOCKDISPLAY) after the #else check BTN_EN1 and BTN_EN2 and reverse the pins (31 <-> 33) so clockwise dialing goes down (and not up).



  • Configuration.h:

As far I can tell the end-stops take DuPont females and pin order is the same as with RAMPS 1.4, but orientation is crucial – otherwise the GND and VCC is shorted.

The plan is to use this board for Ashtar C #1.


I update this post as I go along.

3D Printer Ashtar K

Status: fully functional and fine-tuned, two printers in use, my working horses

Ashtar K
Ashtar K IDEX – Draft


  • 2021/02/11: Multiple Switching Extrusion (MSE), Rotating Tilted Nozzle (RTN) and Penta Axis (PAX) Option added (drafts)
  • 2021/01/14: Option for IDEX (Independent Dual Extrusion), early draft (not yet tested)
  • 2019/09/02: Modification of routing belt within 2020 alu profile
  • 2019/03/04: Updated photos and removed outdated parts
  • 2018/12/10: Added Bowden extruder photos and BOM
  • 2018/11/15: 2nd build of “Ashtar K #2” also 380x330x300 with 500mm alu extrusions
  • 2018/10/31: Z axis modules assembly detailed photos.
  • 2018/10/28: More details on BOM (Bill of Materials): printed and non-printed parts
  • 2018/09/30: More details on Y carriage / bed, short video of mounting bed.
  • 2018/08/27: It’s alive – means it prints . . .
  • 2018/08/26: Partial functional, X, Y and Z motors and belts and threaded rods mounted with end stopper, board been flashed with Marlin 1.1.8
  • 2018/08/24: More photos about XZ frame bracket with integrated Z motor mount, Y belt mount and sliders
  • 2018/08/20: Short video testing X and Z axis with nylon wheel based carriages
  • 2018/08/15: Added photos of composing the frame (XZ + Y) and changing design slightly to add 2 more beams so XZ frame is more sturdy, early tests with sliders, as alternative with wheel based carriages
  • 2018/08/01: More details, extruder motor on the right side with belt idler mount, short video showing some details.
  • 2018/07/30: Updated images, more examples of prototyping V modules
  • 2018/07/21: Published with few drawings, short part list.


In summer 2018 I pondered on a parametric Prusa i3 3d printer designs, composed with 2020, 2040 aluminium extrusions / profile, hereby I document the development here.

The Ashtar W Series and Ashtar T Series are fully parametric, from 200mm^3 to 500mm^3 build volume, whereas this Ashtar K Series focuses on single beam length construction with 2020 alu extrusions.

Ashtar K #1 (right, white) and #2 (left, pink), both 380x300x330 build volune, but having different build plates

Parametric Designing

Unlike traditional CAD (Computed Aided Design) sketched constructions, a coded parametric design is actually textual coded a design, defining which parts depend on which, and align according some variables, which can be changed. In this case, the input is the building volume X, Y and Z, and all parts are calculated accordingly, using OpenSCAD as programming language.

Following notion has been introduced:

  • X, Y and Z are the starting point, the printable volume
  • IX, IY, and IZ are the inner dimension of the construction needed to make X, Y and Z build volume work, hence, IX, IY and IZ are greater than X, Y and Z
  • all constructions depends on IX, IY and IZ
  • XE, YE and ZE are the position of hotend ranging between 0..X, 0..Y and 0..Z
  • XP, YP and ZP is the calculated position of the hotend in physical space

These notions, in retrospect, allowed me to code all the different printer types: Ashtar K (Prusa i3), Ashtar C (CoreXY), Ashtar M (Prusa i3 MG), Ashtar D (Classic XY) coherently.

Ashtar K: 500mm 2020 Extrusions as Rails

This is a single size design optimized: 300(-380) x 300 x 360mm build volume, composed by 11x 2020 500mm B-type or V-slot beams:


Bottom view:


The rollers on the Y axis can be likely reduced to minimum of 3 total, instead of 9 (3×3), it really depends how well the rollers have a grip on the extrusions. Majority of the printed parts are custom. I settled with DIY sliders with small PTFE tubes instead, they were simpler and turned out reliable enough for my use case, see below “Y Carriage Slider”.

The Y axis is quite short to match 500mm beam length, and the Y bed fits barely as you can see in this bottom view, but it should work:


Moveable V Modules

The V modules, composed by 2x V plates, which holds the wheels running on the alu extrusion, I document separately at 3D Printing: Wheels on Alu Extrusions and is used:

  • 2x Z axis motion
  • 1x X axis motion
  • 3x Y axis motion (perhaps a dedicated module to reduce amount of wheels) or
  • 3x or 4x Y axis sliders


V Module X Axis

As first I mounted existing direct drive extruder piece to the module, although due the thin 2020 profile I likely have to run it with Bowden setup to make sure the moving extruder is light enough.

Small belt mount, 1st version is one sided, 2nd version goes both ways to be more flexible:

V Module Z Axis

Z Axis V module is a bit more complex, it takes the X axis beam and the Z axis leadscrew or threaded rod, and the X motor mount:

Slider-based Carriages

Aside of wheel-based carriage, I thought of trying and playing with some slider-based carriages as well:

for more details see my blog post on 3D Printing: Sliding on Alu Extrusions. It eventually didn’t work that well, with time it became wobbling, and the friction increased – so I switched to wheel-based V modules.


Some photos of early tests with building the frame. I changed the frame design an add two more beams to stabilize the XZ frame with the Y bed more; using 11x 500mm beams now – and some strong bracket at the bottom:


X Axis Module

Two options are available:

  • 2020 T-Slot 6 (B-Type): using 3x Nylon wheels 23.0 OD / 7.3 wide
  • 2020 V-Slot 6: using 3 or 4x OpenBuild 24.4 OD / 11 wide V wheels

The V-Slot beam is more suitable as the X carriage will be more stable and sturdy when printing – yet, V-Slot 2020 beams aren’t easily available or with high shipment costs.

Four options I tried: the 1st with a slider worked only briefly, then 2nd I switched to white Nylon wheels which wasn’t stable enough but wobbled in Z a bit on T-Slot beam, the 3rd was 3x wheel V module, or the 4x wheel H module on V-Slot which worked best.

Z Axis Modules

Two V modules (each with 2 plates) assembly for 2020 T slot 6 B-Type beams, per module:

  • 3 x M5 x 30
  • 3 x M5 nuts
  • 4 + 2 + 2 M3 nuts (4 front insets, 2 back insets, and 2 for adjustment screws)
  • 2 x M3 x 14 or x 16 (adjustment screws)
  • 3 x Nylon wheels 23.0 OD / 7.3 wide (do not use 23.0/7.0 wheels, but 23.0/7.3)

X, Y and Z Axis Motors

All motors mounted with belts and threaded rods:

and all 3 axis in motion (without extruder and without bed heating/leveling):

and early tests show with the nylon wheel (23.0mm OD, 7.3mm width) based carriage a build volume of 380 x 300 (+10mm outside of bed) x 320mm.

Other carriage, e.g. the slider based, might result in smaller or bigger build volume.

Controller Board

For now I use an Anet 1.0 controller board (as part of a “CTC DIY Kit”), and it required some preparation:

  1. using Arduino Uno R3 (clone) and upload “Arduino ISP”
  2. attach Anet 1.0 board (detach all other cables) to Uno R3 bootloader-burning
  3. run “Burning Bootloader” with “Arduino as ISP” as writer
  4. downloading Marlin and edit main Configuration.h to match my specifications
  5. upload new firmware Marlin to Anet 1.0 via USB upload

I mounted the board first in the farther left corner (in the photo), but the Z stepper motor new mount required to move the board in front of the XZ frame on the left side.  The position and casing for the LCD display I haven’t decided yet.

Y Carriage

Current bed setup (top to bottom):

  • 400x300mm black sticker (“frosted sticker”), apprx. 0.6mm thick
  • 400x300mm 3mm thick mirror
  • 210x210mm 12V alu heat bed (optional)
  • various cork patches under heat bed
  • 10mm light black foam material
  • bed-corner-detail420x320mm 6mm OSB (white painted) as Y carriage
    • 4x printed corner mounts holding 3.7mm thick sticker/mirror combo
    • M3 x 35
    • M3 washer (below printed corner mount)
    • Spring (20mm long, ~10mm OD, 1mm wire), compressed to 10mm
    • M3 washer
    • printed knob (below plywood/OSB), 30mm OD, 8mm thick, M3 nut inserted

I currently use the white PU steel enhanced GT2 belts, and it produces hard edges, some ghosting, but more precise prints than the black rubber GT2 belts which just stretch too much – I have to research this more closely – about the type of reinforcement and the use with more heavy beds (Y carriage).

420×320 carriage:

  • 4mm plywood flexes, but has been quite flat – not recommended
  • 6mm plywood hardly flexes, but has been hard to buy truly flat – and so far my attempt to flatten it did not work well – not recommend unless it’s flat
  • 6mm OSB quite flat, does not flex much (3 or 4 sliders) – recommended

320×320 carriage (for 300×300 bed):

  • 4mm plywood works (3 sliders, 4 sliders recommended)
  • 6mm plywood works (3 sliders, 4 sliders possible if plywood is truly flat <0.2mm difference)
  • 6mm OSB quite flat, doesn’t flex (not yet tested)

Just to explain my thought or decision process for my setup:

  • the mirror should not be bend (of course)
  • the support structure should not be the edge mounts, but the foam in between
  • the carriage can be bent, but not flex
  • revelation: already bent means the springs with screws might extend the bent further with a flexing carriage, and not counter act – as the mirror should stay flat

Sliders & Belt Mount Positions

Top view with see-through (best mark “0,0” on both sides so you keep proper reference) – if your carriage is truly flat, choose 4 sliders, otherwise 3 sliders.


Bowden Extruder

After few weeks I decided to do my own extruder, adapting the design of the “Compact Extruder” which has low complexity and low amount of parts to achieve simple extruder functionality; here my redesign:


and in a functional state:

It’s published at thing:3265864, it’s based on 625ZZ bearing:

  • 625ZZ bearing (16mm OD, 5mm ID)
  • M5x14: mounting bearing
  • 2x M3x25: one to attach handle, another to hold spring
  • 2x M3x8: mounting to stepper motor
  • M3 nut: insert into slot
  • M3 washer: to hold spring
  • 3-8mm OD 20mm long spring
  • hobbed gear OD 11mm
  • 4mm OD / 2mm ID PTFE for filament guides
  • PC4-M6 for outgoing Bowden tube


In Action

After 3 months (2018/06 – 2018/08), since I started to code the first OpenSCAD lines, the “K” prototype happen to print the 20mm XYZ Calibration Cube:

And roughly 2 months later Ashtar K #2 (with RAMPS 1.4 board) was printing as well, on a smaller 300x300mm unheated bed:


  • proper bed mounting and leveling: done
  • bed heating: running without heat bed
  • better cable management (in particular heatbed / Y carriage)
  • release sources
  • complete instructions
    • complete part list (printed / non-printed)


This is a preliminary part list (no files yet published):


Most of the printed parts
  • V plates (2 plates = 1 module) with 3 x or 4 x M5 x 30:
    Note: for each axis the plates must be printed with the same print settings to be symmetric when assembled, recommended setting: 1.5mm top and bottom thickness and wall thickness, layer height ~60% or less of nozzle diameter
    • X module (with 3 or 4 x black OpenWheels 24.4/11):
      • short 3 wheel carriage:
        • 1x v_plate-2020-double-v-244-110-48w-a 
        • 1x v_plate-2020-double-v-244-110-48w-b
      • short 4 wheel carriage:
        • 1x h_plate-2020-double-v-244-110-48w-a
        • 1x h_plate-2020-double-v-244-110-48w-b
    • 2 x Z modules (with 3 x white Nylon 23/7.3 wheels) each
      • 3 wheel carriage:
        • 1x v_plate-2020-delrin-230-73-10-a
        • 1x v_plate-2020-delrin-230-73-10-b
    • 3 or 4 x Y modules (1 module = 1 slider, per slider 4 x 10mm long x 4mm PTFE + 3x 8mm long x 3mm PTFE)
      • 3 or 4 x slider_2020-ptfe=true,td=4,td2=3,axis=2,closed=true,hplus=5,hole=true
  • X carriage:
    • 1x xcarriage_short_hmount_motor-endstop-left
      minimum 1.5mm top and bottom thickness, and 1.5mm wall thickness, 30% infill, layer height ~60% or less of nozzle diameter
    • 1x xcarriage_short_hmount_motor-right
      minimum 1.5mm top and bottom thickness, and 1.5mm wall thickness, 30% infill, layer height ~60% or less of nozzle diameter
    • 2x xcarriage_short_hmount
    • 1x xcarriage_beltmount-y=7,w=25
    • 1x pulley_holder
    • 1x endstop_mount
  • Printhead/Hotend:
    • 1x e3d_mount
      • 2x M3x12 (mounting to x carriage), 2x M3 nuts for insets for clamp (use M3x12 to draw nuts into inset)
    • 1x e3d_mount-type=clamp
      • 2x M3x16 (clamp E3D v6)
  • Y carriage:
    • 4x knob_30,8,6 (bed level wheels)
    • 1x ymotor_mount
    • 1x ycarriage_mount-h=15
    • 1x yendstop_bumper
    • 1x yendstop_mount
    • 1x pulley_holder
    • 1x ybelt_mount
  • Z carriage:
    • 2x zcarriage_short_mount-6,30 (for M6 threaded Z rods)
    • 1x ztop_bracket-left
    • 1x ztop_bracket-right
    • 1x zendstop_mount
  • Frame
    • 8x c_2020 (simple 2020 corners)
    • 2x l_2020-a (short L bracket)
    • 2x l_2020-b
    • 1x ll_2020-a, 3 perimeters/wall line count
    • 1x ll_2020-b, 3 perimeters/wall line count
    • 1x ll_2020-type=nema17-a (X/Z bracket + Z motor mount)
      Note: 3 perimeters/wall line count with layer height ~60% of nozzle diameter (e.g. 0.25mm @ 0.4mm nozzle or 0.3mm @0.5mm nozzle)
    • 1x ll_2020-type=nema17-b (same notes as above)
    • 2x c2_2020-a (strong L for bottom frame)
    • 2x c2_2020-b
    • 12x e_2020 (end caps)

Non-Printed (Vitamins)

  • 11x 500mm 2020 alu extrusions (T slot 6 B-type or V-slot 6)
  • Double or single V slot wheels (OpenWheel 24.4/11) and/or 18x (6 x 3) x Delrin R nylon (23/7.3) wheels (see printed parts above which are needed)
  • Screws & Nuts:
    • 200x M3 nuts
    • 100x M3 8mm
    • 20x M3 10mm
    • 20x M3 15mm
    • 150x M3 Hammer Nuts for T slot/V slot 6
    • 20x M5 x 30
    • 20x M5 nuts
  • Y carriage / bed:
    • 420 x 320 or 320 x 320 OSB 6mm as Y carriage
    • 400 x 300 or 300 x 300 3mm thick mirror
    • 400 x 300 or 300 x 300 frosted bed sticker
    • 4 x springs 20mm long, compressed 10mm
  • Belts:
    • 2x GT2 pulleys (ID 3, OD 16, 6 wide with teeths)
    • ~220cm GT2 6mm belt (200cm might be sufficient but without any cutting margins)
  • Printhead:
    • E3D V6 original / clone with 0.4mm or 0.5mm (recommended) nozzle
    • 100cm PTFE 4mm OD / 2mm ID (60cm for Bowden tube, reuse rest for sliders)
    • 1x Pneumatic Connector PC4-01
    • 1x Pneumatic Fittings PC4-M6 Bore 4.3mm for 4mm PTFE
  • Electronics:
    • 5x stepper motors Nema17 42-45NM (40mm height) with 1m wires
    • 1x control board (with Marlin support), e.g. Anet V1.0 or Makerbase MKS Gen L board
    • 2 x endstops with 1m wires

IDEX Option

In order to run two independent printheads aka IDEX (Independent Dual Extrusion) see this blog-post on Ashtar K IDEX with the details and those new pieces are needed:


  • 1x xcarriage_short_hmount_motor_2020-endstop-idex-left
  • 1x xcarriage_short_hmount_motor_2020-idex-right
  • 1x xcarriage_beltmount_2020-idex
  • 1x pulley_holder
  • 1x xcarriage_nose-idex-left
  • 1x xcarriage_nose-idex-right


  • 1x Nema17 42-45Nm (39-40mm height) with 1m wires
  • belt ~110cm GT2 6mm
  • 1x pulley
  • 1x idler

As soon I tested this option I will document it in more details, like electronics, changes in firmware, slicer settings etc.

Other Options

Related Projects