eps = 0.01; infty = 200; wall = 1.5; thin_wall = 0.6; fuse_tube_d = 8.0 + 0.5; tube_xoff = wall - 0.5; clip_w = 6; slot_w = 3; // 9g servo servo_l = 23.0; servo_w = 12.5; beam_w = fuse_tube_d/2 + wall - tube_xoff; beam_h = fuse_tube_d/2 + wall; cable_w = 2.0; cable_l = 5.0; difference() { union() { // servo frame translate([-wall, -servo_l/2-clip_w, 0]) cube([servo_w + 2*wall, servo_l + 2*clip_w, thin_wall]); // servo frame supports for (y = [-1, 1]) scale([1, y, 1]) translate([0, servo_l/2 + clip_w - wall, 0]) hull() { cube([servo_w/2 + cable_l/2, wall, thin_wall]); cube([eps, wall, beam_h]); } // main beam translate([-beam_w, -servo_l/2-clip_w, 0]) cube([beam_w, servo_l + 2*clip_w, fuse_tube_d/2+wall]); // clips for (y = [-1, 1]) scale([1, y, 1]) translate([0, servo_l/2, 0]) hull() { // bottom cube translate([-0.75*fuse_tube_d - 2*wall + tube_xoff, 0, 0]) cube([0.75*fuse_tube_d + 2*wall, clip_w, fuse_tube_d/2 + wall + eps]); // cylinder translate([-fuse_tube_d/2 - wall + tube_xoff, 0, fuse_tube_d/2 + wall]) rotate([-90, 0, 0]) cylinder(r = fuse_tube_d/2 + wall, h = clip_w); } } // hole for servo translate([0, -servo_l/2, -eps]) cube([servo_w, servo_l, wall + 2*eps]); // fuse tube translate([-fuse_tube_d/2-wall + tube_xoff, servo_l/2+clip_w+eps, fuse_tube_d/2+wall]) rotate([90, 0, 0]) cylinder(r = fuse_tube_d/2, h = servo_l +2*clip_w + 2*eps); // fuse tube slot translate([-fuse_tube_d/2-wall-slot_w/2 + tube_xoff, -servo_l/2-clip_w-eps, fuse_tube_d/2+wall]) cube([slot_w, servo_l + 2*clip_w + 2*eps, fuse_tube_d/2+wall+eps]); // cable hole for (y = [-1, 1]) scale ([1, y, 1]) translate([servo_w/2-cable_l/2, servo_l/2-eps, -eps]) cube([cable_l, cable_w + eps, wall + 2*eps]); }