summaryrefslogtreecommitdiff
authorMichael Krelin <hacker@klever.net>2017-10-31 22:22:38 (UTC)
committer Michael Krelin <hacker@klever.net>2017-10-31 22:22:38 (UTC)
commit5539359e3a7a4437e043854865fc254209d1cb86 (patch) (side-by-side diff)
tree715aa476b433773971d05f5755303b0c5126bfe0
parent91595f88cbae50b7f12821f947b55c17d8c50dd7 (diff)
downloadextrudery-5539359e3a7a4437e043854865fc254209d1cb86.zip
extrudery-5539359e3a7a4437e043854865fc254209d1cb86.tar.gz
extrudery-5539359e3a7a4437e043854865fc254209d1cb86.tar.bz2
material mixer: embedded pushfits support
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--mixer-embedded.scad10
-rw-r--r--mixer-threaded.scad3
-rw-r--r--mixer.scad40
3 files changed, 44 insertions, 9 deletions
diff --git a/mixer-embedded.scad b/mixer-embedded.scad
new file mode 100644
index 0000000..397572f
--- a/dev/null
+++ b/mixer-embedded.scad
@@ -0,0 +1,10 @@
+extrusion_width=.4;
+
+use <mixer.scad>;
+
+the_mixer(
+ pushfit_type="embedded",
+ pushfit_d = 12,
+ pushfit_h = 7,
+ interpushfit = extrusion_width
+);
diff --git a/mixer-threaded.scad b/mixer-threaded.scad
new file mode 100644
index 0000000..ff3c0aa
--- a/dev/null
+++ b/mixer-threaded.scad
@@ -0,0 +1,3 @@
+use <mixer.scad>;
+
+the_mixer();
diff --git a/mixer.scad b/mixer.scad
index 3200023..7b2e5d4 100644
--- a/mixer.scad
+++ b/mixer.scad
@@ -1,88 +1,110 @@
-layer_height=0.2; extrusion_width=0.4;
+layer_height=0.2; extrusion_width=0.45;
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,
+ pushfit_type = "threaded", // threaded|embedded
+ pushfit_ring_h = 4.7, // height of embedded pushfit ring
+ pushfit_insert_d = 8, // diameter of pushfit insert legs hole
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
+ interpushfit = 2*extrusion_width, // space between two pushfit holes
+ pushfit_s = 2, // shell around pushfit holes
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);
}
}
+ module pushfit() {
+ if(pushfit_type=="threaded") {
+ pushfit_thread(h=pushfit_h);
+ }else if(pushfit_type=="embedded") {
+ translate([0,0,pushfit_h-pushfit_ring_h])
+ cylinder(d=pushfit_d,h=pushfit_ring_h,$fn=pushfit_d*PI*2);
+ cylinder(d=pushfit_insert_d,h=pushfit_h,$fn=pushfit_insert_d*PI*2);
+ }
+ }
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
+ pfoo = pushfit_type=="threaded" ? 0 : (pushfit_h-pushfit_ring_h); // offset of pushfit offset
+ pfo = pfR/tan(join_angle/2)-pfoo; // 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);
+ pushfit();
}
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);
+ pushfit();
}
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) {
+module this() {
+ the_mixer(
+ pushfit_type="embedded",
+ pushfit_d = 12,
+ pushfit_h = 7,
+ interpushfit = extrusion_width
+ );
+}
+
+if(!false) {
difference() {
- the_mixer();
+ this();
cylinder(d=100,h=100);
}
}else
- the_mixer();
+ this();