|
@@ -28,7 +28,6 @@
|
|
|
// Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)
|
|
// Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)
|
|
|
// http://creativecommons.org/licenses/by-nc-sa/4.0/
|
|
// http://creativecommons.org/licenses/by-nc-sa/4.0/
|
|
|
|
|
|
|
|
-include <SpHEAR_common.scad>;
|
|
|
|
|
include <Octathingy_common.scad>;
|
|
include <Octathingy_common.scad>;
|
|
|
include <CCRMA_logo.scad>;
|
|
include <CCRMA_logo.scad>;
|
|
|
|
|
|
|
@@ -124,30 +123,6 @@ internal_ring_gap = 1.0;
|
|
|
connector_w = 10.0;
|
|
connector_w = 10.0;
|
|
|
connector_d = 2.0;
|
|
connector_d = 2.0;
|
|
|
|
|
|
|
|
-// the printed circuit board
|
|
|
|
|
-
|
|
|
|
|
-module pcb(length, width, thick) {
|
|
|
|
|
- translate([-width/2, 0, 0]) {
|
|
|
|
|
- cube([width, thick, length]);
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-// the printed circuit board plus space in the front and back for components
|
|
|
|
|
-
|
|
|
|
|
-module pcb_clear(length, width, thick, slot_depth, front, back) {
|
|
|
|
|
- translate([0, - (thick + front)]) {
|
|
|
|
|
- pcb(length, width, thick);
|
|
|
|
|
- // clear space in the front
|
|
|
|
|
- translate([- (width/2 - slot_depth), thick, 0]) {
|
|
|
|
|
- cube([width - 2 * slot_depth, front, length]);
|
|
|
|
|
- }
|
|
|
|
|
- // clear space in the back
|
|
|
|
|
- translate([- (width/2 - slot_depth), - back, 0]) {
|
|
|
|
|
- cube([width - 2 * slot_depth, back, length]);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
// all eight printed circuit boards
|
|
// all eight printed circuit boards
|
|
|
|
|
|
|
|
module octa_pcb_clear(length, width, thick, slot_depth, front, back) {
|
|
module octa_pcb_clear(length, width, thick, slot_depth, front, back) {
|
|
@@ -162,64 +137,25 @@ module octa_pcb_clear(length, width, thick, slot_depth, front, back) {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-// box with rounded corners
|
|
|
|
|
-
|
|
|
|
|
-module solid_round_box(height, width, depth, radius) {
|
|
|
|
|
- dw = width - radius;
|
|
|
|
|
- dd = depth - radius;
|
|
|
|
|
- minkowski() {
|
|
|
|
|
- translate([-dw, -dd, 0]) {
|
|
|
|
|
- cube([dw * 2, dd * 2, height / 2]);
|
|
|
|
|
- }
|
|
|
|
|
- cylinder(r = radius, h = height / 2, $fn = facets);
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-module round_box(height, width, depth, radius, wall) {
|
|
|
|
|
- iradius = radius * ((width - wall) / width);
|
|
|
|
|
- difference() {
|
|
|
|
|
- solid_round_box(height, width, depth, radius);
|
|
|
|
|
- solid_round_box(height, width - wall, depth - wall, iradius);
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-module octa_mount_box(height, xr, yr, corner) {
|
|
|
|
|
- xrd = xr - corner;
|
|
|
|
|
- yrd = yr - corner;
|
|
|
|
|
- minkowski() {
|
|
|
|
|
- translate([-xrd, -yrd, 0]) {
|
|
|
|
|
- cube([xrd * 2, yrd * 2, height / 2]);
|
|
|
|
|
- }
|
|
|
|
|
- cylinder(r = corner, h = height / 2, $fn = facets);
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-// inset box with rounded corners
|
|
|
|
|
-
|
|
|
|
|
-module octa_mount_box_relative(height, ref_xradius, ref_yradius, ref_corner, radius_inc) {
|
|
|
|
|
- corner = ref_corner * ((ref_xradius + radius_inc) / ref_xradius);
|
|
|
|
|
- octa_mount_box(height, ref_xradius + radius_inc, ref_yradius + radius_inc, corner);
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
// the main body of the microphone mount
|
|
// the main body of the microphone mount
|
|
|
|
|
|
|
|
module octa_mount_body(height, width, depth, radius, lower_lip, upper_lip, clear) {
|
|
module octa_mount_body(height, width, depth, radius, lower_lip, upper_lip, clear) {
|
|
|
// outer shell
|
|
// outer shell
|
|
|
difference() {
|
|
difference() {
|
|
|
- round_box(height, width, depth, radius, 2 * wall);
|
|
|
|
|
|
|
+ rounded_box(height, width, depth, radius, 2 * wall);
|
|
|
// upper lip for flare to microphone
|
|
// upper lip for flare to microphone
|
|
|
translate([0, 0, height - upper_lip]) {
|
|
translate([0, 0, height - upper_lip]) {
|
|
|
- round_box(upper_lip, width, depth, radius, wall + lip_fit);
|
|
|
|
|
|
|
+ rounded_box(upper_lip, width, depth, radius, wall + lip_fit);
|
|
|
|
|
+ }
|
|
|
|
|
+ // lower lip for flare to cable
|
|
|
|
|
+ translate([0, 0, 0]) {
|
|
|
|
|
+ rounded_box(upper_lip, width, depth, radius, wall + lip_fit);
|
|
|
}
|
|
}
|
|
|
- // lower lip for flare to cable
|
|
|
|
|
- translate([0, 0, 0]) {
|
|
|
|
|
- round_box(upper_lip, width, depth, radius, wall + lip_fit);
|
|
|
|
|
- }
|
|
|
|
|
}
|
|
}
|
|
|
// mounting slots for pcb's
|
|
// mounting slots for pcb's
|
|
|
slot_len = 30;
|
|
slot_len = 30;
|
|
|
difference() {
|
|
difference() {
|
|
|
- solid_round_box(slot_len, width - wall - lip_fit, depth - wall - lip_fit, radius);
|
|
|
|
|
|
|
+ rounded_block(slot_len, width - wall - lip_fit, depth - wall - lip_fit, radius);
|
|
|
union() {
|
|
union() {
|
|
|
// hollow out the inside with slots for pcbs
|
|
// hollow out the inside with slots for pcbs
|
|
|
octa_pcb_clear(slot_len, pcb_width, pcb_thickness, pcb_slot_depth, pcb_front, pcb_back);
|
|
octa_pcb_clear(slot_len, pcb_width, pcb_thickness, pcb_slot_depth, pcb_front, pcb_back);
|
|
@@ -268,22 +204,22 @@ module octa_mount_body(height, width, depth, radius, lower_lip, upper_lip, clear
|
|
|
module octa_mount_flare(height, lip, transition, xradius, yradius, corner, top_radius, stalk_height, dot) {
|
|
module octa_mount_flare(height, lip, transition, xradius, yradius, corner, top_radius, stalk_height, dot) {
|
|
|
// bottom rounded box
|
|
// bottom rounded box
|
|
|
difference() {
|
|
difference() {
|
|
|
- octa_mount_box(height, xradius, yradius, corner);
|
|
|
|
|
- octa_mount_box_relative(height, xradius, yradius, corner, -(2 * wall));
|
|
|
|
|
|
|
+ rounded_block(height, xradius, yradius, corner);
|
|
|
|
|
+ rounded_block_relative(height, xradius, yradius, corner, -(2 * wall));
|
|
|
// flange to mount on body
|
|
// flange to mount on body
|
|
|
- octa_mount_box_relative(lip + 1.00, xradius, yradius, corner, - (wall));
|
|
|
|
|
|
|
+ rounded_block_relative(lip + 1.00, xradius, yradius, corner, - (wall));
|
|
|
}
|
|
}
|
|
|
// flare to round section
|
|
// flare to round section
|
|
|
translate([0, 0, height]) {
|
|
translate([0, 0, height]) {
|
|
|
difference() {
|
|
difference() {
|
|
|
hull() {
|
|
hull() {
|
|
|
- octa_mount_box(1, xradius, yradius, corner);
|
|
|
|
|
|
|
+ rounded_block(1, xradius, yradius, corner);
|
|
|
translate([0, 0, transition]) {
|
|
translate([0, 0, transition]) {
|
|
|
cylinder(r = top_radius, h = 1, $fn = facets);
|
|
cylinder(r = top_radius, h = 1, $fn = facets);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
hull() {
|
|
hull() {
|
|
|
- octa_mount_box_relative(1, xradius, yradius, corner, - 2 * wall);
|
|
|
|
|
|
|
+ rounded_block_relative(1, xradius, yradius, corner, - 2 * wall);
|
|
|
translate([0, 0, transition]) {
|
|
translate([0, 0, transition]) {
|
|
|
cylinder(r = top_radius - wall, h = 1, $fn = facets);
|
|
cylinder(r = top_radius - wall, h = 1, $fn = facets);
|
|
|
}
|
|
}
|
|
@@ -315,28 +251,28 @@ module octa_mount_flare(height, lip, transition, xradius, yradius, corner, top_r
|
|
|
// flares from the body to a dual cable housing
|
|
// flares from the body to a dual cable housing
|
|
|
|
|
|
|
|
module octa_mount_flare_dual(height, lip, transition, xradius, yradius, corner, top_radius, stalk_height) {
|
|
module octa_mount_flare_dual(height, lip, transition, xradius, yradius, corner, top_radius, stalk_height) {
|
|
|
- // hack to get it to render, fix problem in octa_mount_box when radius is equal to corner...
|
|
|
|
|
|
|
+ // hack to get it to render, fix problem in rounded_block when radius is equal to corner...
|
|
|
delta = 0.001;
|
|
delta = 0.001;
|
|
|
// bottom rounded box
|
|
// bottom rounded box
|
|
|
difference() {
|
|
difference() {
|
|
|
- octa_mount_box(height, xradius, yradius, corner);
|
|
|
|
|
- octa_mount_box_relative(height, xradius, yradius, corner, -(2 * wall));
|
|
|
|
|
|
|
+ rounded_block(height, xradius, yradius, corner);
|
|
|
|
|
+ rounded_block_relative(height, xradius, yradius, corner, -(2 * wall));
|
|
|
// flange to mount on body
|
|
// flange to mount on body
|
|
|
- octa_mount_box_relative(lip + 1.00, xradius, yradius, corner, - (wall));
|
|
|
|
|
|
|
+ rounded_block_relative(lip + 1.00, xradius, yradius, corner, - (wall));
|
|
|
}
|
|
}
|
|
|
// flare to rounded section section
|
|
// flare to rounded section section
|
|
|
translate([0, 0, height]) {
|
|
translate([0, 0, height]) {
|
|
|
difference() {
|
|
difference() {
|
|
|
hull() {
|
|
hull() {
|
|
|
- octa_mount_box(0.01, xradius, yradius, corner);
|
|
|
|
|
|
|
+ rounded_block(0.01, xradius, yradius, corner);
|
|
|
translate([0, 0, transition]) {
|
|
translate([0, 0, transition]) {
|
|
|
- octa_mount_box(0.01, top_radius, top_radius * 2, top_radius - delta);
|
|
|
|
|
|
|
+ rounded_block(0.01, top_radius, top_radius * 2, top_radius - delta);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
hull() {
|
|
hull() {
|
|
|
- octa_mount_box_relative(0.01, xradius, yradius, corner, - 2 * wall);
|
|
|
|
|
|
|
+ rounded_block_relative(0.01, xradius, yradius, corner, - 2 * wall);
|
|
|
translate([0, 0, transition]) {
|
|
translate([0, 0, transition]) {
|
|
|
- octa_mount_box(0.01, top_radius - wall, (top_radius * 2) - 1.5 * wall, top_radius - wall - delta);
|
|
|
|
|
|
|
+ rounded_block(0.01, top_radius - wall, (top_radius * 2) - 1.5 * wall, top_radius - wall - delta);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -344,7 +280,7 @@ module octa_mount_flare_dual(height, lip, transition, xradius, yradius, corner,
|
|
|
// corner box cable stalk
|
|
// corner box cable stalk
|
|
|
translate([0, 0, height + transition]) {
|
|
translate([0, 0, height + transition]) {
|
|
|
difference() {
|
|
difference() {
|
|
|
- octa_mount_box(stalk_height, top_radius, top_radius * 2, top_radius - delta);
|
|
|
|
|
|
|
+ rounded_block(stalk_height, top_radius, top_radius * 2, top_radius - delta);
|
|
|
// add holes for two cables
|
|
// add holes for two cables
|
|
|
for (offset = [top_radius - wall/2, -(top_radius - wall/2)]) {
|
|
for (offset = [top_radius - wall/2, -(top_radius - wall/2)]) {
|
|
|
translate([0, offset, 0]){
|
|
translate([0, offset, 0]){
|
|
@@ -400,7 +336,7 @@ module octa_capsule_array_mount(angles) {
|
|
|
|
|
|
|
|
// internal ring of shock mount
|
|
// internal ring of shock mount
|
|
|
|
|
|
|
|
-module tetra_shock_mount_internal_ring(height, radius, corner, gap, lip) {
|
|
|
|
|
|
|
+module octa_shock_mount_internal_ring(height, radius, corner, gap, lip) {
|
|
|
slot_sep = radius * 2 / 2.5;
|
|
slot_sep = radius * 2 / 2.5;
|
|
|
slot_w = 5;
|
|
slot_w = 5;
|
|
|
slot_o = height / 3;
|
|
slot_o = height / 3;
|
|
@@ -408,13 +344,13 @@ module tetra_shock_mount_internal_ring(height, radius, corner, gap, lip) {
|
|
|
union() {
|
|
union() {
|
|
|
// base ring
|
|
// base ring
|
|
|
difference() {
|
|
difference() {
|
|
|
- tetra_mount_box_relative(slot_o, radius + gap, corner, 3 * wall);
|
|
|
|
|
- tetra_mount_box(slot_o, radius + gap, corner);
|
|
|
|
|
|
|
+ tetra_rounded_mount_box_relative(slot_o, radius + gap, corner, 3 * wall);
|
|
|
|
|
+ tetra_rounded_mount_box(slot_o, radius + gap, corner);
|
|
|
}
|
|
}
|
|
|
// upper ring with slots for rubber bands
|
|
// upper ring with slots for rubber bands
|
|
|
difference() {
|
|
difference() {
|
|
|
- tetra_mount_box_relative(height, radius + gap + 2 * wall, corner, 2 * wall);
|
|
|
|
|
- tetra_mount_box_relative(height, radius + gap + wall, corner, 1 * wall);
|
|
|
|
|
|
|
+ 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);
|
|
|
for (rot = [0, 90, 180, 270]) rotate([0, 0, rot]) {
|
|
for (rot = [0, 90, 180, 270]) rotate([0, 0, rot]) {
|
|
|
// slots for rubber bands
|
|
// slots for rubber bands
|
|
|
minkr = 1.25;
|
|
minkr = 1.25;
|
|
@@ -488,8 +424,8 @@ module tetra_shock_mount_ring(outside_radius, inside_radius, thickness) {
|
|
|
|
|
|
|
|
module tetra_shock_mount_external_ring(height, radius, corner, gap, lip) {
|
|
module tetra_shock_mount_external_ring(height, radius, corner, gap, lip) {
|
|
|
difference() {
|
|
difference() {
|
|
|
- tetra_mount_box_relative(6, radius, mount_corner, gap);
|
|
|
|
|
- tetra_mount_box_relative(6, radius, mount_corner, gap - 4 * wall);
|
|
|
|
|
|
|
+ tetra_rounded_mount_box_relative(6, radius, mount_corner, gap);
|
|
|
|
|
+ tetra_rounded_mount_box_relative(6, radius, mount_corner, gap - 4 * wall);
|
|
|
}
|
|
}
|
|
|
for (rot = [0, 90, 180, 270]) {
|
|
for (rot = [0, 90, 180, 270]) {
|
|
|
rotate([0, 0, rot]) {
|
|
rotate([0, 0, rot]) {
|
|
@@ -505,8 +441,8 @@ module tetra_shock_mount_external_ring(height, radius, corner, gap, lip) {
|
|
|
translate([0, 18, 0]) {
|
|
translate([0, 18, 0]) {
|
|
|
intersection() {
|
|
intersection() {
|
|
|
difference() {
|
|
difference() {
|
|
|
- tetra_mount_box_relative(6, radius, mount_corner - 5, gap);
|
|
|
|
|
- tetra_mount_box_relative(6, radius, mount_corner - 5, gap - 4 * wall);
|
|
|
|
|
|
|
+ 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]) {
|
|
translate([-(radius + 2 * mount_corner), 0, 0]) {
|
|
|
cube([2 * (radius + 2 * mount_corner), radius + 2 * mount_corner, 6]);
|
|
cube([2 * (radius + 2 * mount_corner), radius + 2 * mount_corner, 6]);
|