summaryrefslogtreecommitdiff
path: root/volcano.scad
blob: 3c0ff04318d8e7d632b5cdcfce01dcdc47560826 (plain)
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
include <stuff.scad>;

volcano_l = 20;				// length (along Y axis)
volcano_w = 11.5;			// width (along X axis)
volcano_h = 20;				// height (guess!)
volcano_n_offset_w = 4.5;		// nozzle offset from the left edge along width axis
volcano_n_offset_l = volcano_l-15.5;	// nozzle offset from the front along length axis
volcano_c_offset_w = 4;			// cartridge offset from the left edge along width axis
volcano_c_offset_l = volcano_l-8;	// cartridge offset from the front along the length axis
volcano_c_d = 6.1;			// cartridge diameter
volcano_n_d = 7/cos(30);		// nozzle (outermost) diameter
volcano_c_t = 2;			// cartridge thickness (of the protruding part)
volcano_hs_h = [volcano_h-14.5,volcano_h-5.5];	// the heater screws offsets from the bottom of the heater
volcano_hs_d = 5.7;			// and their diameter
volcano_hs_t = 1.5;			// and thickness
volcano_hs_offset_l = volcano_l-2.5;	// heater screw offset from the front along the length axis
volcano_ts_d = 7;			// Thermistor screw diameter
volcano_ts_t = 2.6;			// Thermistor screw thickness
volcano_ts_h = volcano_h-12;		// Thermistor screw offset from the bottom of the heater
volcano_ts_offset_l = volcano_l-11.5;	// Thermistor screw offset from the front along the length axis
volcano_cutoff_t = 1.5;			// Cutoff on the top thickness (depth)
volcano_cutoff_l = 8;			// Length of the cutoff (the cutoff is on the back)

sv=volcano_c_t+ss;      // shell vertical
sh=ss;	                // shell horizontal

the_w = volcano_w+volcano_ts_t+volcano_hs_t+2*sh;
the_l = volcano_l+2*sh;
the_h = volcano_h+sv;

/* Nozzle stuff */
n_protrude = 0.4;	// nozzle tip protrusion from silicone
n_h1 = 3;		// nozzle cone base from the heater body (minimal)
n_cone_h = 2;		// nozzle cone height
n_cone_d2 = 1;		// pad diameter of the 0.4 nozzle (works up to 0.6); see
			// http://wiki.e3d-online.com/images/3/3a/V6-NOZZLE-ALL.pdf

n_cone_d1 = n_cone_h * tan(40) * 2 + n_cone_d2;
codpiece_h = n_h1 + n_cone_h - n_protrude;

codpiece=true;

use <bubbles.scad>;
module heatershape(codpiece=codpiece) {
 difference() {
  union() { // main body and protrusion
   cube(size=[volcano_w,volcano_l,volcano_h]);
   translate([0,0,volcano_h]) {
    pt = [volcano_w,volcano_l-volcano_cutoff_l,protrude];
    translate([0,0,-1])
    cube(size=[pt[0],pt[1],pt[2]+1]);
    hull() {
     cube(size=pt);
     translate([-volcano_hs_t-sh,0,max(volcano_ts_t,volcano_hs_t)+sh])
     cube(size=[the_w,pt[1],pt[2]-max(volcano_ts_t,volcano_hs_t)-sh]);
     translate([0,-sh,sh])
     cube(size=[pt[0],pt[1]+2*sh,pt[2]-sh]);
    }
   }
  }
  // cutoff on top
  translate([-1,volcano_l-volcano_cutoff_l+volcano_cutoff_t,volcano_h-volcano_cutoff_t]) {
   cube(size=[volcano_w+2,volcano_cutoff_l-volcano_cutoff_t+1,volcano_cutoff_t+1]);
   translate([0,0,volcano_cutoff_t])
   rotate([0,90,0])
   cylinder(r=volcano_cutoff_t,h=volcano_w+2,$fn=24);
  }
  // screwhole on top of protrusion
  translate([volcano_w/2,(volcano_l-volcano_cutoff_l)/2,volcano_h+protrude+2])
  mirror([0,0,1])
  cylinder(d=3,h=protrude+1);
 }
 // nozzle
 translate([volcano_n_offset_w,volcano_n_offset_l,-sv])
 if(codpiece) {
  translate([0,0,sv]) mirror([0,0,1]) {
   translate([0,0,-1]) cylinder(d=volcano_n_d,h=n_h1+1,$fn=32);
   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);
  }
  /*
  mc_d2 = n_cone_d2 + n_protrude * tan(40) * 2;
  intersection() {
   cylinder(d = volcano_n_d, h = n_h1 + 1 + epsilon, $fn=24);
   translate([0,0,-n_h1]) cylinder(d2 = volcano_n_d * 2, d1 = 0, h = n_h1 * 2 + 1, $fn=24);
  }
  mirror([0,0,1]) translate([0,0,-epsilon]) cylinder(h = n_cone_h - n_protrude, d1 = n_cone_d1, d2 = mc_d2, $fn = 32);
  */
 }else cylinder(d=volcano_n_d,h=sv+1,$fn=24);
 // cartridge
 translate([volcano_c_offset_w,volcano_c_offset_l,-volcano_c_t])
 cylinder(d=volcano_c_d,h=volcano_c_t+1,$fn=24);
 // heatblock screws
 for(h=volcano_hs_h)
  translate([1,volcano_hs_offset_l,h])
  rotate([0,-90,0])
  cylinder(d=volcano_hs_d,h=volcano_hs_t+1,$fn=24);
 // thermistor screw
 translate([volcano_w-1,volcano_ts_offset_l,volcano_ts_h])
 rotate([0,90,0])
 cylinder(d=volcano_ts_d,h=volcano_ts_t+1,$fn=24);
 bubbles(size=[volcano_w,sh/2,volcano_h]);
 translate([0,volcano_l,0]) bubbles(size=[volcano_w,sh/2,volcano_h-volcano_cutoff_t]);
 for(x=[0,volcano_w]) translate([x,0,0])
 rotate([0,0,90]) bubbles(size=[volcano_l,(volcano_hs_t+sh)/2,volcano_h-volcano_cutoff_t]);
 rotate([-90,0,0])
 bubbles(size=[volcano_w,sv/2,volcano_l]);
}
module silicone() {
 translate([-sh-volcano_hs_t,-sh,-sv])
 cube(size=[the_w,the_l,the_h-epsilon]);
}

use <mold.scad>;

vol_ = the_w*the_l*the_h
 - volcano_w*volcano_l*volcano_h		// heater block
 + volcano_w*volcano_cutoff_t*volcano_cutoff_l	// cutoff
 - PI*pow(volcano_n_d/2,2)*sv			// nozzle
 - PI*pow(volcano_c_d/2,2)*volcano_c_t		// cartridge
 - PI*pow(volcano_ts_d/2,2)*volcano_ts_t	// thermistor screw
 - PI*pow(volcano_hs_d/2,2)*volcano_hs_t *2	// heater screws
;
vol = vol_*1.2;
echo("volume",vol);

use <view.scad>;

view="*";

difference() {
 view(view=view,volume=vol) {
  difference() {
   union() {
   echo("ch",volcano_n_offset_l+sh-volcano_n_d/2-1);
    mold(size=[the_w,the_l,the_h],s=ms,v_protrude=protrude,introffset=(volcano_l-volcano_cutoff_l)*3/4,
     chamfer = volcano_n_offset_l+sh-volcano_n_d/2-1);
    if(codpiece)
     translate([0,0,-codpiece_h+sv])
     cube([the_w + ms*2,the_l + ms*2, codpiece_h - sv + epsilon]);
   }
   if(codpiece)
    translate([ms+ss+volcano_hs_t+volcano_n_offset_w,ms+ss+volcano_n_offset_l,ms])
    scale([1,1,2*(codpiece_h-sv)/(volcano_n_d+2)])
    sphere(d=volcano_n_d+2,$fn=64);
  }
  translate([ms+volcano_hs_t+sh,ms+sh,ms+sv]) heatershape();
  translate([ms+epsilon,ms+epsilon,ms+epsilon]) cube(size=[the_w-2*epsilon,the_l-2*epsilon,the_h]);
 }
 * translate([ss+sh+volcano_w/2,-1,-2]) cube(size=[40,40,40]);
}
/* vim:set ai sw=1: */