From 5bd70147873ac02d27c53ac897771c33a5498d24 Mon Sep 17 00:00:00 2001 From: "Jan \"Yenya\" Kasprzak" Date: Mon, 22 May 2017 16:01:18 +0200 Subject: [PATCH] Mini arrow fuselage components --- mini-arrow-firewall.scad | 102 ++++++++++++++++++++++++++++++ mini-arrow-fuselage-front.scad | 46 ++++++++++++++ mini-arrow-fuselage.scad | 112 +++++++++++++++++++++++++++++++++ 3 files changed, 260 insertions(+) create mode 100644 mini-arrow-firewall.scad create mode 100644 mini-arrow-fuselage-front.scad create mode 100644 mini-arrow-fuselage.scad diff --git a/mini-arrow-firewall.scad b/mini-arrow-firewall.scad new file mode 100644 index 0000000..80140e5 --- /dev/null +++ b/mini-arrow-firewall.scad @@ -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 index 0000000..7875dfa --- /dev/null +++ b/mini-arrow-fuselage-front.scad @@ -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 index 0000000..0d71e95 --- /dev/null +++ b/mini-arrow-fuselage.scad @@ -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]); +} -- 2.43.0