tube_d = 8.0 + 0.5;
-clip_w = 6;
-
slot_w = 3;
-support_l = 12;
-servo_w = 12.5;
+servo_w = 12.5+0.5;
+servo_side_l = 5 - 0.5;
+
+clip_w = servo_side_l + wall;
-cable_w = 5;
-cable_zoff = 2;
+servo_zoff = 14 + 2.0 + tube_d/2;
+servo_screw_hole = 1.2;
+servo_slot_z = 2 + 0.5;
-module clip(support_zoff) {
+module clip() {
difference() {
hull() {
// clip cylinder
cylinder(r = tube_d/2 + wall, h = clip_w);
// under the servo
- translate([-servo_w/2-wall, tube_d/2+support_zoff, 0])
- cube([servo_w+2*wall, support_l + wall, clip_w]);
+ translate([-servo_w/2-wall, servo_zoff-wall, 0])
+ cube([servo_w+2*wall, servo_slot_z + 2*wall, clip_w]);
}
// fuse tube
cube([slot_w, tube_d, clip_w + 2*eps]);
// servo
- translate([-servo_w/2, tube_d/2+support_zoff+wall, wall])
- cube([servo_w, support_l + eps, clip_w]);
- // cable hole
- translate([-cable_w/2, tube_d/2+support_zoff+cable_zoff+wall, -eps])
- cube([cable_w, support_l + eps, clip_w]);
+ translate([-servo_w/2, servo_zoff, wall])
+ cube([servo_w, servo_slot_z, clip_w]);
+
+ // screw hole
+ translate([0, 0, wall + 0.6*servo_side_l])
+ rotate([-90, 0, 0])
+ cylinder(r = servo_screw_hole/2, h = infty, $fn = 6);
}
}
for (x = [-1, 1]) scale([x, 1, 1])
-translate([servo_w, tube_d, 0])
- clip(support_zoff = 0);
+translate([servo_w/2+2*wall, 0, 0])
+clip();
-for (x = [-1, 1]) scale([x, -1, 1])
-translate([servo_w, tube_d, 0])
- clip(support_zoff = 3);
wall = 1.5;
thin_wall = 0.6;
-fuse_tube_d = 8.0;
-fuse_tube_l = 4;
-
-slot_w = 5;
-
-base_w = 60;
-base_l = 25;
-
-module body() {
- hull() {
-// translate([-fuse_tube_d/2-wall, -fuse_tube_l/2, 0])
-// cube([fuse_tube_d + 2*wall, fuse_tube_l, fuse_tube_d + 2*wall]);
- translate([0, fuse_tube_l/2, fuse_tube_d/2+wall])
- rotate([90, 0, 0])
- cylinder(r = fuse_tube_d/2+wall, h = fuse_tube_l);
- translate([-fuse_tube_d/2-wall, -base_l/2+wall/2, 0])
- cube([fuse_tube_d + 2*wall, base_l-wall, thin_wall]);
+tube_d = 8.0 + 0.2;
+base_w = 65;
+base_l = 30;
+
+tube_d = 6 + 0.1;
+tube_zoff = 3;
+
+base_w = 65;
+base_l = 30;
+
+tube_l = base_l;
+base_overhang = 0.9; // factor of base_w, base_l
+
+tube_zoff = 2;
+
+module polyhole(r1, h1, fn) {
+ rotate([0,0,180])
+ cylinder(h = h1, r = r1 / cos (180 / fn), $fn = fn);
+}
+
+module body(tube_zoff) {
+ // base
+ // scale([1, base_l/base_w, 1])
+ // cylinder(r = base_w/2, h = thin_wall);
+ translate([-base_w/2, -base_l/2, 0]) cube([base_w, base_l, thin_wall]);
+
+ // diagonal supports
+ for (x = [-1,1])
+ for (y = [-1,1])
+ scale([x, y, 1]) hull() {
+ translate([base_overhang*base_w/2-thin_wall/2, base_overhang*base_l/2-thin_wall/2, 0])
+ cylinder(r = thin_wall/2, h = thin_wall, $fn = 16);
+ translate([0, -tube_l/3+thin_wall/2, 0])
+ cylinder(r = thin_wall/2, h = tube_zoff + tube_d, $fn = 16);
+ }
+
+ // side supports
+ for (x = [-1,1])
+ for (y = [-1,1])
+ scale([x, y, 1]) hull() {
+ translate([base_overhang*base_w/2-thin_wall/2, base_overhang*base_l/2-thin_wall/2, 0])
+ cylinder(r = thin_wall/2, h = thin_wall, $fn = 16);
+ translate([0, tube_l/2-thin_wall/2, 0])
+ cylinder(r = thin_wall/2, h = tube_zoff + tube_d, $fn = 16);
+ }
+
+ // under the tube supports
+ for (y = [-1,1])
+ scale([1, y, 1]) hull() {
+ translate([0, base_overhang*base_l/2, 0])
+ cylinder(r = thin_wall/2, h = thin_wall, $fn = 16);
+ translate([-thin_wall/2, 0, 0])
+ cube([thin_wall, tube_l/2, tube_zoff]);
+ }
+
+ // side bottom tube supports
+ for (x = [-1,1])
+ scale([x, 1, 1]) {
+ translate([tube_d/2, -tube_l/2, 0])
+ cube([wall, tube_l, tube_zoff + tube_d/2]);
+ translate([tube_d/2+wall, -wall, 0])
+ cube([wall, 2*wall, tube_zoff + tube_d/2]);
+ }
+
+ // upper cylinder clip
+ translate([0, -tube_l/2, tube_d/2 + tube_zoff])
+ intersection() {
+ rotate([-90, 0, 0]) union() {
+ cylinder(r = tube_d/2 + wall, h = tube_l, $fn = 16);
+ translate([0, 0, tube_l/2 - wall])
+ cylinder(r = tube_d/2 + 2*wall,
+ h = 2*wall);
+ }
+ translate([-tube_d/2-2*wall, 0, 0])
+ cube([tube_d + 4*wall, tube_l, tube_d]);
}
- scale([1, base_l/base_w, 1])
- cylinder(r = base_w/2, h = thin_wall);
}
-module holder() {
+module wing_tube_support(tube_zoff) {
difference() {
- body();
- translate([0, infty/2, fuse_tube_d/2+wall])
- rotate([90, 0, 0])
- cylinder(r = fuse_tube_d/2, h = infty + 2*eps);
- translate([-slot_w/2, -infty/2, fuse_tube_d/2+wall])
- cube([slot_w, infty, fuse_tube_d/2+wall+eps]);
+ body(tube_zoff);
+ // main tube
+ translate([0, -base_l/2-eps, tube_d/2+tube_zoff])
+ rotate([-90, 0, 0])
+ polyhole(tube_d/2, base_l + 2*eps, 6);
+ // cylinder(r = tube_d/2, h = base_l + 2*eps, $fn = 6);
+ // upper clip
+ translate([-infty/2, -infty/2, tube_zoff + tube_d + wall])
+ cube(infty);
}
}
-holder();
+wing_tube_support(tube_zoff);