1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
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();
|