Category Archives: Technology

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

Introduction

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

Pro:

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

Cons:

  • 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
20190820_191658

which gave the desired stiffness of the part I sought.

Pro:

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

Cons:

  • 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:

Assembled

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
20190831_185419
20190831_180455

That’s it.

3D Printing: Cyclops NF 2-in-1 Printhead

Sourcing

After my bad experience with the “Cyclops/Chimera” clone (2-in-1 with mixing capability), I purchased (June 2019) the improved “Cyclops” which resembles the “Cyclops NF 2-in-1” or “LERDGE 2-in-1 V2” , so I name this variant “Cyclops NF 2-in-1“:

which can be ordered at AliExpress (affiliate links):

and uses E3D V6 nozzle (clone) and 30x10mm fan on top. The two mounting holes are 24mm apart and fit the Prusa i3 X-carriage.

Further, the two filaments cannot be mixed like the original Cyclops but either filament A or B can be fed into the nozzle, but not both at the same time. Also, one can print with one filament solely, a 2nd filament must not be present.

Pros:

  • affordable
  • simple setup
  • single filament printing possible without 2nd filament being present

Cons:

  • cannot mix colors
  • long retraction required for tool change (>34mm)
  • long transition purge (~55mm)
  • custom PTFE or nylon piece in the heatbreak (not easy to source)
  • uncoordinated retraction can cause one filament blocking another

Model & Part Cooler

I quickly modeled the heatsink in OpenSCAD:

so I was able to adapt my Parametric Part Cooler with following settings part_cooler(name="cyclops nf",m=30,wx=25,yoff=10):

and the printed assembly:

Download

https://www.thingiverse.com/thing:3680090

Full Assembly

I finally turned the heatblock around (from the default orientation), so I could see the nozzle better and the LED strip shining more direct on the nozzle and bed.

Operation

The long tool switching retraction of > 34mm imposes quite additional risk of jamming combined with temperature sensitivity: depending on the temperature the pulled back of end of filament changes shape, and may not able to re-enter at next tool switch – so I’m a bit skeptical on the reliability – time will tell.

As I use print3r solely (without GUI), I set following in the printer profile:

# -- slicer=slic3r, slic3r-pe and prusa only:
retract_length_toolchange = 36

and a small macro named e2-nf-t1.ini for my Ashtar C #1 (380x400x380) Core XY style:

prepend_gcode="G91\nT0\nG1 E20 F100\nG1 E-36 F3000\nT1\nG1 E36 F3000\nG1 E60 F100\nG90\nG92 E0\n"
end_gcode="G1 Y{$machine_depth-10} F6000\nG92 E0\nG91\nG1 E-2 F2000\nM104 S0\nG1 E-36 F3000\nT0\nG1 E36 F3000\nM84\nG90\n"

which I use as print3r @e2-nf-t1 ... in case I like to print with 2nd filament only:

  • start:
    • T0: purge 20mm
    • T0: retract -36mm
    • T1: forward 36mm
    • T1: purge 60mm
    • reset E meter and go back to absolute positioning/extruding
  • end:
    • go back to Y380 (absolute)
    • T1: retract extrusion -2mm
    • T1: retract -36mm quick
    • T0: forward 36mm quick
    • switch off heating and motors

This way I keep T0 as default, and on-demand switch to T1 only with @e2-nf-t1 macro in operations. One case is not covered: if I abort a print then T1 is still active in the printhead and manually needs to be retracted (future print3r version will resolve this).

print3r --device=tcp:printhub:0 --printer=ashtar-c-1-e2 --random-placement --scad --slicer=cura print 'for(i=[0:2]) translate([50*i,0,0]) cylinder(d=5,h=40)'

Comparison Dual/Multi Color/Material Extrusions

blue = relevant positive
red = relevant negative

Independent Dual Extrusions (IDEX)

  • complex setup
  • moderate cost
  • non-mixing
  • dual nozzles
  • dual heatblocks
  • dual heatsinks
  • normal retraction
  • no purge block 1)
  • no oozing over print
  • no inactive nozzle traveling
  • reliable 2)

★★★★★

Dual Hotends 2-in-2

  • simple setup
  • low cost
  • non-mixing
  • dual nozzles
  • dual heatblocks
  • dual heatsinks
  • normal retraction
  • no purge block
  • inactive nozzle oozing over prints
  • inactive nozzle travels over print
  • moderate reliability

★★★★★

Chimera 2-in-2

  • simple setup
  • clone: low cost
  • original: high cost
  • non-mixing
  • dual nozzles
  • dual heatblocks
  • single heatsink
  • normal retraction
  • no purge block
  • oozing of inactive material
  • inactive nozzle travels over print
  • moderate reliability

★★★★★

Cyclops 2-in-1

  • simple setup
  • clone: low cost
  • original: high cost
  • mixing
  • single nozzle
  • single heatblock
  • single heatsink
  • normal retraction
  • purge block required
  • no oozing of inactive material
  • clone: unreliable

★★★★ (clone)

Cyclops NF 2-in-1

  • simple setup
  • low cost
  • non-mixing
  • single nozzle
  • single heatblock
  • single heatsink
  • complex retraction
  • no oozing of inactive material
  • moderate reliability

★★★★★

Diamond Hotend 3-in-1

  • complex setup
  • clone: low cost
  • original: high cost
  • mixing
  • single nozzle
  • single heatblock
  • 3 heatsinks
  • tricky retraction
  • purge block required
  • no oozing of inactive material
  • moderate reliability

★★★★★

Multiple Switching Extrusions (MSE) 2-in-2, 3-in-3, 4-in-4

  • moderate complex setup
  • requires additional servo or motor
  • extendable 2, 3, or 4 colors/materials
  • low cost
  • non-mixing
  • multiple nozzles / heatblocks / heatsinks
  • normal retraction
  • no purge block 1)
  • no oozing of inactive material
  • no inactive nozzle touching print
  • reliable 2)

(rating comes later)

Y Splitter x-in-1

  • simple setup
  • extendable 2, 3, or 4 or more colors / materials
  • low cost
  • non-mixing
  • single nozzle
  • single heatblock
  • single heatsink
  • complex retraction
  • purge block required
  • no oozing of inactive material
  • moderate reliability

★★★★★

Tool Changer

  • complex setup
  • extendable to n-colors or materials
  • moderate cost
  • non-mixing
  • multiple nozzles / heatblocks / heatsinks
  • normal retraction
  • no oozing of inactive material
  • no inactive nozzle touching print
  • moderate reliability

(rating comes later)

Footnotes

  1. in theory no purge block, but if ooze shields are shared among switching extrusions (more than 2 extrusions) there may be cross-contamination between colors/materials
  2. the printheads individually are proven to be reliable

Hints:

  • single heatblock = same print temperature
  • dual heatblock = different print temperatures possible
  • dual nozzle = different nozzle sizes possible

That’s it.

3D Printing: LED Strip Fan Mount

20190612_121717Early on I used this setup and extended the options further – a 50mm long LED Strip Fan Mount – which mounts directly on

  • 30x10mm fan (like E3D V6) or
  • 40x10mm fan or
  • 50x10mm fan

either below or above (changes distance) and lightens print head or print bed of a 3D printer.

BOM

  • printable LED Strip Mount (30mm/40mm/50mm fan)
  • 50mm long / 8mm wide LED adhesive strip
  • tape to insulate wires on LED
  • insulated wire or zip-tie to fasten wire

Screenshot from 2019-06-12 10-26-17-cropped

LED Strip Mount: 30mm, 40mm and 50mm fan variant

20190612_123439

Step by Step

The final step you can decide to put the mount above or below the fan, which gives some flexibility. The mount is just 1mm thick so it won’t matter so much on the existing setup.

Usage

 

That’s it.

3D Printing: Chimera Clone 2-in-1 or 2-in-2

Updates:

  • 2021/01/01: finally published with conclusion and more photos
  • 2019/06/05: write up but not yet published, illustrations done

Back in May 2019 I tested a Chimera clone, based on the Open Source hardware design by E3D (UK):

and the updated 2018 design:

Even though I had rather unreliable experiences with the Chimera clone, I like to document it for my own sake and perhaps for you too.

Chimera Clone as sold by IdeaFormer:

E3D Cyclops/Chimera

  • 2-in-1 non-mixing due steel balls, called E3D Cyclops/Chimera+
  • Price: EUR/USD 110 (2021/01)

Chimera Clone (IdeaFormer)

  • 2-in-1 no steel balls inside therefore mixes
  • 2-in-1 leaks
  • 2-in-2 heatbreaks in heatsink wiggle
  • Price: EUR/USD 10 (2021/01)
  • Rating: ★★☆☆☆

There are also “Cyclops NF” sold on Aliexpress, those are not compatible with E3D Cyclops/Chimera either – you have to study the photos carefully and not rely on the product title.

Chimera Clone 2-in-1 (mixing)

Let’s focus first on the 2-in-1 mixing mode, the large mixing heatblock with a single heat resistor – I made a basic mounting plate for my V-carriage (30mm distant M3 holes):

Based on the plans as shown on the top of this post, let’s illustrate the actual flow of the two filaments:

The main problem is that there is inactive molten filament, and I realized, there is a minimum of flow required of the “inactive” filament, e.g. 5%, in order to have reliable printing either mixed or single filament.

Further, I experienced massive leaks on the sides, and I was not able to patch or fix it, perhaps too wide margins of the worm screws on the side:

Eventually I gave up on printing with Chimera clone 2-in-1 mixing mode because of the clogging and leaks (which likely are related to each other).

It might have been a good to insulate the heatblock with Kapton tape and some thermal insulator to prevent the part cooler cooling down the heatblock too much and nozzle with it.

Chimera Clone 2-in-2

The two heatblocks with single heatsink mode, aka 2-in-2, again made a simple mounting plate this time with additional holes to adjust the heatbreaks individually – as we are operating now with two nozzles; and I even adapted my Parametric Part Cooler piece for it:

The leveling of the two nozzles worked well, given your mount allows to reach at least one worm screw which controls the heatbreak and thereby the nozzle distance to bed.

The 2-in-2 operation worked better, the X-offset between the two nozzles needed to be measured and calibrated with test prints, as well slight Y-offset as the holes in the heatsink have too much margin for the two heatbreaks, so they wiggle a bit – so every leveling between the two nozzles changed X- and Y-offset between the nozzles. This happens when an Open Source hardware design is implemented without care of the details.

Download

Even though my Chimera clone experience was not convincing, you might have better one with another supplier or the original E3D Cylcops/Chimera+ with more precise machining – let me know if you do so.

https://www.thingiverse.com/thing:4704047

Conclusion

The Chimera clone from IdeaFormer did not convince me, as

  • the 2-in-1 mixing mode leaked and
  • the 2-in-2 was harder to calibrate the X- and Y-offset

For 2-in-2 application I rather use the more simple Dual Micro Swiss Setup which turned out more feasible, reliable and easier to handle. I eventually used the Cyclops NF (non-mixing) more reliable, but still not as reliable as single nozzle operation as with E3D V6 or Volcano.

The problem for 2-in-2 is also about the inactive nozzle to leak out the nozzle, e.g. you need to retract a bit, and then push forward but you lack building up pressure, so every switch of tools (nozzles/filament) decreases the print quality. The independent X dual nozzles (IDEX) setup you can move the inactive nozzle aside and brush off leaking filament.

For the mixing mode 2-in-1, I had more reliable experiences with the Diamond Hotend with 3-in-1, where all three filaments must be present (and ideally have 2-5% use even when not desired).

Comparison Dual/Multi Color/Material Extrusions

blue = relevant positive
red = relevant negative

Independent Dual Extrusions (IDEX)

  • complex setup
  • moderate cost
  • non-mixing
  • dual nozzles
  • dual heatblocks
  • dual heatsinks
  • normal retraction
  • no purge block 1)
  • no oozing over print
  • no inactive nozzle traveling
  • reliable 2)

★★★★★

Dual Hotends 2-in-2

  • simple setup
  • low cost
  • non-mixing
  • dual nozzles
  • dual heatblocks
  • dual heatsinks
  • normal retraction
  • no purge block
  • inactive nozzle oozing over prints
  • inactive nozzle travels over print
  • moderate reliability

★★★★★

Chimera 2-in-2

  • simple setup
  • clone: low cost
  • original: high cost
  • non-mixing
  • dual nozzles
  • dual heatblocks
  • single heatsink
  • normal retraction
  • no purge block
  • oozing of inactive material
  • inactive nozzle travels over print
  • moderate reliability

★★★★★

Cyclops 2-in-1

  • simple setup
  • clone: low cost
  • original: high cost
  • mixing
  • single nozzle
  • single heatblock
  • single heatsink
  • normal retraction
  • purge block required
  • no oozing of inactive material
  • clone: unreliable

★★★★ (clone)

Cyclops NF 2-in-1

  • simple setup
  • low cost
  • non-mixing
  • single nozzle
  • single heatblock
  • single heatsink
  • complex retraction
  • no oozing of inactive material
  • moderate reliability

★★★★★

Diamond Hotend 3-in-1

  • complex setup
  • clone: low cost
  • original: high cost
  • mixing
  • single nozzle
  • single heatblock
  • 3 heatsinks
  • tricky retraction
  • purge block required
  • no oozing of inactive material
  • moderate reliability

★★★★★

Multiple Switching Extrusions (MSE) 2-in-2, 3-in-3, 4-in-4

  • moderate complex setup
  • requires additional servo or motor
  • extendable 2, 3, or 4 colors/materials
  • low cost
  • non-mixing
  • multiple nozzles / heatblocks / heatsinks
  • normal retraction
  • no purge block 1)
  • no oozing of inactive material
  • no inactive nozzle touching print
  • reliable 2)

(rating comes later)

Y Splitter x-in-1

  • simple setup
  • extendable 2, 3, or 4 or more colors / materials
  • low cost
  • non-mixing
  • single nozzle
  • single heatblock
  • single heatsink
  • complex retraction
  • purge block required
  • no oozing of inactive material
  • moderate reliability

★★★★★

Tool Changer

  • complex setup
  • extendable to n-colors or materials
  • moderate cost
  • non-mixing
  • multiple nozzles / heatblocks / heatsinks
  • normal retraction
  • no oozing of inactive material
  • no inactive nozzle touching print
  • moderate reliability

(rating comes later)

Footnotes

  1. in theory no purge block, but if ooze shields are shared among switching extrusions (more than 2 extrusions) there may be cross-contamination between colors/materials
  2. the printheads individually are proven to be reliable

Hints:

  • single heatblock = same print temperature
  • dual heatblock = different print temperatures possible
  • dual nozzle = different nozzle sizes possible

See Also

  • Cyclops NF, more reliable 2-in-1 (non-mixing) experiences

3D Printing: Diamond Hotend or Mixed-Color Deep(er) Dive

20190502_133621

It has been a few weeks with the color mixing Diamond Hotend 3-in-1 (there is also an 5-in-1 option) – a few notes:

Pros:

  • affordable, various sources available for 3-in-1 ~10-15 EUR (although the 5-in-1 only from RepRap.me 100-250 EUR)
  • simple setup with 3 (or 5) E3D V6 heatsinks and 3 (or 5) extruders with Bowden setup
  • lightweight mixing color approach using Cyan/Magenta/Yellow for 3-in-1 (plus Black/White for 5-in-1)

Cons:

  • complex prints with a lot retraction voids proper mixing
  • mixing not perfect, depends on material and orientation (front and side might have different degree of mixing)
  • delicate heating procedure: keep it hot between prints or let it cool down to 50C before reheating to 180C or higher again
  • all 3 (or 5) filaments must be present to print even if they aren’t printed but provide resistance to pressure within the nozzle

Starting Properly: Building Up Pressure

Alike with single extruder, with Diamond Hotend one must build up pressure within the hotend so the print is successful:

20190430_122046
20mm XYZ Hollow Calibration Cube: Left: No Pre-Pressure, Right: Pre-Pressure Preparation

This procedure worked for me:

  • extrude from each individual filament 15mm
  • extrude from all filaments together 10mm

The Gcode looks like this:

G91                    ; relative positioning
M165 A1                ; color A
G1 E15 F100            ; extrude 15mm
M165 B1                ; color B
G1 E15 F100
M165 C1                ; color C
G1 E15 F100
M165 A0.33 B0.33 C0.33 ; all colors each 1/3
G1 E10 F100            ; extrude 10mm
G90                    ; absolute positioning
G92 E0                 ; reset extruding position (to be sure)

Hue Wheel to CMY

hsv-shading
Hue Wheel (Creative Commons CC)

Hue wheel is a simple way to remember the colors, and is part of Hue Saturation Lightness (HSL) representation covering entire human color spectrum (more natural than remembering RGB values).

  • h: 0 .. 360 degrees
    • 0 = red
    • 60 = yellow
    • 120 = green
    • 180 = cyan
    • 240 =  blue
    • 300 = magenta
  • s: 0 .. 1 (ignored)
  • l: 0 .. 1 (ignored)
function hsl2cmy(h,s,l) {
   r = ((h+180)%360)/360;
   c = r < 1/3 ? 1-r*3 : r >= 2/3 ? (r-2/3)*3 : 0;   // 1..0..0..1
   m = r < 1/3 ? r*3 : r <= 2/3 ? 1 - (r-1/3)*3 : 0; // 0..1..0..0
   y = r >= 1/3 && r < 2/3 ? (r-1/3)*3 : r >= 2/3 ? 1 - (r-2/3)*3 : 0; // 0..0..1..0
   return (c,m,y);
}

So, in case you use Cyan, Magenta and Yellow filament, you are able to cover some of the Hue wheel – I say “some” as getting Magenta filament seems not that easy – e.g. I used Glowing Magenta (less pigments) vs Rose/Magenta filament, here the two as comparison:

20190415_183743
Glowing Magenta (top row) vs Rose/Magenta (bottom row)

A proper color space mapping is required, e.g. accounting the different pigment density and thereby consider the strength how one color might dominate another in the mixing.

Repeatability

Usually the first print of the day, cooling up from 15-20C room temperature, gives me not a good print, even using my pressure building Gcode, the 2nd and 3rd print color mixing becomes more reliable. Yet, as you can see, color blending/mixing isn’t fully consistent:

20190430_103755

No 1 was 1st print heating up from 15C ambient to 205C – including pre-pressure preparation. No 2-4 were printed with nozzle kept at 205C and not cooling off.

Some wider strips also single layer about 0.25mm thick with 0.4mm nozzle printed with various extrusion multipliers (0.5 – 1.0x):

20190426_172337
Single Layer Wide Strips with various extrusion multipliers: 0.5, 0.75, 0.9 and 1.0 printed at 0.25mm height and 0.4mm nozzle

Partial Mixing: Orientation Matters

Looking from the top of the Diamond Hotend, you have 3 (or 5) filament intakes, and in case of 3-in-1:

  • front (A)
  • back right (B)
  • back left (C)

and the following examples I use

diamond-hotend-sketch-with-filament-wkr
  • white PLA (A/front),
  • black PLA (B/back right) and
  • red PLA (C/back left)

and you clearly see that color mixing is highly dependent on the orientation, using my xyz 20mm Hollow Calibration Cube printed with 0% infill, 2 perimeters, 0.4mm nozzle, 0.25mm layer height:

Front vs Side

Let me focus on three cases more detailed:

20190429_141749
A=50% white, B=50% black

As you can see, white PLA fed 50% through A (front), gives the X face predominent white, whereas the black PLA fed 50% through B (back right) gives the “Y” face predominent black. Ideally, this cube should be mix 50/50 white/black, a shade of grey, but obviously isn’t. The same with red (C) and black (B):

20190429_141944
B=50% black, C=50% red

although the mix in front of “X” face is ok, And looking at A (front) 50% white and C (back left) 50% red PLA:

20190429_142005
A=50% white, C=50% red
20190430_110005
Close Up: A=white 1/3, B=black 1/3, C=white 1/3

And looking at the 20mm Hollow Calibration Cube with A=0% white, B=50% black and C=50% red:

each side has another shade of red, even though 50/50 red/black is defined.

Another example with 50/50 cyan/yellow which should give green:

each side has another shade of green (the opposite sides of X or Y have a dot on the right upper corner for orientation).

Back Pressure: Delayed Color Change

diamond-hotend-sketch-with-filament-wkr

This issue is a bit more complex so let me explain in a few steps:

  • whenever a mix of filaments is pushed out, it pushes out of the nozzle, but also pushes partially back to the passive or non-printed filament(s)
  • eventually when the passive or non-printed filaments gets activated, a pushed back former mix comes out first, before the actual wanted filament(s) come out of the nozzle

Here the single layer mixing examples, where you can see it clearly:

20190430_103755

The width of the strip is 20mm, length is 150mm, making A/B – B – C – A/C transition (equals to Hue wheel to CMY 0..360 degrees transition) where A=white, B=black and C=red PLA, you can see how long the transition is, 2-3 lines equals to 40-60mm printed, which is about 2-3mm filament (ratio is 20x: 0.4mm nozzle vs 1.75mm filament, calculating ratio with circular areas).

Possible remedy is to extrude all filaments with a minimum, e.g. 0.5%, 1%, 1.25%, 1.5%, 2% and 5% as examples:

20190430_125351
Various Minimum Extrusion: 0%, 0.5%, 1%, 1.25%, 1.5%, 2% and 5%.

In essence you compromise the purity of the colors, but you gain cleaner color change.

So, if color change (without purge tower) is important for the print, and you don’t need pure colors, you may set the minimum for each involved filament to 0.5%, for example:

M165 A0.005 B1 C0.005

Note: If Marlin sees A+B+C > 1, and rescales all parameters to normalized sum of 1.0, I don’t know how other firmware behaves.

20190430_125620
0% vs 0.5% Minimum: Hue Range with CMY filaments: with 0.5% the color change is softer, and back pushed color change delayed (green strip after the blue)

CYW & CYK instead of CMY

Some more tests, using white (W) and black (K) (Netco, purchased via Ebay) on the 3-in-1 to have some idea how 5-in-1 Diamond Hotend will behave:

20190504_101945

White blends quite well to Yellow or Cyan, given the limitations of the Diamond Hotend as illustrated earlier in this post.

20190504_102007

Black dominates very strongly and doesn’t seem to mix well: Dark Yellow didn’t work well as it seems the limited mixing shows Yellow and Black aside of each other; where as Dark Blue worked better.

Magenta Alternatives

Using Rose filament (Noveste, purchased via Ebay) as “Magenta” gives very good transitions with Cyan and Yellow, yet, no classic Red from the mix, which magenta would or should provide:

20190503_104058
CMY transitions with Rose as “M”: 4 phases, Hue wheel, and Cyan/Yellow, Yellow/Magenta and Cyan/Magenta transition

Using Raspberry Rose filament (OWL Filament, Germany, purchased via Ebay) blended or mixed with Cyan and Yellow:

20190506_133103
CMY transitions with Raspberry Rose as “M”: 4 phases, Hue wheel, and Cyan/Yellow, Yellow/Magenta and Cyan/Magenta transition

Quite good results with this single layer strip: so far much closer to red than before, rather deep saturated Orange, not quite Red, and when I printed calibration cubes, I saw the Raspberry Rose filament dominates Yellow and doesn’t properly mix: the change between Yellow and “Magenta” is rather abrupt:

20190507_083237
Abrupt change between Yellow and Magenta (Raspberry Rose), due different pigment density.
20190415_142841
20mm XYZ Hollow Calibration Cube, CMY transition (C=Bright Blue, M=Glowing Magneta, Y=Yellow; from Sienoc)

I will try to acquire better “Magenta” filament, as I haven’t achieved proper Red color by mixing Magenta and Yellow. The Cyan/Yellow mixing works quite well, given both filaments come from the same supplier (Sienoc), one who doesn’t provide Magenta unfortunately, only Glowing Magenta which blends well, but lacks strong color, too translucent.

Comparison Dual/Multi Color/Material Extrusions

blue = relevant positive
red = relevant negative

Independent Dual Extrusions (IDEX)

  • complex setup
  • moderate cost
  • non-mixing
  • dual nozzles
  • dual heatblocks
  • dual heatsinks
  • normal retraction
  • no purge block 1)
  • no oozing over print
  • no inactive nozzle traveling
  • reliable 2)

★★★★★

Dual Hotends 2-in-2

  • simple setup
  • low cost
  • non-mixing
  • dual nozzles
  • dual heatblocks
  • dual heatsinks
  • normal retraction
  • no purge block
  • inactive nozzle oozing over prints
  • inactive nozzle travels over print
  • moderate reliability

★★★★★

Chimera 2-in-2

  • simple setup
  • clone: low cost
  • original: high cost
  • non-mixing
  • dual nozzles
  • dual heatblocks
  • single heatsink
  • normal retraction
  • no purge block
  • oozing of inactive material
  • inactive nozzle travels over print
  • moderate reliability

★★★★★

Cyclops 2-in-1

  • simple setup
  • clone: low cost
  • original: high cost
  • mixing
  • single nozzle
  • single heatblock
  • single heatsink
  • normal retraction
  • purge block required
  • no oozing of inactive material
  • clone: unreliable

★★★★ (clone)

Cyclops NF 2-in-1

  • simple setup
  • low cost
  • non-mixing
  • single nozzle
  • single heatblock
  • single heatsink
  • complex retraction
  • no oozing of inactive material
  • moderate reliability

★★★★★

Diamond Hotend 3-in-1

  • complex setup
  • clone: low cost
  • original: high cost
  • mixing
  • single nozzle
  • single heatblock
  • 3 heatsinks
  • tricky retraction
  • purge block required
  • no oozing of inactive material
  • moderate reliability

★★★★★

Multiple Switching Extrusions (MSE) 2-in-2, 3-in-3, 4-in-4

  • moderate complex setup
  • requires additional servo or motor
  • extendable 2, 3, or 4 colors/materials
  • low cost
  • non-mixing
  • multiple nozzles / heatblocks / heatsinks
  • normal retraction
  • no purge block 1)
  • no oozing of inactive material
  • no inactive nozzle touching print
  • reliable 2)

(rating comes later)

Y Splitter x-in-1

  • simple setup
  • extendable 2, 3, or 4 or more colors / materials
  • low cost
  • non-mixing
  • single nozzle
  • single heatblock
  • single heatsink
  • complex retraction
  • purge block required
  • no oozing of inactive material
  • moderate reliability

★★★★★

Tool Changer

  • complex setup
  • extendable to n-colors or materials
  • moderate cost
  • non-mixing
  • multiple nozzles / heatblocks / heatsinks
  • normal retraction
  • no oozing of inactive material
  • no inactive nozzle touching print
  • moderate reliability

(rating comes later)

Footnotes

  1. in theory no purge block, but if ooze shields are shared among switching extrusions (more than 2 extrusions) there may be cross-contamination between colors/materials
  2. the printheads individually are proven to be reliable

Hints:

  • single heatblock = same print temperature
  • dual heatblock = different print temperatures possible
  • dual nozzle = different nozzle sizes possible

That’s it.

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

Updates:

  • 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“:

20190411_063229

Producing stuff like this:

20190410_221650

20190415_174333

Cyan, Yellow, Glowing Magenta, Cyan Z-transition

Firmware (Marlin) & Hardware (RAMPS 1.4)

In the Marlin following settings are required:

Configuration.h

#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.

Enable MIXING_EXTRUDER:

/**
 * "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_EXTRUDER
#if ENABLED(MIXING_EXTRUDER)
  #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
#endif

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

diamond-hotend-ramps14

Configuration_adv.h

Enable FWRETRACT:

#define FWRETRACT // ONLY PARTIALLY TESTED
#if ENABLED(FWRETRACT)
#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)
#endif

​​pins_RAMPS.h

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

Printing

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.

20190410_150238

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

20190415_110908

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:

20190410_221650

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}'

20190415_174447

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}'

20190415_174910

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}'

20190415_174333

Cyan, Yellow, Glowing Magenta, Cyan Z-transition

20190415_192732

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.

Jamming

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

20190411_150126

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:

20190411_151429

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.

CAD: CSG Operation exclusive()

Historically Constructive Solid Geometry (CSG) covers three main boolean operations:

  • union
  • difference
  • intersection

like with Set Theory or more known when using Venn diagrams.

Brian Spilsbury started to look at 3D meshes for his JSxCAD library and how to process them: much closer to actual use cases of composing solids together and incorporate physical reality that two solids cannot occupy the same space at the same time while still unite or combine their shapes somehow.

He came up with the concept disjointed assembly of solids, which has the advantage of preserving the solids integrity in order to maintain individual information of material or colors per solid, and only change their shapes to align seamless to each other.

Disjointed Assembly or Exclusivity

The disjointed assembly or exclusive series of a, b and c like

a = sphere().color(red)
b = cube(1.5).color(green).translate([0.5,0.5,0.5])
c = cube(1).color(blue).translate([0.5,0,0])

may be written as

exclusive(a,b,c) = [ difference(a,b,c), difference(b,c), c  ]

The parts no longer intersect any space of each other, and seamlessly can be fused now together. The order of such exclusivity matters now: the first solid in line is changed by all succeeding solids, and each next solid in the disjointed assembly the same, whereas the last solid remains untouched, hence, exclusivity with ascending order, the last dominates most.

Alternatively, exclusivity with descending order:

exclusive(a,b,c) = [ a, difference(b,a), difference(c,b,a) ]

and then a remains untouched, and all succeeding parts are dominated by the preceding ones.

While union(), difference() and intersection() are base functions handling solids, exclusive() introduces a lightweight approach to handle grouping of multi-material CSG solids by having the parts accessible individually afterwards.

Support

Last update 2019/04/19:

  • OpenSCAD:  exclusive() may be written as a module:
module exclusive(order="asc",explode=[0,0,0]) {
   for (i = [0:1:$children-1]) 
      translate([explode[0]*i,explode[1]*i,explode[2]*i]) 
         if(order=="desc") 
            difference() {
               children(i);
               children([i-1:-1:0]);
            }
         else
            difference() {
               children(i);
               children([i+1:1:$children-1]);
            }
}

exclusive(explode=[3,0,0]) {
   color([1,0,0]) sphere($fn=32);
   color([0,1,0]) translate([0.5,0.5,0.5]) cube(1.5,center=true);
   color([0,0,1]) translate([0.5,0,0]) cube(1,center=true);
}

Screenshot from 2019-04-19 10-45-31

  • OpenJSCAD: not yet, you can easily write a function to handle an array of solids, and creates difference() operations to each other.
  • JSxCAD: assembly() with ascending order implied, means, the last object is most dominant.
  • Unreleased/Unnamed CAD (which I currently work on 2019/04): exclusive() available, with optional last argument options with order: either "asc" (default) or "desc" like:
    • exclusive(a,b,c);
    • exclusive(a,b,c,{order:"desc"});

Screenshot from 2019-04-10 08-48-11

That’s it.

3D Printing: Print3r 0.2.x: Networked Printing

A brief post of my local network for 3d printing with several 3d printers, using print3r CLI (Command Line Interface) tool.

20190218_105541

Physical Setup

20190302_164919Orange Pi Zero (single board ARM-based computer) named printhub running Armbian (Debian-like).

  • Ethernet Port connecting to Ethernet/Wifi Hub with its own subnet (192.168.4.x)
  • External USB 4x Hub connecting 3d printers via USB:
    • Ashtar K 1 (Prusa i3-like, 400 x 300 build plate, 330mm height), 0.5mm nozzle (/dev/ttyUSB2)
    • Ashtar K 2 (300 x 300 build plate, 330mm height), 0.4mm nozzle (/dev/ttyUSB1)
    • Ashtar C 1 (CoreXY, 400 x 400 build plate, 380mm height), 0.4mm nozzle (/dev/ttyUSB0)
    • CTC DIY I3 Pro (Y3228), 0.4mm nozzle (/dev/ttyUSB3)

The workstation from which I print from (design and slice) is also connected via Ethernet. The printed violet PLA case I published a while ago on Thingiverse: Orange Pi Zero Case.

Preparation

On printhub (Orange Pi Zero) starting all the network clients processes:

% print3r /dev/ttyUSB0 client &
% print3r /dev/ttyUSB1 client &
% print3r /dev/ttyUSB2 client &
% print3r /dev/ttyUSB3 client &

Usage

On my workstation (a laptop), referencing printer profiles and devices:

% print3r --device=tcp:printhub:0 --printer=ashtar-c-1 print cube.stl
% print3r --device=tcp:printhub:1 --printer=ashtar-k-2 print cube.stl
% print3r --device=tcp:printhub:2 --printer=ashtar-k-1 print cube.stl
% print3r --device=tcp:printhub:3 --printer=y3228 print cube.stl

See Print3r Wiki: Remote Printing for more details.

The CTC I3 Pro B Y3228 low cost printer still runs Marlin 1.0 and 250,000 baudrate which won’t work with ser2net which print3r uses internally to print in network environment, so it needs to be flashed first with newer firmware, so it can be networked as well with common baudrate like 230,400. I upgraded the ~1 year old “CTC DIY I3 Pro B” 3d printer to Marlin 1.1.8 finally, first burning a bootloader with an Arduino Uno, and then properly configured Marlin, and now runs with 115,000 baudrate as well, so it can be networked as well.

Otherwise I stopped using Cura GUI or Slic3r GUI completely, and solely use print3r to first preview the Gcode, sliced with CuraEngine or Slic3r, and then print the parts, and because it runs on the command line, all the previous calls in the terminal are stored as history therefore I can scroll back (cursor-up/down) and repeat a job with slightly changed settings by editing the command line – something which GUI doesn’t offer, unless you save a printjob as .3mf and reload it and click around and change settings and save again as .3mf etc.

Command Inline OpenSCAD

Further, I often code OpenSCAD code directly with print3r for simple parts, e.g. caps for M6 threaded rods, something like:

20190225_090931

% print3r --device=tcp:printhub:0 --printer=ashtar-c-1 --random-placement --scad print 
"difference(){cylinder(d=8.4,h=10);translate([0,0,2])cylinder(d=6.4,h=10);}"

and if the print came out well, I add --multiply-part=3 or so.

Download & Install Print3r

github.com/Spiritdude/Print3r

 

That’s it for now.

 

3D Printing: Ashtar C Printer: 1st Prints

Back in September 2018 I started to code the first parts for Ashtar C, a “Core XY” type 3d printer – finally, after several weeks waiting for the several parts (bearings, closed loop belts), I was able to finalize the bed and Z axis (2018/01/30) and perform the first test prints of Ashtar C #1 composed with 500mm 2020 T-slot and V-slot alu extrusions:

Specifications

  • CoreXY style
  • Build Volume: 380 x 400 x 380mm
  • Frame Size: ~500 x 500 x 500mm

Bed

  • 400 x 400mm black bed sticker (~0.7mm thick)
  • 400 x 400 x 4mm mirror (custom order)
  • 4x bed corner mounts (printed), with M3 x 30 and spring and 4x washers each
  • 420 x 420 x 4mm OSB

residing on 2020 T-slot alu extrusions.

Z Axis

  • 1524mm GT2 closed belt: even though driving 4 threaded rods worked somehow, but not reliably therefore:
    • Option A
      • 2x Nema17 (45Nm) stepper motor with 18 teeth GT2 pulley 5mm bore
      • 2x 760mm closed beltbelt-routing-z-axis
    • Option B
      • Using 3 or higher : 1 gear box (e.g. 3:1 gearbox could be used, but external shaft isn’t strong enough stabilized versus tilt) or alike to increase torque and still drive 4 threaded rods
  • 4x M6 x 490mm threaded rods
  • 4x M6 nuts with bed mounts (printed)
  • 4x bottom Z rod mount (printed)
  • 8x 606ZZ bearings (each rod has 2 bearings)
  • 4x 18 teeth GT2 pulley 6mm bore

20190130_170822

20190130_170838

Challenges

Following challenges came up in the first test prints:

  • CoreXY principle works well, yet, the friction of each idler really matters as it increases risk of missing steps, well greased and well positioning mandatory
  • X endstop: right now positioned on the left hand side of the X beam, but the cable hangs down – likely need to reposition X endstop on the X carriage itself
  • the Bowden tube is long and so hangs to the bed, the tube (4mm OD, 2mm ID) isn’t stiff enough to bend upward, so requires some guidance to ensure it doesn’t ride on the bed surface and entangles with print process
  • E3D V6 clone this time really does not perform well: extrusion is not even, and missing steps of the extruder; requires further investigation.
    • thermistor seems off, increasing to “220C” print temperature, gave better and cleaner prints

Impressions

That’s it for the moment.