|
@@ -31,6 +31,9 @@
|
|
|
include <Octathingy_common.scad>;
|
|
include <Octathingy_common.scad>;
|
|
|
include <CCRMA_logo.scad>;
|
|
include <CCRMA_logo.scad>;
|
|
|
|
|
|
|
|
|
|
+// d-sub connector
|
|
|
|
|
+include <db25.scad>;
|
|
|
|
|
+
|
|
|
////
|
|
////
|
|
|
//// overrides
|
|
//// overrides
|
|
|
|
|
|
|
@@ -167,7 +170,7 @@ ring_wall = 4 * wall;
|
|
|
ring_ext_height = 6;
|
|
ring_ext_height = 6;
|
|
|
|
|
|
|
|
// gap between external ring and support arm
|
|
// gap between external ring and support arm
|
|
|
-ring_arm_gap = 20;
|
|
|
|
|
|
|
+ring_arm_gap = 16;
|
|
|
|
|
|
|
|
|
|
|
|
|
// the main body that holds the phantom power interfaces
|
|
// the main body that holds the phantom power interfaces
|
|
@@ -224,7 +227,7 @@ module rounded_octagon(height, radius) {
|
|
|
module rounded_octagon_wall(height, radius, wall) {
|
|
module rounded_octagon_wall(height, radius, wall) {
|
|
|
difference() {
|
|
difference() {
|
|
|
rounded_octagon(height, radius);
|
|
rounded_octagon(height, radius);
|
|
|
- rounded_octagon(height, radius - wall);
|
|
|
|
|
|
|
+ rounded_octagon(height + thin_mint, radius - wall);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -660,6 +663,138 @@ module octa_mount_flare_connector(height, lip, transition, radius, top_xradius,
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+// flare to d-sub 25 pin connector
|
|
|
|
|
+
|
|
|
|
|
+module octa_mount_flare_dsub(height, lip, transition, radius, top_xradius, top_yradius) {
|
|
|
|
|
+ // bottom octagonal box
|
|
|
|
|
+ difference() {
|
|
|
|
|
+ union() {
|
|
|
|
|
+ rounded_octagon_wall(height, radius, 2 * wall);
|
|
|
|
|
+ if (render_screw_holes) {
|
|
|
|
|
+ // small pedestals for the screws that attach the flare to the body
|
|
|
|
|
+ // (number 0 size, 1/4" long = thread diameter: 1.6mm, head diameter: 2.75)
|
|
|
|
|
+ for (r = [45, 135, 225, 315]) rotate([0, 0, r]) {
|
|
|
|
|
+ translate([radius - wall - 1.75, 0, lip/2]) {
|
|
|
|
|
+ rotate([0, 90, 0]) {
|
|
|
|
|
+ cylinder(r = 1.5, h = 2 * wall, $fn = facets);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ // flange to mount on body
|
|
|
|
|
+ rounded_octagon_wall(lip + 1.00, radius - wall, wall);
|
|
|
|
|
+ // and make a smooth transition to avoid overhangs
|
|
|
|
|
+ translate([0, 0, lip + 1.00]) {
|
|
|
|
|
+ hull() {
|
|
|
|
|
+ rounded_octagon_wall(thin_mint, radius - wall, wall);
|
|
|
|
|
+ translate([0, 0, 1.0]) {
|
|
|
|
|
+ rounded_octagon_wall(thin_mint, radius - 2 * wall, wall);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if (render_screw_holes) {
|
|
|
|
|
+ // holes for screws that attach the flare to the body
|
|
|
|
|
+ // Number 0 Size, 1/4" Long = thread diameter: 1.6mm, head diameter: 2.75
|
|
|
|
|
+ for (r = [45, 135, 225, 315]) rotate([0, 0, r]) {
|
|
|
|
|
+ translate([radius/2, 0, lip/2]) {
|
|
|
|
|
+ rotate([0, 90, 0]) {
|
|
|
|
|
+ cylinder(r = (1.6 + 0.1)/2, h = radius, $fn = facets);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ // flare to db25 connector mounting plate
|
|
|
|
|
+ expand = 3;
|
|
|
|
|
+ // height of connector
|
|
|
|
|
+ guard_height = 9.525;
|
|
|
|
|
+ // thickness of db25 plate
|
|
|
|
|
+ db25_t = 3 * wall;
|
|
|
|
|
+ translate([0, 0, height]) {
|
|
|
|
|
+ minkr = 2.0;
|
|
|
|
|
+ difference() {
|
|
|
|
|
+ hull() {
|
|
|
|
|
+ rounded_octagon(thin_mint, radius);
|
|
|
|
|
+ rotate([0, 0, -22.5]) translate([0, 0, transition]) {
|
|
|
|
|
+ minkowski() {
|
|
|
|
|
+ db25_plate(th = thin_mint, border = expand);
|
|
|
|
|
+ cylinder(r = minkr, h = thin_mint, $fn = facets);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ hull() {
|
|
|
|
|
+ rounded_octagon(thin_mint, radius - 2 * wall);
|
|
|
|
|
+ rotate([0, 0, -22.5]) translate([0, 0, transition]) {
|
|
|
|
|
+ minkowski() {
|
|
|
|
|
+ db25_plate(th = thin_mint);
|
|
|
|
|
+ cylinder(r = minkr, h = thin_mint, $fn = facets);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ // db25 mounting plate
|
|
|
|
|
+ rotate([0, 0, -22.5]) translate([0, 0, transition]) {
|
|
|
|
|
+ difference() {
|
|
|
|
|
+ db25_plate(th = db25_t, border = expand);
|
|
|
|
|
+ db25_cutout(th = db25_t);
|
|
|
|
|
+ }
|
|
|
|
|
+ // add guard wall around connector
|
|
|
|
|
+ difference() {
|
|
|
|
|
+ minkowski() {
|
|
|
|
|
+ db25_plate(th = guard_height + db25_t, border = expand);
|
|
|
|
|
+ cylinder(r = minkr, h = thin_mint, $fn = facets);
|
|
|
|
|
+ }
|
|
|
|
|
+ db25_plate(th = guard_height + db25_t + thin_mint, border = expand);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ // for testing
|
|
|
|
|
+ *rotate([0, 0, -22.5]) translate([0, 0, 30]) db25_plate(th = 1.0);
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+module octa_mount_stand(height, lip, transition, radius, top_xradius, top_yradius) {
|
|
|
|
|
+ // flare to db25 connector mounting plate
|
|
|
|
|
+ expand = 3;
|
|
|
|
|
+ // height of connector
|
|
|
|
|
+ guard_height = 9.525;
|
|
|
|
|
+ // thickness of db25 plate
|
|
|
|
|
+ db25_t = 3 * wall;
|
|
|
|
|
+ translate([0, 0, height]) {
|
|
|
|
|
+ minkr = 2.0;
|
|
|
|
|
+ // db25 mounting plate
|
|
|
|
|
+ rotate([0, 0, -22.5]) translate([0, 0, transition]) {
|
|
|
|
|
+ // add guard wall around connector
|
|
|
|
|
+ difference() {
|
|
|
|
|
+ minkowski() {
|
|
|
|
|
+ db25_plate(th = guard_height + db25_t, border = 1.8 * expand);
|
|
|
|
|
+ cylinder(r = minkr, h = thin_mint, $fn = facets);
|
|
|
|
|
+ }
|
|
|
|
|
+ db25_plate(th = guard_height + db25_t + thin_mint, border = 1.8 * expand);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ // ring and connector
|
|
|
|
|
+ translate([0, 0, height]) {
|
|
|
|
|
+ o_rad = 8;
|
|
|
|
|
+ i_rad = 3;
|
|
|
|
|
+ rotate([0, 90, -22.5]) {
|
|
|
|
|
+ // connector
|
|
|
|
|
+ translate([-guard_height, 13, 0]) cube([guard_height, 10, o_rad/2]);
|
|
|
|
|
+ translate([-guard_height, 9, o_rad/4]) rotate([0, 90, 0]) {
|
|
|
|
|
+ difference() {
|
|
|
|
|
+ cylinder(r = o_rad, h = guard_height, $fn = facets);
|
|
|
|
|
+ translate([-10, -16, 0]) cube([20, 20, 10]);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ // ring
|
|
|
|
|
+ translate([-o_rad, 30, 0]) {
|
|
|
|
|
+ shock_mount_ring(o_rad, i_rad, ring_wall);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
// top conical section that plugs into capsule array
|
|
// top conical section that plugs into capsule array
|
|
|
|
|
|
|
|
module octa_capsule_array_mount(angles) {
|
|
module octa_capsule_array_mount(angles) {
|
|
@@ -705,6 +840,95 @@ module octa_capsule_array_mount(angles) {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+//
|
|
|
|
|
+// shock mount components
|
|
|
|
|
+//
|
|
|
|
|
+
|
|
|
|
|
+// shock mount internal ring
|
|
|
|
|
+
|
|
|
|
|
+module octa_shock_mount_internal_ring(height, radius, band_height, corner, gap) {
|
|
|
|
|
+ rotate([0, 0, 22.5]) {
|
|
|
|
|
+ // inner octagon, hugs the body
|
|
|
|
|
+ difference() {
|
|
|
|
|
+ rounded_octagon_wall(band_height, radius + 3 * wall, 2 * wall);
|
|
|
|
|
+ rotate([0, 0, -22.5 + 90]) translate([-40, -20, 0]) {
|
|
|
|
|
+ cube([80, 40, 20 + thin_mint]);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ // joins inner and outer octagons
|
|
|
|
|
+ for (m = [0, 1]) mirror([m, 0, 0]) {
|
|
|
|
|
+ translate([octa_pcb_radius, -10, 0]) {
|
|
|
|
|
+ cube([2, 20, band_height]);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ // 8 columns for mounting rubber bands
|
|
|
|
|
+ for (r = [0, 90, 180, 270]) rotate([0, 0, r]) {
|
|
|
|
|
+ for (m = [0, 1]) mirror([m, 0, 0]) {
|
|
|
|
|
+ translate([radius + 1.0, radius/2 - 2, 0]) {
|
|
|
|
|
+ rotate([0, 0, 0]) {
|
|
|
|
|
+ difference() {
|
|
|
|
|
+ // columns
|
|
|
|
|
+ union() {
|
|
|
|
|
+ translate([3, 0, 0]) scale([1.2, 0.75, 1.0]) cylinder(r = 3, h = height, $fn = facets);
|
|
|
|
|
+ }
|
|
|
|
|
+ // lower slots for rubber bands
|
|
|
|
|
+ translate([3, radius/2, 0]) scale([1.0, 1.0, 3.0]) rotate([90, 0, 0]) {
|
|
|
|
|
+ cylinder(r = 1.2, h = radius * 2, $fn = facets);
|
|
|
|
|
+ }
|
|
|
|
|
+ // upper slots for rubber bands
|
|
|
|
|
+ translate([3, radius/2, height]) scale([1.0, 1.0, 3.0]) rotate([90, 0, 0]) {
|
|
|
|
|
+ cylinder(r = 1.2, h = radius * 2, $fn = facets);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ // the outer octagon, holds the columns
|
|
|
|
|
+ rotate([0, 0, 22.5]) rounded_octagon_wall(band_height, radius + 6, 2 * wall);
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+// shock mount external ring
|
|
|
|
|
+
|
|
|
|
|
+module octa_shock_mount_external_ring(height, radius, corner, gap) {
|
|
|
|
|
+ // main ring
|
|
|
|
|
+ rotate([0, 0, 22.5]) rounded_octagon_wall(ring_ext_height, 2 * radius - ring_wall, ring_wall);
|
|
|
|
|
+ for (rot = [0, 90, 180, 270]) {
|
|
|
|
|
+ // anchors for rubber bands
|
|
|
|
|
+ rotate([0, 0, rot]) {
|
|
|
|
|
+ translate([radius + gap + 2 * ring_wall, -7.5, 0]) {
|
|
|
|
|
+ cube([4, 15, ring_ext_height]);
|
|
|
|
|
+ }
|
|
|
|
|
+ translate([radius + gap + ring_wall, -2, 0]) {
|
|
|
|
|
+ cube([7, 4, ring_ext_height]);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ // connection to stand mount
|
|
|
|
|
+ intersection() {
|
|
|
|
|
+ translate([ring_arm_gap, 0, 0]) {
|
|
|
|
|
+ rotate([0, 0, 22.5]) rounded_octagon_wall(ring_ext_height, 2 * radius - ring_wall, ring_wall);
|
|
|
|
|
+ }
|
|
|
|
|
+ translate([ring_arm_gap / 2, -(radius + 2 * corner), 0]) {
|
|
|
|
|
+ cube([(radius + 2 * corner) + ring_arm_gap, 2 * (radius + 2 * corner), ring_ext_height]);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ // connection to hub
|
|
|
|
|
+ translate([radius + corner + ring_arm_gap - 0.7, -2, 0]) {
|
|
|
|
|
+ cube([10, 4, ring_ext_height * 2]);
|
|
|
|
|
+ }
|
|
|
|
|
+ // rotating mount
|
|
|
|
|
+ o_rad = 8;
|
|
|
|
|
+ i_rad = 3;
|
|
|
|
|
+ rotate([0, 90, -90]) {
|
|
|
|
|
+ translate([-o_rad, radius + corner + ring_arm_gap + o_rad + 2 * ring_wall, -2]) {
|
|
|
|
|
+ shock_mount_ring(o_rad, i_rad, ring_wall);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
////
|
|
////
|
|
|
//// render all the different parts
|
|
//// render all the different parts
|
|
|
////
|
|
////
|
|
@@ -828,12 +1052,18 @@ module render_octa_shock_mount_stand(z_offset) {
|
|
|
// shock mount: external ring
|
|
// shock mount: external ring
|
|
|
//
|
|
//
|
|
|
|
|
|
|
|
-module render_octa_shock_mount_external_ring(z_offset) {
|
|
|
|
|
|
|
+module render_octa_shock_mount_external_ring_old(z_offset) {
|
|
|
translate([0, 0, z_offset]) {
|
|
translate([0, 0, z_offset]) {
|
|
|
shock_mount_external_ring(ring_height, box_radius + wall, box_radius * 2 - wall, mount_corner, main_radius_inc, 0);
|
|
shock_mount_external_ring(ring_height, box_radius + wall, box_radius * 2 - wall, mount_corner, main_radius_inc, 0);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+module render_octa_shock_mount_external_ring(z_offset) {
|
|
|
|
|
+ translate([0, 0, z_offset]) {
|
|
|
|
|
+ octa_shock_mount_external_ring(ring_height, octa_pcb_radius, 20, main_radius_inc);
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
// shock mount: bottom internal ring
|
|
// shock mount: bottom internal ring
|
|
|
//
|
|
//
|
|
|
|
|
|
|
@@ -843,15 +1073,27 @@ module render_octa_shock_mount_internal_ring_bot(z_offset) {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+module render_octa_shock_mount_internal_ring_bot(z_offset) {
|
|
|
|
|
+ translate([0, 0, z_offset]) {
|
|
|
|
|
+ shock_mount_internal_ring(ring_height, A/2 + wall, A/2 + 3, octa_pcb_radius * 2/3, internal_ring_gap, 1);
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
// shock mount: top internal ring
|
|
// shock mount: top internal ring
|
|
|
//
|
|
//
|
|
|
|
|
|
|
|
-module render_octa_shock_mount_internal_ring_top(z_offset) {
|
|
|
|
|
|
|
+module render_octa_shock_mount_internal_ring_top_old(z_offset) {
|
|
|
translate([0, 0, z_offset]) {
|
|
translate([0, 0, z_offset]) {
|
|
|
shock_mount_internal_ring(ring_height, box_radius + wall, box_radius * 2 - wall, mount_corner, internal_ring_gap, 0);
|
|
shock_mount_internal_ring(ring_height, box_radius + wall, box_radius * 2 - wall, mount_corner, internal_ring_gap, 0);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+module render_octa_shock_mount_internal_ring_top(z_offset) {
|
|
|
|
|
+ translate([0, 0, z_offset]) {
|
|
|
|
|
+ shock_mount_internal_ring(ring_height, A/2 + wall, A/2 + 3, octa_pcb_radius * 2/3, internal_ring_gap, 0);
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
// shock mount: all four internal ring connectors
|
|
// shock mount: all four internal ring connectors
|
|
|
//
|
|
//
|
|
|
|
|
|