summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--volcano.scad47
1 files changed, 44 insertions, 3 deletions
diff --git a/volcano.scad b/volcano.scad
index 00ff64e..3c0ff04 100644
--- a/volcano.scad
+++ b/volcano.scad
@@ -19,26 +19,38 @@ 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() {
+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])
@@ -51,25 +63,38 @@ module heatershape() {
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])
- cylinder(d=volcano_n_d,h=sv+1,$fn=24);
+ 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);
@@ -93,18 +118,34 @@ vol_ = the_w*the_l*the_h
- 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) {
- mold(size=[the_w,the_l,the_h],s=ms,v_protrude=protrude,introffset=(volcano_l-volcano_cutoff_l)*3/4);
+ 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: */