]> www.fi.muni.cz Git - things.git/commitdiff
Mini arrow fuselage components
authorJan "Yenya" Kasprzak <kas@fi.muni.cz>
Mon, 22 May 2017 14:01:18 +0000 (16:01 +0200)
committerJan "Yenya" Kasprzak <kas@fi.muni.cz>
Mon, 22 May 2017 14:01:18 +0000 (16:01 +0200)
mini-arrow-firewall.scad [new file with mode: 0644]
mini-arrow-fuselage-front.scad [new file with mode: 0644]
mini-arrow-fuselage.scad [new file with mode: 0644]

diff --git a/mini-arrow-firewall.scad b/mini-arrow-firewall.scad
new file mode 100644 (file)
index 0000000..80140e5
--- /dev/null
@@ -0,0 +1,102 @@
+infty = 100;
+eps = 0.01;
+
+motor_d = 28; // unused here, just for reference
+motor_screw_dist1 = 19;
+motor_screw_dist2 = 16;
+motor_screw_d = 3 + 0.5;
+motor_screw_head = 5 + 0.5;
+motor_center_hole = 8 + 2;
+
+outer_wall = 2;
+
+body_w = 60 - 2*outer_wall;
+body_h = 30 - outer_wall;
+body_depth = 25;
+strut_h = 12;
+corner_l = 8;
+
+motor_plate_h = 2.5; // base thickness of the motor mount
+motor_plate_add = 2; // horizontal size added to the holes
+wall = 1; // base thickness of other parts
+
+side_overhang = 1.5;
+
+// base plate overhang
+difference() {
+       translate([-body_w/2-side_overhang, -body_h/2-side_overhang, 0])
+               cube([body_w + 2*side_overhang, body_h + 2*side_overhang, wall]);
+       translate([-body_w/2+wall, -body_h/2+wall, -eps])
+               cube([body_w - 2*wall, body_h - 2*wall, wall+2*eps]);
+}
+
+// bottom plate with motor mount
+
+module motor_plate_body() {
+       hull() { // shorter screws
+               cylinder(r = motor_center_hole/2 + motor_plate_add,
+                       h = motor_plate_h);
+               for (angle = [-90,90]) {
+                       rotate([0, 0, angle])
+                       translate([motor_screw_dist1/2, 0, 0])
+                               cylinder(r = motor_screw_head/2 + motor_plate_add, h = motor_plate_h);
+               }
+       }
+
+       hull() { // longer screws
+               cylinder(r = motor_center_hole/2 + motor_plate_add,
+                       h = motor_plate_h);
+               for (angle = [0,180]) {
+                       rotate([0, 0, angle])
+                       translate([motor_screw_dist2/2, 0, 0])
+                               cylinder(r = motor_screw_head/2 + motor_plate_add, h = motor_plate_h);
+               }
+       }
+}
+
+difference() {
+       motor_plate_body();
+       // center hole
+       translate([0, 0, -eps])
+               cylinder(r = motor_center_hole/2, h = motor_plate_h + 2*eps);
+       for (angle = [-90,90]) rotate([0, 0, angle]) {
+               translate([motor_screw_dist1/2, 0, -eps])
+                       cylinder(r = motor_screw_d/2, h = motor_plate_h + 2*eps, $fn = 6);
+               translate([motor_screw_dist1/2, 0, motor_plate_h - (motor_screw_head-motor_screw_d)/2])
+                       cylinder(r1 = motor_screw_d/2, r2 = motor_screw_head/2, h = (motor_screw_head-motor_screw_d)/2+eps, $fn = 6);
+       }
+       for (angle = [0,180]) rotate([0, 0, angle]) {
+               translate([motor_screw_dist2/2, 0, -eps])
+                       cylinder(r = motor_screw_d/2, h = motor_plate_h + 2*eps, $fn = 6);
+               translate([motor_screw_dist2/2, 0, motor_plate_h - (motor_screw_head-motor_screw_d)/2])
+                       cylinder(r1 = motor_screw_d/2, r2 = motor_screw_head/2, h = (motor_screw_head-motor_screw_d)/2+eps, $fn = 6);
+       }
+}
+
+// struts
+for (x = [-1, 1]) for (y = [-1, 1]) scale([x, y, 1]) hull() {
+       translate([body_w/2-corner_l, body_h/2-wall/2, 0])
+               cylinder(r = wall/2, h = strut_h);
+       translate([motor_screw_dist2/2, motor_screw_head/2 + motor_plate_add - wall/2, 0])
+               cylinder(r = wall/2, h = motor_plate_h);
+}
+
+hole_l = 12;
+hole_h = 1.5;
+hole_z = 0;
+
+// corners
+for (x = [-1, 1]) scale([x, 1, 1]) {
+       difference() {
+               translate([body_w/2-wall, -body_h/2, 0])
+                       cube([wall, body_h, strut_h]);
+               translate([body_w/2-wall-eps, -hole_l/2, hole_z + wall])
+                       cube([wall + 2*eps, hole_l, hole_h]);
+       }
+               
+       for (y = [-1, 1]) scale ([1, y, 1]) {
+               translate([body_w/2-corner_l, body_h/2 - wall, 0])
+                       cube([corner_l, wall, strut_h]);
+       }
+}
+
diff --git a/mini-arrow-fuselage-front.scad b/mini-arrow-fuselage-front.scad
new file mode 100644 (file)
index 0000000..7875dfa
--- /dev/null
@@ -0,0 +1,46 @@
+eps = 0.01;
+infty = 300;
+
+fuse_w = 60;
+fuse_h = 30-3;
+fuse_l = 80;
+
+wall = 2;
+
+front_h = 5;
+
+wing_hole_x = 25;
+wing_hole_l = 25;
+wing_hole_h = 12;
+
+difference() {
+       translate([0, -fuse_w/2, 0]) intersection() {
+               cube([fuse_l, fuse_w, fuse_h]);
+               translate([0, 0, front_h])
+                       scale([fuse_l/(fuse_h-front_h), 1, 1])
+                       rotate([-90, 0, 0])
+                               cylinder(r = fuse_h-front_h,
+                                       h = fuse_w, $fn = 128);
+       }
+       // inner space
+       difference() {
+               translate([-eps, -fuse_w/2+wall, wall])
+                       cube([fuse_l + 2*eps, fuse_w-2*wall, fuse_h]);
+               // front beams
+               translate([fuse_l, fuse_w/2, wall + 5])
+                       rotate([0, 60, 0]) 
+                       translate([0, -infty/2, -infty/2]) cube(infty);
+       };
+       // wing hole
+       translate([wing_hole_x, -fuse_w/2-eps, wall])
+               cube([wing_hole_l, fuse_w + 2*eps, wing_hole_h]);
+
+       // center squares
+       for (x = [9:16:fuse_l - 15])
+       for (y = [0,16])
+       for (n = [0, 16/2])
+       for (s = [-1, 1])
+               scale([1, s, 1])
+               translate([x+n, y-n, -eps])
+                       cylinder(r = 6, h = wall + 2*eps, $fn = 4);
+}
diff --git a/mini-arrow-fuselage.scad b/mini-arrow-fuselage.scad
new file mode 100644 (file)
index 0000000..0d71e95
--- /dev/null
@@ -0,0 +1,112 @@
+infty = 300;
+eps = 0.01;
+
+fuse_w = 60;
+fuse_h = 30;
+
+fuse_l = 132;
+
+wall = 2;
+
+rod_d = 3;
+rod_l = 10.5;
+
+// center rod
+center_rod_h = fuse_h - 21;
+center_rod_x = 78;
+
+rod_support_w = rod_d + 2*wall;
+rod_support_l = rod_l + wall;
+rod_support_h_add = rod_d;
+
+// front rod
+front_rod_x = 121.5;
+front_rod_h = fuse_h - 19;
+front_rod_angle = 35; // from the Y axis
+
+// cable_hole
+cable_hole_x = 100;
+cable_hole_w = 25;
+cable_hole_h = 10;
+
+// corner radius
+corner_r = 10;
+corner_l = fuse_l - 21;
+corner_x = fuse_l - corner_l;
+
+// top window
+top_window_x = corner_x + 3;
+top_window_l = center_rod_x - 8 - top_window_x;
+top_window_w = fuse_w - 4*wall;
+
+module body_cube() {
+       translate([0, -fuse_w/2, 0])
+               cube([fuse_l, fuse_w, fuse_h]);
+}
+
+module body() {
+       // main U-shape
+       difference() {
+               body_cube();
+               translate([-eps, -fuse_w/2+wall, wall])
+                       cube([corner_x + 2*eps, fuse_w - 2*wall, fuse_h]);
+               // round corners
+               hull() {
+                       translate([corner_x-eps, -fuse_w/2+wall, wall+corner_r])
+                               cube([corner_l+2*eps, fuse_w - 2*wall, fuse_h]);
+                       for (y = [-1, 1]) scale([1, y, 1])
+                       translate([corner_x-eps, fuse_w/2-wall-corner_r, wall+corner_r])
+                               rotate([0, 90, 0]) cylinder(r = corner_r, h = corner_l+2*eps);
+               }
+       };
+
+       
+       // support for center rod
+       for (y = [-1, 1]) scale([1, y, 1]) {
+               translate([center_rod_x-rod_support_w/2, fuse_w/2-rod_support_l, 0])
+                       cube([rod_support_w, rod_support_l, center_rod_h+rod_support_h_add]);
+               translate([center_rod_x-rod_support_w/2, fuse_w/2-2*wall, 0])
+                       cube([rod_support_w, wall + eps, fuse_h]);
+       }
+       // support for front rod
+       for (y = [-1, 1]) scale([1, y, 1]) {
+               intersection () {
+                       body_cube();
+                       translate([front_rod_x, fuse_w/2, 0])
+                               rotate([0, 0, front_rod_angle]) {
+                               translate([-rod_support_w/2, -rod_support_l, 0])
+                                       cube([rod_support_w, 2*rod_support_l, front_rod_h+rod_support_h_add]);
+                               translate([-rod_support_w/2, -3*wall, 0])
+                                       cube([rod_support_w, 6*wall*tan(front_rod_angle), fuse_h]);
+                       }
+               }
+       }
+       // firewall springs
+       spring_d = 2.5;
+       spring_h = 10;
+       for (y = [-1,1]) scale([1, y, 1])
+               translate([spring_d/2, fuse_w/2-wall, fuse_h/2-spring_h/2+wall/2])
+                       cylinder(r = spring_d/2, h = spring_h, $fn = 4);
+}
+
+difference() {
+       body();
+       // holes for center rods
+       for (y = [-1, 1]) scale([1, y, 1])
+       translate([center_rod_x-rod_d/2, fuse_w/2-10, center_rod_h-rod_d/2])
+               cube([rod_d, rod_l + eps, fuse_h]);
+       // holes for front rods
+       for (y = [-1, 1]) scale([1, y, 1])
+       translate([front_rod_x, fuse_w/2, front_rod_h-rod_d/2])
+       rotate([0, 0, front_rod_angle])
+       translate([-rod_d/2, -rod_l, 0])
+               cube([rod_d, 2*rod_l, fuse_h]);
+       // holes for servo cables
+       translate([cable_hole_x, -fuse_w/2-eps, fuse_h])
+               rotate([-90, 0, 0])
+               scale([1, 2*cable_hole_h/cable_hole_w, 1])
+               cylinder(r = cable_hole_w/2, h = fuse_w+2*eps);
+       // top window
+       translate([top_window_x, -top_window_w/2, -eps])
+               cube([top_window_l, top_window_w, fuse_h]);
+}