X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=rocket.scad;h=23594977fbc513f9738af15b5e91d9a98ca1fc3b;hb=HEAD;hp=bc763e947cfba8b7996f5705abd54470c73a2a76;hpb=e56fd7c0dba21d55347cb95a26ec2d2bd17ca27d;p=things.git diff --git a/rocket.scad b/rocket.scad index bc763e9..2359497 100644 --- a/rocket.scad +++ b/rocket.scad @@ -2,23 +2,55 @@ // The Estes A8-3 and C6-7 motors have diameter of 17.7 mm, // length 69.5 mm. The Estes Alpha launch pad has rod diameter 3.4 mm. -motor_diam = 17.7 + 0.5; // add some tolerance +motor_diam = 17.7 + 1.2; // add some tolerance motor_len = 69.5 + 0.5; -motor_wall = 2; segment_overlap = 15; -thin_wall = 0.9; // depends on the print width -thick_wall = 2.2*thin_wall; +loose_fit_diam_diff = 1.1; // cylinder with outer diameter d1 + // will fit loosely into the hole with inner diameter + // d1 + loose_fit_diam_diff +tight_fit_diam_diff = 0.4; // cylinder with outer diameter d1 + // will fit tightly into the hole with inner diameter + // d1 + tight_fit_diam_diff -clip_spring_angle = 45; -clip_spring_depth = 20; +thin_wall = 1.0; // depends on the print width +thick_wall = 2*thin_wall + loose_fit_diam_diff/2; + // motor_diam + 2*thick_wall is the outer diameter of the rocket +motor_wall = thick_wall; // above the motor -rod_diam = 4; +clip_height = 3.5; +clip_width = 1.2; +clip_clearance = 1.0; +clip_inner_space = motor_diam/2 - 1.5; + +rod_diam = 3.4 + 1; rubber_beam_height = 3; +rubber_beam_width = 1.5; + +fin_thickness = 1.5; eps = 0.01; -infty = 1000; +infty = 250; + +// rod holder + +module rod_holder() { + // rod hole holder + hull() { + translate([motor_diam/2 + thick_wall + thin_wall + rod_diam/2, 0, 0]) + cylinder(r = rod_diam/2 + thin_wall, h = thick_wall); + translate([motor_diam/2 + thick_wall - thin_wall - rod_diam/2, 0, 0]) + + cylinder(r = rod_diam/2 + thin_wall, h = 3*thick_wall); + } +} + +module rod_hole() { + // rod hole + translate([motor_diam/2 + thick_wall + thin_wall + eps + rod_diam/2, 0, 0]) + cylinder(r = rod_diam/2, h = infty); +} //----------------- MOTOR MODULE ----------------------------- @@ -27,7 +59,7 @@ module fin() { h2 = 20, // far end height h_off = motor_len, // height offset of the far height w = 30, // distance of the far height - fin_w = thin_wall) + fin_w = fin_thickness) translate([0, -fin_w/2, -h1]) hull() { cube([eps, fin_w, h1]); // near end @@ -42,7 +74,7 @@ module fin2() { w2 = 23, // bottom/far end width h_off = 60, // height offset of the far height w = 30, // distance of the far height - fin_w = thin_wall) + fin_w = fin_thickness) translate([0, -fin_w/2, -h1]) hull() { cube([eps, fin_w, h1]); // near end @@ -51,49 +83,32 @@ module fin2() { }; }; -rod_hole_height = 15; +rod_hole_height = 20; rod_hole_side = 1.5*(rod_diam + thin_wall); module motor_module_solid() { - // the lowest part is for joining the segments - cylinder(r = motor_diam/2 + thin_wall, h = segment_overlap + eps); + // cone from loose_fit to tight fit, 1/3 of segment overlap + cylinder(r1 = motor_diam/2 + thin_wall, + r2 = motor_diam/2 + thick_wall - thin_wall - tight_fit_diam_diff/2, + h = segment_overlap/3 + eps); + + // tight fit cylinder, 2/3 of segment overlap + translate([0, 0, segment_overlap/3]) + cylinder(r = motor_diam/2 + thick_wall - thin_wall - tight_fit_diam_diff/2, + h = 2*segment_overlap/3 + eps); // conical joint between the two cylinders translate([0, 0, segment_overlap - thick_wall + thin_wall]) - cylinder(r1 = motor_diam/2 + thin_wall, + cylinder(r1 = motor_diam/2 + thick_wall - thin_wall - tight_fit_diam_diff/2, r2 = motor_diam/2 + thick_wall, h = thick_wall - thin_wall + eps); - // protrusions to hold the main tube in place - for (a = [60, 180, 300]) { - rotate([0, 0, a]) { - translate([motor_diam/2 + thick_wall - thin_wall/2 - thick_wall, 0, 0]) - cylinder(r1 = thick_wall-thin_wall/2, r2 = thick_wall, h = segment_overlap/3 + eps); - translate([motor_diam/2 + thick_wall - thin_wall/2 - thick_wall, 0, segment_overlap/3]) - cylinder(r = thick_wall, h = 2*segment_overlap/3 + eps); - }; - }; - // the thick cylinder above it translate([0, 0, segment_overlap]) cylinder(r = motor_diam/2 + thick_wall, h = motor_len + motor_wall - segment_overlap); - // clip spring - translate([0, 0, motor_len + motor_wall]) - intersection() { - translate([motor_diam/2+6, infty/2, 4]) - rotate([90, 0, 0]) - cylinder(r = 8, h = infty); - cylinder(r = motor_diam/2 + thick_wall, h = infty); - rotate([0, 0, -clip_spring_angle/2+eps]) - cube(infty); - rotate([0, 0, clip_spring_angle/2-eps]) - scale([1, -1, 1]) - cube([infty, infty, 8]); - }; - // fins for (a = [60, 180, 300]) { rotate([0, 0, a]) @@ -102,21 +117,20 @@ module motor_module_solid() fin2(); }; - // rod hole holder - hull() { - translate([motor_diam/2 + thick_wall - rod_diam/2 - thin_wall, - 0, segment_overlap]) - scale([1, 1.4, 1]) - cylinder(r = rod_diam/2 + thin_wall, h = eps); - translate([motor_diam/2 + thick_wall + rod_diam/2, 0, segment_overlap + rod_hole_side]) - scale([1, 1.1, 1]) - cylinder(r = rod_diam/2 + thin_wall, h = rod_hole_height); - translate([motor_diam/2 + thick_wall - rod_diam/2 - thin_wall, - 0, segment_overlap + 2*rod_hole_side + rod_hole_height]) - scale([1, 1.4, 1]) - cylinder(r = rod_diam/2 + thin_wall, h = eps); + // motor clip + for (angle = [120, -120]) rotate([0, 0, angle]) intersection() { + translate([clip_inner_space, -infty/2, + motor_len + motor_wall + clip_clearance]) + cube([clip_width, infty, clip_height]); + rotate([0, 0, -60]) + translate([-infty/2, 0, 0]) cube(infty); + rotate([0, 0, -120]) + translate([-infty/2, 0, 0]) cube(infty); }; + translate([0, 0, motor_len + motor_wall]) + scale([1, 1, -1]) + rod_holder(); }; module motor_module() { @@ -145,36 +159,22 @@ module motor_module() { cylinder(r = 3, h = infty); }; - // clip spring - for (r = [-clip_spring_angle/2, clip_spring_angle/2]) { - rotate([0, 0, r]) - translate([-thin_wall/2, 0, motor_len + motor_wall - clip_spring_depth]) - cube([infty, thin_wall, infty]); - }; - translate([0, 0, motor_len - eps]) - intersection() { - cylinder(r = motor_diam/2, - h = thick_wall + 2*eps); - rotate([0, 0, -clip_spring_angle/2+eps]) - cube(infty); - rotate([0, 0, clip_spring_angle/2-eps]) - scale([1, -1, 1]) - cube([infty, infty, 8]); - }; - - - // rod hole - translate([motor_diam/2 + thick_wall + eps + rod_diam/2, 0, 0]) - cylinder(r = rod_diam/2, h = infty); + rod_hole(); }; }; // -------------------- CENTRAL TUBE --------------------- -central_tube_h = 85; +central_tube_h = 97; + +central_clip_r = 12; +central_clip_w = 4; +central_clip_wall = 1.5; +central_clip_clearance = 2.5; module central_tube_solid() { cylinder(r = motor_diam/2 + thick_wall, h = central_tube_h); + rod_holder(); }; module central_tube() { @@ -183,13 +183,7 @@ module central_tube() { translate([0, 0, -eps]) cylinder(r = motor_diam/2 + thick_wall - thin_wall, h = infty); - }; - // rubber band holder - intersection() { - cylinder(r = motor_diam/2 + thick_wall - eps, h = central_tube_h); - translate([motor_diam/2-thin_wall, -infty/2, - segment_overlap + thick_wall]) - cube([thin_wall, infty, rubber_beam_height]); + rod_hole(); }; }; @@ -218,7 +212,7 @@ module front_cone_body() { translate([0, 0, segment_overlap]) bezier_cone([ [ 0, motor_diam/2 + thick_wall ], // start - [ cone_h/2, motor_diam/2 + thick_wall ], // cp 1 + [ cone_h/4, motor_diam/2 + thick_wall ], // cp 1 [ cone_h - motor_diam/2 - thick_wall, motor_diam/2 + thick_wall ], // cp 2 [ cone_h, 0 ], ], 40); @@ -238,7 +232,7 @@ module front_cone() { translate([0, 0, segment_overlap]) bezier_cone([ [ 0.7*thin_wall, motor_diam/2 + thick_wall - thin_wall ], // start - [ cone_h/2-0.7*thin_wall, motor_diam/2 + thick_wall - thin_wall], // cp 1 + [ cone_h/4-0.7*thin_wall, motor_diam/2 + thick_wall - thin_wall], // cp 1 [ cone_h - motor_diam/2 - thick_wall + thin_wall - 1.4*thin_wall, motor_diam/2 + thick_wall - thin_wall ], // cp 2 [ cone_h - 1.4*thin_wall, 0 ], ], 40); @@ -254,37 +248,21 @@ module front_cone() { translate([0, 0, -eps]) cylinder(r = motor_diam/2, h = segment_overlap + 2*eps); }; - // rubber band holder - intersection() { - cylinder(r = motor_diam/2 + thin_wall/2, h = segment_overlap); - translate([motor_diam/3-thin_wall/2, -infty/2, - segment_overlap/2 - rubber_beam_height/2]) - cube([thin_wall, infty, rubber_beam_height]); - }; }; -module thread_holder() { - rotate([0, 90, 0]) { - translate([0, 0, -1.5]) difference() { - cylinder(r = 10, h = 3); - translate([0, 0, -eps]) - cylinder(r = 8, h = 3 + 2*eps); - }; - }; -} +debug = 0; -// thread_holder(); - -/* +if (debug == 1) { // debug -difference() { - // front_cone(); - // central_tube(); +difference($fn = 16) { + front_cone(); + central_tube(); motor_module(); - translate([0, 0, -eps]) cube(infty); + translate([0, 0, -infty/2]) cube(infty); }; -*/ + +} else { // production $fn = 128; @@ -299,3 +277,5 @@ translate([motor_diam + thick_wall, 0, 0]) rotate([0, 0, 240]) translate([motor_diam + thick_wall, 0, 0]) front_cone(); + +}