summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--Makefile1
-rw-r--r--fanduct.scad3
2 files changed, 3 insertions, 1 deletions
diff --git a/Makefile b/Makefile
index 998b0ac..c52cfe7 100644
--- a/Makefile
+++ b/Makefile
@@ -1,15 +1,16 @@
1-include Makefile.local 1-include Makefile.local
2 2
3OPENSCAD_APP?=/Applications/OpenSCAD.app 3OPENSCAD_APP?=/Applications/OpenSCAD.app
4OPENSCAD_BIN?=${OPENSCAD_APP}/Contents/MacOS/OpenSCAD 4OPENSCAD_BIN?=${OPENSCAD_APP}/Contents/MacOS/OpenSCAD
5OPENSCAD_FLAGS=-D draft=false
5 6
6default: fanduct-circular.stl fanduct-3jets.stl fanduct-dual.stl 7default: fanduct-circular.stl fanduct-3jets.stl fanduct-dual.stl
7 8
8clean: 9clean:
9 rm -f *.stl 10 rm -f *.stl
10 11
11fanduct-%.stl: fanduct-%.scad fanduct.scad 12fanduct-%.stl: fanduct-%.scad fanduct.scad
12 13
13 14
14%.stl: %.scad 15%.stl: %.scad
15 ${OPENSCAD_BIN} ${OPENSCAD_FLAGS} -o "$@" "$<" 16 ${OPENSCAD_BIN} ${OPENSCAD_FLAGS} -o "$@" "$<"
diff --git a/fanduct.scad b/fanduct.scad
index 690a4c8..8d0414f 100644
--- a/fanduct.scad
+++ b/fanduct.scad
@@ -1,91 +1,92 @@
1use <snapper.scad>; 1use <snapper.scad>;
2 extrusion_width=.5; layer_height=.2; // print parameters 2 extrusion_width=.5; layer_height=.2; // print parameters
3 3
4 epsilon=.005; // for finer cuts 4 epsilon=.005; // for finer cuts
5 5
6 type="circular"; // circular|3jets 6 type="circular"; // circular|3jets
7 ductshape="square"; // square|round 7 ductshape="square"; // square|round
8 dual=true; // dual or single 8 dual=true; // dual or single
9 9
10 nozzles_apart = 18; // distance between nozzles for dual hotend 10 nozzles_apart = 18; // distance between nozzles for dual hotend
11 space_behind_nozzle = 10;// space behind the nozzle where we're allowed to go 11 space_behind_nozzle = 10;// space behind the nozzle where we're allowed to go
12 // without the fear of hitting carriage 12 // without the fear of hitting carriage
13 13
14 inlet_w = 12.5; // inlet width 14 inlet_w = 12.5; // inlet width
15 inlet_h = 17; // inlet height 15 inlet_h = 17; // inlet height
16 inlet_short_l = 7;// inlet length of protrusion (or depth of intrusion:)) 16 inlet_short_l = 7;// inlet length of protrusion (or depth of intrusion:))
17 inlet_away = 15;// how far away inlet is 17 inlet_away = 15;// how far away inlet is
18 18
19inlet_long_l = inlet_short_l+inlet_h; 19inlet_long_l = inlet_short_l+inlet_h;
20function hypothenuse(a,b) = sqrt(pow(a,2)+pow(b,2)); 20function hypothenuse(a,b) = sqrt(pow(a,2)+pow(b,2));
21 21
22silicone_shell = 2; 22silicone_shell = 2;
23heater_clearance = dual 23heater_clearance = dual
24 ? max(20,15.5) - 4.5 + silicone_shell 24 ? max(20,15.5) - 4.5 + silicone_shell
25 : max( 25 : max(
26 hypothenuse(16/2 +silicone_shell, 20-4.5 +silicone_shell),// E3D v6 26 hypothenuse(16/2 +silicone_shell, 20-4.5 +silicone_shell),// E3D v6
27 hypothenuse(11.5-4.5 +silicone_shell, 15.5 +silicone_shell)// E3D volcano 27 hypothenuse(11.5-4.5 +silicone_shell, 15.5 +silicone_shell)// E3D volcano
28 ); 28 );
29 29
30 fanduct_elevation = 3; // fanduct elevation above nozzle tip 30 fanduct_elevation = 3; // fanduct elevation above nozzle tip
31 fanduct_blowtarget = -2; // what to blow at 31 fanduct_blowtarget = -2; // what to blow at
32 fanduct_h = 6; // inner height of the duct 32 fanduct_h = 6; // inner height of the duct
33 fanduct_w = 7; // inner width of the duct 33 fanduct_w = 7; // inner width of the duct
34 fanduct_shell=1.2; // shell thickness 34 fanduct_shell=1.2; // shell thickness
35 fanduct_ir = heater_clearance+5; // inner radius 35 fanduct_ir = heater_clearance+5; // inner radius
36 36
37 jet_angle = 60-2; // angular width of the jet 37 jet_angle = 60-2; // angular width of the jet
38 38
39hotend_clearance = heater_clearance; 39hotend_clearance = heater_clearance;
40 40
41 snapper_d = 8; snapper_overlap=0.2;// snip snap 41 snapper_d = 8; snapper_overlap=0.2;// snip snap
42 42
43smooth_f = 120; 43draft=true;
44smooth_f = draft? 30 : 120;
44 45
45to_midduct = fanduct_ir+fanduct_shell+fanduct_w/2; 46to_midduct = fanduct_ir+fanduct_shell+fanduct_w/2;
46dual_spots = [ [+space_behind_nozzle, -(to_midduct+nozzles_apart/2)], 47dual_spots = [ [+space_behind_nozzle, -(to_midduct+nozzles_apart/2)],
47 [- to_midduct, -(to_midduct+nozzles_apart/2)], 48 [- to_midduct, -(to_midduct+nozzles_apart/2)],
48 [- to_midduct, 0] ]; 49 [- to_midduct, 0] ];
49 50
50module fanduct(type=type,ductshape=ductshape,dual=dual) { 51module fanduct(type=type,ductshape=ductshape,dual=dual) {
51 // ***duct is all around! 52 // ***duct is all around!
52 module duct(what) { 53 module duct(what) {
53 module single() { 54 module single() {
54 if(what=="in") { 55 if(what=="in") {
55 sh = fanduct_w+2*fanduct_shell; sv = fanduct_h+2*fanduct_shell; 56 sh = fanduct_w+2*fanduct_shell; sv = fanduct_h+2*fanduct_shell;
56 smax = max(sh,sv); 57 smax = max(sh,sv);
57 rotate_extrude($fn=smooth_f) 58 rotate_extrude($fn=smooth_f)
58 if(ductshape=="round") 59 if(ductshape=="round")
59 translate([sh/2+fanduct_ir,sv/2]) 60 translate([sh/2+fanduct_ir,sv/2])
60 scale([sh/smax,sv/smax]) 61 scale([sh/smax,sv/smax])
61 circle(d=smax,$fn=4*smax); 62 circle(d=smax,$fn=4*smax);
62 else if(ductshape=="square") 63 else if(ductshape=="square")
63 translate([fanduct_ir,0]) 64 translate([fanduct_ir,0])
64 square([sh,sv]); 65 square([sh,sv]);
65 }else if(what=="out") { 66 }else if(what=="out") {
66 sh = fanduct_w; sv = fanduct_h; 67 sh = fanduct_w; sv = fanduct_h;
67 smax = max(sh,sv); 68 smax = max(sh,sv);
68 rotate_extrude($fn=smooth_f) 69 rotate_extrude($fn=smooth_f)
69 if(ductshape=="round") 70 if(ductshape=="round")
70 translate([sh/2+fanduct_shell+fanduct_ir,sv/2+fanduct_shell]) 71 translate([sh/2+fanduct_shell+fanduct_ir,sv/2+fanduct_shell])
71 scale([sh/smax,sv/smax]) 72 scale([sh/smax,sv/smax])
72 circle(d=smax,$fn=4*smax); 73 circle(d=smax,$fn=4*smax);
73 else if(ductshape=="square") 74 else if(ductshape=="square")
74 translate([fanduct_ir+fanduct_shell,fanduct_shell]) 75 translate([fanduct_ir+fanduct_shell,fanduct_shell])
75 union() { 76 union() {
76 square([sh,sv/2]); 77 square([sh,sv/2]);
77 translate([sh/2,sv/2]) 78 translate([sh/2,sv/2])
78 scale([sh/smax,sv/smax]) 79 scale([sh/smax,sv/smax])
79 circle(d=smax,$fn=36); 80 circle(d=smax,$fn=36);
80 } 81 }
81 } 82 }
82 } 83 }
83 module dual() { 84 module dual() {
84 module hulls(spots=dual_spots) { 85 module hulls(spots=dual_spots) {
85 for(my=[0,1]) mirror([0,my,0]) for(pn=[0:1:len(spots)-2]) hull() { 86 for(my=[0,1]) mirror([0,my,0]) for(pn=[0:1:len(spots)-2]) hull() {
86 for(p=[spots[pn],spots[pn+1]]) translate(p) children(); 87 for(p=[spots[pn],spots[pn+1]]) translate(p) children();
87 } 88 }
88 } 89 }
89 if(what=="in") { 90 if(what=="in") {
90 hulls() cylinder(d=fanduct_w+2*fanduct_shell,h=fanduct_h+2*fanduct_shell); 91 hulls() cylinder(d=fanduct_w+2*fanduct_shell,h=fanduct_h+2*fanduct_shell);
91 }else if(what=="out") { 92 }else if(what=="out") {