summaryrefslogtreecommitdiff
path: root/mixer.scad
authorMichael Krelin <hacker@klever.net>2017-09-29 19:52:47 (UTC)
committer Michael Krelin <hacker@klever.net>2017-09-29 19:52:47 (UTC)
commit91595f88cbae50b7f12821f947b55c17d8c50dd7 (patch) (side-by-side diff)
tree346f86147c134f7649a811ec1491cf26bdb6aece /mixer.scad
parent5dcc5d28b0b737d27f70949c7780ba0d80c0e0fc (diff)
downloadextrudery-91595f88cbae50b7f12821f947b55c17d8c50dd7.zip
extrudery-91595f88cbae50b7f12821f947b55c17d8c50dd7.tar.gz
extrudery-91595f88cbae50b7f12821f947b55c17d8c50dd7.tar.bz2
filament Y-switch
Diffstat (limited to 'mixer.scad') (more/less context) (ignore whitespace changes)
-rw-r--r--mixer.scad88
1 files changed, 88 insertions, 0 deletions
diff --git a/mixer.scad b/mixer.scad
new file mode 100644
index 0000000..3200023
--- a/dev/null
+++ b/mixer.scad
@@ -0,0 +1,88 @@
+layer_height=0.2; extrusion_width=0.4;
+epsilon=0.01;
+$fs=0.125;
+
+draft=true;
+
+use <threads.scad>;
+module pushfit_thread(h=10) {
+ thr = 3/8 + .5/25.4;
+ slit = 25.4*thr/2 + 0.2;
+ if(draft) cylinder(d=thr*25.4,h=h);
+ else english_thread(diameter=thr,threads_per_inch=28,length=h/25.4,internal=true);
+ translate([-2,-slit,0]) cube([4,2*slit,h]);
+}
+
+module the_mixer(
+ pushfit_d = 10, pushfit_h = 10,
+ liner_d = 4, liner_id = 2,
+ filament_d = 1.75,
+ join_angle = 30,
+
+ interpushfit = 2*extrusion_width, // space between two pushfit's threads
+ pushfit_s = 2, // shell around pushfit threads
+ output_l = 4, // length of output after before pushfit
+ outer_r = 3, // outer radius
+
+ liner_d_tolerance = .2,
+) {
+ module liner(l,in) {
+ inh=ld-liner_id;
+ union() {
+ translate([0,0,inh])
+ cylinder(d=ld,h=l-inh,$fn=ld*PI*2);
+ translate([0,0,-epsilon])
+ cylinder(d1=ld+epsilon,d2=liner_id-epsilon,h=inh+2*epsilon);
+ }
+ }
+
+ ld = liner_d+liner_d_tolerance;
+ linero = ld/2/tan(join_angle/2); // liner offset
+ pfrx = interpushfit/2/cos(join_angle/2); // radial margin
+ pfR = pushfit_d/2+pfrx; // radius of pushfit with margin
+ pfo = pfR/tan(join_angle/2); // pushfit thread ofset
+
+ h = pushfit_d+pushfit_s*2;
+ difference() {
+ hull() {
+ for(s=[-1,1]) {
+ rotate([0,0,s*join_angle/2])
+ for(ss=[-1,1])
+ translate([ss*pushfit_d/2,pfo+pushfit_h-outer_r-epsilon])
+ cylinder(r=outer_r,h=h,center=true,$fn=outer_r*PI*4);
+ translate([s*pushfit_d/2,-output_l-pushfit_h+outer_r+epsilon,0])
+ cylinder(r=outer_r,h=h,center=true,$fn=outer_r*PI*4);
+ }
+ }
+ for(s=[-1,1]) rotate([0,0,s*join_angle/2]) {
+ translate([0,linero,0]) rotate([-90,0,0])
+ liner(l=pfo-linero+1,in="bottom");
+ //cylinder(d=ld,h=pfo-linero+1,$fn=ld*PI*4);
+ translate([0,pfo,0]) rotate([-90,0,0])
+ pushfit_thread(h=pushfit_h);
+ }
+ rotate([90,0,0]) {
+ liner(l=output_l+1,in="top");
+ //cylinder(d=ld,h=output_l+1,$fn=ld*PI*4);
+ translate([0,0,output_l])
+ pushfit_thread(h=pushfit_h);
+ }
+ hull() {
+ for(s=[-1,1]) rotate([0,0,s*join_angle/2]) {
+ rotate([-90,0,0])
+ translate([0,0,linero])
+ cylinder(d=ld,h=epsilon,$fn=ld*PI*4);
+ }
+ rotate([90,0,0])
+ cylinder(d=ld,h=epsilon,$fn=ld*PI*4);
+ }
+ }
+}
+
+if(false) {
+ difference() {
+ the_mixer();
+ cylinder(d=100,h=100);
+ }
+}else
+ the_mixer();