-rw-r--r-- | mixer.scad | 88 |
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(); |