|
|
@@ -123,6 +123,14 @@ internal_ring_gap = 1.0;
|
|
|
connector_w = 10.0;
|
|
|
connector_d = 2.0;
|
|
|
|
|
|
+// wall thickness and height of shock mount rings
|
|
|
+ring_wall = 4 * wall;
|
|
|
+ring_height = 6;
|
|
|
+
|
|
|
+// gap between external ring and support arm
|
|
|
+ring_arm_gap = 20;
|
|
|
+
|
|
|
+
|
|
|
// all eight printed circuit boards
|
|
|
|
|
|
module octa_pcb_clear(length, width, thick, slot_depth, front, back) {
|
|
|
@@ -336,26 +344,26 @@ module octa_capsule_array_mount(angles) {
|
|
|
|
|
|
// internal ring of shock mount
|
|
|
|
|
|
-module octa_shock_mount_internal_ring(height, radius, corner, gap, lip) {
|
|
|
- slot_sep = radius * 2 / 2.5;
|
|
|
+module octa_shock_mount_internal_ring(height, xradius, yradius, corner, gap, lip) {
|
|
|
+ slot_sep = xradius * 2 / 2.5;
|
|
|
slot_w = 5;
|
|
|
slot_o = height / 3;
|
|
|
difference() {
|
|
|
union() {
|
|
|
// base ring
|
|
|
difference() {
|
|
|
- tetra_rounded_mount_box_relative(slot_o, radius + gap, corner, 3 * wall);
|
|
|
- tetra_rounded_mount_box(slot_o, radius + gap, corner);
|
|
|
+ rounded_block_relative(slot_o, xradius + gap, yradius + gap, corner, 3 * wall);
|
|
|
+ rounded_block(slot_o, xradius + gap, yradius + gap, corner);
|
|
|
}
|
|
|
// upper ring with slots for rubber bands
|
|
|
difference() {
|
|
|
- tetra_rounded_mount_box_relative(height, radius + gap + 2 * wall, corner, 2 * wall);
|
|
|
- tetra_rounded_mount_box_relative(height, radius + gap + wall, corner, 1 * wall);
|
|
|
+ rounded_block_relative(height, xradius + gap + 2 * wall, yradius + gap + 2 * wall, corner, 2 * wall);
|
|
|
+ rounded_block_relative(height, xradius + gap + wall, yradius + gap + wall, corner, 1 * wall);
|
|
|
for (rot = [0, 90, 180, 270]) rotate([0, 0, rot]) {
|
|
|
// slots for rubber bands
|
|
|
minkr = 1.25;
|
|
|
for (m = [0, 1]) mirror([0, m, 0]) {
|
|
|
- translate([-slot_w / 2 + slot_sep, radius + gap, slot_o + minkr]) {
|
|
|
+ translate([-slot_w / 2 + slot_sep, ((rot % 180) ? xradius : yradius) + gap, slot_o + minkr]) {
|
|
|
minkowski() {
|
|
|
cube([slot_w - minkr, 10, slot_o - minkr]);
|
|
|
rotate([90, 0, 0]) cylinder(r = minkr, h = 1, $fn = facets);
|
|
|
@@ -369,11 +377,11 @@ module octa_shock_mount_internal_ring(height, radius, corner, gap, lip) {
|
|
|
}
|
|
|
// body for bars that connect both rings together
|
|
|
for (rot = [0, 90, 180, 270]) rotate([0, 0, rot]) {
|
|
|
- translate([radius + gap + 3 * wall, -(connector_w/2 + wall), 0]) {
|
|
|
+ translate([((rot % 180) ? yradius : xradius) + gap + 3 * wall, -(connector_w/2 + wall), 0]) {
|
|
|
cube([connector_d + wall, connector_w + 2 * wall, height]);
|
|
|
}
|
|
|
for (m = [0, 1]) mirror([0, m, 0]) {
|
|
|
- translate([radius + gap + 4 * wall, -(connector_w/2 + wall), 0]) {
|
|
|
+ translate([((rot % 180) ? yradius : xradius) + gap + 4 * wall, -(connector_w/2 + wall), 0]) {
|
|
|
cylinder(r = wall * 2, h = height, $fn = 3);
|
|
|
}
|
|
|
}
|
|
|
@@ -381,7 +389,7 @@ module octa_shock_mount_internal_ring(height, radius, corner, gap, lip) {
|
|
|
}
|
|
|
// carve holes for bars that connect both rings
|
|
|
for (rot = [0, 90, 180, 270]) rotate([0, 0, rot]) {
|
|
|
- translate([radius + gap + 3 * wall, -connector_w/2, 0]) {
|
|
|
+ translate([((rot % 180) ? yradius : xradius) + gap + 3 * wall, -connector_w/2, 0]) {
|
|
|
cube([connector_d, connector_w, height - 2.75 * wall]);
|
|
|
translate([connector_d / 2, 0, height - 3 * wall]) {
|
|
|
rotate([-90, 0, 0]) {
|
|
|
@@ -395,7 +403,7 @@ module octa_shock_mount_internal_ring(height, radius, corner, gap, lip) {
|
|
|
// lip to support microphone on lower ring only
|
|
|
if (lip == 1) {
|
|
|
lip_w = 10;
|
|
|
- translate([radius + gap + 2.5 * wall, -lip_w/2, height]) {
|
|
|
+ translate([((rot % 180) ? yradius : xradius) + gap + 2.5 * wall, -lip_w/2, height]) {
|
|
|
rotate([90, 90, 180]) {
|
|
|
linear_extrude(height = lip_w) {
|
|
|
polygon([[0, 0], [0, 4], [1, 4], [height * 2/3, 0]]);
|
|
|
@@ -422,44 +430,44 @@ module tetra_shock_mount_ring(outside_radius, inside_radius, thickness) {
|
|
|
|
|
|
// external ring of shock mount (connects to stand mount)
|
|
|
|
|
|
-module tetra_shock_mount_external_ring(height, radius, corner, gap, lip) {
|
|
|
+module octa_shock_mount_external_ring(height, xradius, yradius, corner, gap, lip) {
|
|
|
difference() {
|
|
|
- tetra_rounded_mount_box_relative(6, radius, mount_corner, gap);
|
|
|
- tetra_rounded_mount_box_relative(6, radius, mount_corner, gap - 4 * wall);
|
|
|
+ rounded_block_relative(ring_height, xradius, yradius, mount_corner, gap);
|
|
|
+ rounded_block_relative(ring_height, xradius, yradius, mount_corner, gap - ring_wall);
|
|
|
}
|
|
|
for (rot = [0, 90, 180, 270]) {
|
|
|
rotate([0, 0, rot]) {
|
|
|
- translate([radius + gap + 4 * wall, -7.5, 0]) {
|
|
|
- cube([4, 15, 6]);
|
|
|
+ translate([((rot % 180) ? yradius : xradius) + gap + ring_wall, -7.5, 0]) {
|
|
|
+ cube([4, 15, ring_height]);
|
|
|
}
|
|
|
- translate([radius + gap, -2, 0]) {
|
|
|
- cube([7, 4, 6]);
|
|
|
+ translate([((rot % 180) ? yradius : xradius) + gap, -2, 0]) {
|
|
|
+ cube([7, 4, ring_height]);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
// connection to stand mount
|
|
|
- translate([0, 18, 0]) {
|
|
|
- intersection() {
|
|
|
+ ring_arm_gap = 20;
|
|
|
+ intersection() {
|
|
|
+ translate([ring_arm_gap, 0, 0]) {
|
|
|
difference() {
|
|
|
- tetra_rounded_mount_box_relative(6, radius, mount_corner - 5, gap);
|
|
|
- tetra_rounded_mount_box_relative(6, radius, mount_corner - 5, gap - 4 * wall);
|
|
|
- }
|
|
|
- translate([-(radius + 2 * mount_corner), 0, 0]) {
|
|
|
- cube([2 * (radius + 2 * mount_corner), radius + 2 * mount_corner, 6]);
|
|
|
+ rounded_block_relative(ring_height, xradius, yradius, mount_corner, gap);
|
|
|
+ rounded_block_relative(ring_height, xradius, yradius, mount_corner, gap - ring_wall);
|
|
|
}
|
|
|
}
|
|
|
+ translate([ring_arm_gap / 2, -(yradius + 2 * mount_corner), 0]) {
|
|
|
+ cube([(xradius + 2 * mount_corner) + ring_arm_gap, 2 * (yradius + 2 * mount_corner), ring_height]);
|
|
|
+ }
|
|
|
}
|
|
|
// connection to hub
|
|
|
- translate([-2, radius + 2 * mount_corner + 12, 0]) {
|
|
|
- cube([4, 10, 6]);
|
|
|
+ translate([xradius + mount_corner + ring_wall + ring_arm_gap, -2, 0]) {
|
|
|
+ cube([8, 4, ring_height]);
|
|
|
}
|
|
|
// rotating mount
|
|
|
o_rad = 8;
|
|
|
i_rad = 3;
|
|
|
- thk = 4;
|
|
|
- rotate([0, 90, 0]) {
|
|
|
- translate([-o_rad, 66, -2]) {
|
|
|
- tetra_shock_mount_ring(o_rad, i_rad, thk);
|
|
|
+ rotate([0, 90, -90]) {
|
|
|
+ translate([-o_rad, xradius + mount_corner + ring_wall + ring_arm_gap + o_rad + ring_wall / 2 + 4, -2]) {
|
|
|
+ tetra_shock_mount_ring(o_rad, i_rad, ring_wall);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -621,18 +629,18 @@ module render_tetra_shock_mount_stand(z_offset) {
|
|
|
// shock mount: external ring
|
|
|
//
|
|
|
|
|
|
-module render_tetra_shock_mount_external_ring(z_offset) {
|
|
|
+module render_octa_shock_mount_external_ring(z_offset) {
|
|
|
translate([0, 0, z_offset]) {
|
|
|
- tetra_shock_mount_external_ring(ring_height, box_radius + wall, mount_corner, main_radius_inc, 0);
|
|
|
+ octa_shock_mount_external_ring(ring_height, box_radius + wall, box_radius * 2 + wall, mount_corner, main_radius_inc, 0);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// shock mount: bottom internal ring
|
|
|
//
|
|
|
|
|
|
-module render_tetra_shock_mount_internal_ring_bot(z_offset) {
|
|
|
+module render_octa_shock_mount_internal_ring_bot(z_offset) {
|
|
|
translate([0, 0, z_offset]) {
|
|
|
- tetra_shock_mount_internal_ring(ring_height, box_radius + wall, mount_corner, internal_ring_gap, 1);
|
|
|
+ octa_shock_mount_internal_ring(ring_height, box_radius + wall, box_radius * 2 + wall, mount_corner, internal_ring_gap, 1);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -650,9 +658,9 @@ module render_tetra_shock_mount_ring_connectors(offset) {
|
|
|
// shock mount: top internal ring
|
|
|
//
|
|
|
|
|
|
-module render_tetra_shock_mount_internal_ring_top(z_offset) {
|
|
|
+module render_octa_shock_mount_internal_ring_top(z_offset) {
|
|
|
translate([0, 0, z_offset]) {
|
|
|
- tetra_shock_mount_internal_ring(ring_height, box_radius + wall, mount_corner, internal_ring_gap, 0);
|
|
|
+ octa_shock_mount_internal_ring(ring_height, box_radius + wall, box_radius * 2 + wall, mount_corner, internal_ring_gap, 0);
|
|
|
}
|
|
|
}
|
|
|
|