-rw-r--r-- | volcano.scad | 53 |
1 files changed, 47 insertions, 6 deletions
diff --git a/volcano.scad b/volcano.scad index 00ff64e..3c0ff04 100644 --- a/volcano.scad +++ b/volcano.scad | |||
@@ -15,65 +15,90 @@ volcano_hs_d = 5.7; // and their diameter | |||
15 | volcano_hs_t = 1.5; // and thickness | 15 | volcano_hs_t = 1.5; // and thickness |
16 | volcano_hs_offset_l = volcano_l-2.5;// heater screw offset from the front along the length axis | 16 | volcano_hs_offset_l = volcano_l-2.5;// heater screw offset from the front along the length axis |
17 | volcano_ts_d = 7; // Thermistor screw diameter | 17 | volcano_ts_d = 7; // Thermistor screw diameter |
18 | volcano_ts_t = 2.6; // Thermistor screw thickness | 18 | volcano_ts_t = 2.6; // Thermistor screw thickness |
19 | volcano_ts_h = volcano_h-12; // Thermistor screw offset from the bottom of the heater | 19 | volcano_ts_h = volcano_h-12; // Thermistor screw offset from the bottom of the heater |
20 | volcano_ts_offset_l = volcano_l-11.5;// Thermistor screw offset from the front along the length axis | 20 | volcano_ts_offset_l = volcano_l-11.5;// Thermistor screw offset from the front along the length axis |
21 | volcano_cutoff_t = 1.5; // Cutoff on the top thickness (depth) | 21 | volcano_cutoff_t = 1.5; // Cutoff on the top thickness (depth) |
22 | volcano_cutoff_l = 8; // Length of the cutoff (the cutoff is on the back) | 22 | volcano_cutoff_l = 8; // Length of the cutoff (the cutoff is on the back) |
23 | 23 | ||
24 | sv=volcano_c_t+ss; // shell vertical | 24 | sv=volcano_c_t+ss; // shell vertical |
25 | sh=ss; // shell horizontal | 25 | sh=ss; // shell horizontal |
26 | 26 | ||
27 | the_w = volcano_w+volcano_ts_t+volcano_hs_t+2*sh; | 27 | the_w = volcano_w+volcano_ts_t+volcano_hs_t+2*sh; |
28 | the_l = volcano_l+2*sh; | 28 | the_l = volcano_l+2*sh; |
29 | the_h = volcano_h+sv; | 29 | the_h = volcano_h+sv; |
30 | 30 | ||
31 | /* Nozzle stuff */ | ||
32 | n_protrude = 0.4;// nozzle tip protrusion from silicone | ||
33 | n_h1 = 3; // nozzle cone base from the heater body (minimal) | ||
34 | n_cone_h = 2; // nozzle cone height | ||
35 | n_cone_d2 = 1; // pad diameter of the 0.4 nozzle (works up to 0.6); see | ||
36 | // http://wiki.e3d-online.com/images/3/3a/V6-NOZZLE-ALL.pdf | ||
37 | |||
38 | n_cone_d1 = n_cone_h * tan(40) * 2 + n_cone_d2; | ||
39 | codpiece_h = n_h1 + n_cone_h - n_protrude; | ||
40 | |||
41 | codpiece=true; | ||
42 | |||
31 | use <bubbles.scad>; | 43 | use <bubbles.scad>; |
32 | module heatershape() { | 44 | module heatershape(codpiece=codpiece) { |
33 | difference() { | 45 | difference() { |
34 | union() { // main body and protrusion | 46 | union() { // main body and protrusion |
35 | cube(size=[volcano_w,volcano_l,volcano_h]); | 47 | cube(size=[volcano_w,volcano_l,volcano_h]); |
36 | translate([0,0,volcano_h]) { | 48 | translate([0,0,volcano_h]) { |
37 | pt = [volcano_w,volcano_l-volcano_cutoff_l,protrude]; | 49 | pt = [volcano_w,volcano_l-volcano_cutoff_l,protrude]; |
38 | translate([0,0,-1]) | 50 | translate([0,0,-1]) |
39 | cube(size=[pt[0],pt[1],pt[2]+1]); | 51 | cube(size=[pt[0],pt[1],pt[2]+1]); |
40 | hull() { | 52 | hull() { |
41 | cube(size=pt); | 53 | cube(size=pt); |
42 | translate([-volcano_hs_t-sh,0,max(volcano_ts_t,volcano_hs_t)+sh]) | 54 | translate([-volcano_hs_t-sh,0,max(volcano_ts_t,volcano_hs_t)+sh]) |
43 | cube(size=[the_w,pt[1],pt[2]-max(volcano_ts_t,volcano_hs_t)-sh]); | 55 | cube(size=[the_w,pt[1],pt[2]-max(volcano_ts_t,volcano_hs_t)-sh]); |
44 | translate([0,-sh,sh]) | 56 | translate([0,-sh,sh]) |
45 | cube(size=[pt[0],pt[1]+2*sh,pt[2]-sh]); | 57 | cube(size=[pt[0],pt[1]+2*sh,pt[2]-sh]); |
46 | } | 58 | } |
47 | } | 59 | } |
48 | } | 60 | } |
49 | // cutoff on top | 61 | // cutoff on top |
50 | translate([-1,volcano_l-volcano_cutoff_l+volcano_cutoff_t,volcano_h-volcano_cutoff_t]) { | 62 | translate([-1,volcano_l-volcano_cutoff_l+volcano_cutoff_t,volcano_h-volcano_cutoff_t]) { |
51 | cube(size=[volcano_w+2,volcano_cutoff_l-volcano_cutoff_t+1,volcano_cutoff_t+1]); | 63 | cube(size=[volcano_w+2,volcano_cutoff_l-volcano_cutoff_t+1,volcano_cutoff_t+1]); |
52 | translate([0,0,volcano_cutoff_t]) | 64 | translate([0,0,volcano_cutoff_t]) |
53 | rotate([0,90,0]) | 65 | rotate([0,90,0]) |
54 | cylinder(r=volcano_cutoff_t,h=volcano_w+2,$fn=24); | 66 | cylinder(r=volcano_cutoff_t,h=volcano_w+2,$fn=24); |
55 | } | 67 | } |
56 | // screwhole on top of protrusion | 68 | // screwhole on top of protrusion |
57 | translate([volcano_w/2,(volcano_l-volcano_cutoff_l)/2,volcano_h+protrude+2]) | 69 | translate([volcano_w/2,(volcano_l-volcano_cutoff_l)/2,volcano_h+protrude+2]) |
58 | mirror([0,0,1]) | 70 | mirror([0,0,1]) |
59 | cylinder(d=3,h=protrude+1); | 71 | cylinder(d=3,h=protrude+1); |
60 | } | 72 | } |
61 | // nozzle | 73 | // nozzle |
62 | translate([volcano_n_offset_w,volcano_n_offset_l,-sv]) | 74 | translate([volcano_n_offset_w,volcano_n_offset_l,-sv]) |
63 | cylinder(d=volcano_n_d,h=sv+1,$fn=24); | 75 | if(codpiece) { |
76 | translate([0,0,sv]) mirror([0,0,1]) { | ||
77 | translate([0,0,-1]) cylinder(d=volcano_n_d,h=n_h1+1,$fn=32); | ||
78 | translate([0,0,n_h1-epsilon]) cylinder(d1=n_cone_d1,d2=n_cone_d2+n_protrude*tan(40)*2,h=n_cone_h-n_protrude,$fn=32); | ||
79 | } | ||
80 | /* | ||
81 | mc_d2 = n_cone_d2 + n_protrude * tan(40) * 2; | ||
82 | intersection() { | ||
83 | cylinder(d = volcano_n_d, h = n_h1 + 1 + epsilon, $fn=24); | ||
84 | translate([0,0,-n_h1]) cylinder(d2 = volcano_n_d * 2, d1 = 0, h = n_h1 * 2 + 1, $fn=24); | ||
85 | } | ||
86 | mirror([0,0,1]) translate([0,0,-epsilon]) cylinder(h = n_cone_h - n_protrude, d1 = n_cone_d1, d2 = mc_d2, $fn = 32); | ||
87 | */ | ||
88 | }else cylinder(d=volcano_n_d,h=sv+1,$fn=24); | ||
64 | // cartridge | 89 | // cartridge |
65 | translate([volcano_c_offset_w,volcano_c_offset_l,-volcano_c_t]) | 90 | translate([volcano_c_offset_w,volcano_c_offset_l,-volcano_c_t]) |
66 | cylinder(d=volcano_c_d,h=volcano_c_t+1,$fn=24); | 91 | cylinder(d=volcano_c_d,h=volcano_c_t+1,$fn=24); |
67 | // heatblock screws | 92 | // heatblock screws |
68 | for(h=volcano_hs_h) | 93 | for(h=volcano_hs_h) |
69 | translate([1,volcano_hs_offset_l,h]) | 94 | translate([1,volcano_hs_offset_l,h]) |
70 | rotate([0,-90,0]) | 95 | rotate([0,-90,0]) |
71 | cylinder(d=volcano_hs_d,h=volcano_hs_t+1,$fn=24); | 96 | cylinder(d=volcano_hs_d,h=volcano_hs_t+1,$fn=24); |
72 | // thermistor screw | 97 | // thermistor screw |
73 | translate([volcano_w-1,volcano_ts_offset_l,volcano_ts_h]) | 98 | translate([volcano_w-1,volcano_ts_offset_l,volcano_ts_h]) |
74 | rotate([0,90,0]) | 99 | rotate([0,90,0]) |
75 | cylinder(d=volcano_ts_d,h=volcano_ts_t+1,$fn=24); | 100 | cylinder(d=volcano_ts_d,h=volcano_ts_t+1,$fn=24); |
76 | bubbles(size=[volcano_w,sh/2,volcano_h]); | 101 | bubbles(size=[volcano_w,sh/2,volcano_h]); |
77 | translate([0,volcano_l,0]) bubbles(size=[volcano_w,sh/2,volcano_h-volcano_cutoff_t]); | 102 | translate([0,volcano_l,0]) bubbles(size=[volcano_w,sh/2,volcano_h-volcano_cutoff_t]); |
78 | for(x=[0,volcano_w]) translate([x,0,0]) | 103 | for(x=[0,volcano_w]) translate([x,0,0]) |
79 | rotate([0,0,90]) bubbles(size=[volcano_l,(volcano_hs_t+sh)/2,volcano_h-volcano_cutoff_t]); | 104 | rotate([0,0,90]) bubbles(size=[volcano_l,(volcano_hs_t+sh)/2,volcano_h-volcano_cutoff_t]); |
@@ -89,22 +114,38 @@ use <mold.scad>; | |||
89 | 114 | ||
90 | vol_ = the_w*the_l*the_h | 115 | vol_ = the_w*the_l*the_h |
91 | - volcano_w*volcano_l*volcano_h // heater block | 116 | - volcano_w*volcano_l*volcano_h // heater block |
92 | + volcano_w*volcano_cutoff_t*volcano_cutoff_l// cutoff | 117 | + volcano_w*volcano_cutoff_t*volcano_cutoff_l// cutoff |
93 | - PI*pow(volcano_n_d/2,2)*sv // nozzle | 118 | - PI*pow(volcano_n_d/2,2)*sv // nozzle |
94 | - PI*pow(volcano_c_d/2,2)*volcano_c_t // cartridge | 119 | - PI*pow(volcano_c_d/2,2)*volcano_c_t // cartridge |
95 | - PI*pow(volcano_ts_d/2,2)*volcano_ts_t// thermistor screw | 120 | - PI*pow(volcano_ts_d/2,2)*volcano_ts_t// thermistor screw |
96 | - PI*pow(volcano_hs_d/2,2)*volcano_hs_t *2// heater screws | 121 | - PI*pow(volcano_hs_d/2,2)*volcano_hs_t *2// heater screws |
97 | ; | 122 | ; |
98 | vol = vol_*1.2; | 123 | vol = vol_*1.2; |
99 | echo("volume",vol); | 124 | echo("volume",vol); |
100 | 125 | ||
101 | use <view.scad>; | 126 | use <view.scad>; |
102 | 127 | ||
103 | view="*"; | 128 | view="*"; |
104 | 129 | ||
105 | view(view=view,volume=vol) { | 130 | difference() { |
106 | mold(size=[the_w,the_l,the_h],s=ms,v_protrude=protrude,introffset=(volcano_l-volcano_cutoff_l)*3/4); | 131 | view(view=view,volume=vol) { |
107 | translate([ms+volcano_hs_t+sh,ms+sh,ms+sv]) heatershape(); | 132 | difference() { |
108 | translate([ms+epsilon,ms+epsilon,ms+epsilon]) cube(size=[the_w-2*epsilon,the_l-2*epsilon,the_h]); | 133 | union() { |
134 | echo("ch",volcano_n_offset_l+sh-volcano_n_d/2-1); | ||
135 | mold(size=[the_w,the_l,the_h],s=ms,v_protrude=protrude,introffset=(volcano_l-volcano_cutoff_l)*3/4, | ||
136 | chamfer = volcano_n_offset_l+sh-volcano_n_d/2-1); | ||
137 | if(codpiece) | ||
138 | translate([0,0,-codpiece_h+sv]) | ||
139 | cube([the_w + ms*2,the_l + ms*2, codpiece_h - sv + epsilon]); | ||
140 | } | ||
141 | if(codpiece) | ||
142 | translate([ms+ss+volcano_hs_t+volcano_n_offset_w,ms+ss+volcano_n_offset_l,ms]) | ||
143 | scale([1,1,2*(codpiece_h-sv)/(volcano_n_d+2)]) | ||
144 | sphere(d=volcano_n_d+2,$fn=64); | ||
145 | } | ||
146 | translate([ms+volcano_hs_t+sh,ms+sh,ms+sv]) heatershape(); | ||
147 | translate([ms+epsilon,ms+epsilon,ms+epsilon]) cube(size=[the_w-2*epsilon,the_l-2*epsilon,the_h]); | ||
148 | } | ||
149 | * translate([ss+sh+volcano_w/2,-1,-2]) cube(size=[40,40,40]); | ||
109 | } | 150 | } |
110 | /* vim:set ai sw=1: */ | 151 | /* vim:set ai sw=1: */ |