|
@@ -25,25 +25,31 @@
|
|
|
// http://creativecommons.org/licenses/by-nc-sa/4.0/
|
|
// http://creativecommons.org/licenses/by-nc-sa/4.0/
|
|
|
|
|
|
|
|
include <TinySpHEAR_common.scad>;
|
|
include <TinySpHEAR_common.scad>;
|
|
|
|
|
+include <CCRMA_logo.scad>;
|
|
|
|
|
|
|
|
////
|
|
////
|
|
|
//// default model parameters
|
|
//// default model parameters
|
|
|
////
|
|
////
|
|
|
|
|
|
|
|
// size of Zapnspark printed circuit board
|
|
// size of Zapnspark printed circuit board
|
|
|
-pcb_length = 85.090;
|
|
|
|
|
|
|
+pcb_length = 81.915;
|
|
|
// measured = 16.26 (fit = 0.25)
|
|
// measured = 16.26 (fit = 0.25)
|
|
|
-pcb_width = 16.51;
|
|
|
|
|
|
|
+pcb_width = 19.050;
|
|
|
// measured = 1.33 (fit = 0.28)
|
|
// measured = 1.33 (fit = 0.28)
|
|
|
pcb_thickness = 1.61;
|
|
pcb_thickness = 1.61;
|
|
|
|
|
|
|
|
-// we leave 12mm of the pcb exposed on the bottom of the body so that we
|
|
|
|
|
|
|
+// we leave part of the pcb exposed on the bottom of the body so that we
|
|
|
// can solder the wires that connect the microphone with the
|
|
// can solder the wires that connect the microphone with the
|
|
|
// preamplifier, same at the top of the pcb to solder the wires
|
|
// preamplifier, same at the top of the pcb to solder the wires
|
|
|
// to the capsules
|
|
// to the capsules
|
|
|
pcb_low_exp = 12.0;
|
|
pcb_low_exp = 12.0;
|
|
|
pcb_hi_exp = 8.0;
|
|
pcb_hi_exp = 8.0;
|
|
|
|
|
|
|
|
|
|
+// clearance from the bottom and top of pcb's to the start of the flare,
|
|
|
|
|
+// this adds space for the protuding molex pins on which we solder
|
|
|
|
|
+pcb_low_clear = 15.0;
|
|
|
|
|
+pcb_hi_clear = 15.0;
|
|
|
|
|
+
|
|
|
// diameter of four conductor cable
|
|
// diameter of four conductor cable
|
|
|
cable_diam = 9.5;
|
|
cable_diam = 9.5;
|
|
|
|
|
|
|
@@ -51,7 +57,7 @@ cable_diam = 9.5;
|
|
|
mount_lip = 6.0;
|
|
mount_lip = 6.0;
|
|
|
|
|
|
|
|
// main body corner radius
|
|
// main body corner radius
|
|
|
-mount_corner = 10.0;
|
|
|
|
|
|
|
+mount_corner = 15.0;
|
|
|
|
|
|
|
|
// capsule array mount, height of flare and stalk
|
|
// capsule array mount, height of flare and stalk
|
|
|
flare_height = 50;
|
|
flare_height = 50;
|
|
@@ -71,9 +77,8 @@ lip_fit = 0.20 / 2;
|
|
|
wall = 1.0;
|
|
wall = 1.0;
|
|
|
|
|
|
|
|
// back and front clearance of pcb (components and leads)
|
|
// back and front clearance of pcb (components and leads)
|
|
|
-// pcb_front = 10.2;
|
|
|
|
|
-pcb_front = 12.5;
|
|
|
|
|
-pcb_back = 2.0;
|
|
|
|
|
|
|
+pcb_front = 13.25;
|
|
|
|
|
+pcb_back = 3.0;
|
|
|
|
|
|
|
|
// calculated minimum "radius" of microphone box
|
|
// calculated minimum "radius" of microphone box
|
|
|
box_radius = pcb_front + (pcb_thickness + pcb_tfit) + pcb_back + 2 * wall;
|
|
box_radius = pcb_front + (pcb_thickness + pcb_tfit) + pcb_back + 2 * wall;
|
|
@@ -81,13 +86,18 @@ box_radius = pcb_front + (pcb_thickness + pcb_tfit) + pcb_back + 2 * wall;
|
|
|
// shock mount parameters
|
|
// shock mount parameters
|
|
|
//
|
|
//
|
|
|
|
|
|
|
|
-ring_sep = 30;
|
|
|
|
|
-ring_height = 6;
|
|
|
|
|
-band_angle = 40;
|
|
|
|
|
-main_radius_inc = (ring_sep / 2) / tan(band_angle);
|
|
|
|
|
|
|
+ring_sep = 30.0;
|
|
|
|
|
+ring_height = 10.0;
|
|
|
|
|
+rubber_band_angle = 40;
|
|
|
|
|
+main_radius_inc = (ring_sep / 2) / tan(rubber_band_angle);
|
|
|
|
|
|
|
|
|
|
+// gap between internal ring and microphone body
|
|
|
internal_ring_gap = 1.0;
|
|
internal_ring_gap = 1.0;
|
|
|
|
|
|
|
|
|
|
+// connector that joins the two internal rings
|
|
|
|
|
+connector_w = 10.0;
|
|
|
|
|
+connector_d = 2.0;
|
|
|
|
|
+
|
|
|
// the printed circuit board
|
|
// the printed circuit board
|
|
|
|
|
|
|
|
module pcb(length, width, thick) {
|
|
module pcb(length, width, thick) {
|
|
@@ -122,7 +132,7 @@ module tetra_pcb_clear(length, width, thick, slot_depth, front, back) {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-// create a box with rounded corners
|
|
|
|
|
|
|
+// box with rounded corners
|
|
|
|
|
|
|
|
module tetra_mount_box(height, radius, corner) {
|
|
module tetra_mount_box(height, radius, corner) {
|
|
|
rd = radius - corner;
|
|
rd = radius - corner;
|
|
@@ -134,8 +144,10 @@ module tetra_mount_box(height, radius, corner) {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+// inset box with rounded corners
|
|
|
|
|
+
|
|
|
module tetra_mount_box_relative(height, ref_radius, ref_corner, radius_inc) {
|
|
module tetra_mount_box_relative(height, ref_radius, ref_corner, radius_inc) {
|
|
|
- corner = (ref_radius + radius_inc) * (ref_radius - ref_corner) / ref_radius;
|
|
|
|
|
|
|
+ corner = ref_corner * ((ref_radius + radius_inc) / ref_radius);
|
|
|
tetra_mount_box(height, ref_radius + radius_inc, corner);
|
|
tetra_mount_box(height, ref_radius + radius_inc, corner);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -150,14 +162,9 @@ module tetra_mount_body(height, radius, corner, lower_lip, upper_lip, clear) {
|
|
|
// trim square angles
|
|
// trim square angles
|
|
|
cylinder(r = pcb_front, h = height, $fn = facets);
|
|
cylinder(r = pcb_front, h = height, $fn = facets);
|
|
|
// remove slots from inside body
|
|
// remove slots from inside body
|
|
|
- slot_len = 15;
|
|
|
|
|
|
|
+ slot_len = 30;
|
|
|
translate([0, 0, slot_len]) {
|
|
translate([0, 0, slot_len]) {
|
|
|
- hull() {
|
|
|
|
|
- tetra_mount_box_relative(height - (3 * slot_len), radius, corner, - (2 * wall));
|
|
|
|
|
- translate([0, 0, height - (2 * slot_len) + height / 3]) {
|
|
|
|
|
- cylinder(r = radius / 3, h = 1, $fn = facets);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ tetra_mount_box_relative(height, radius, corner, - (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]) {
|
|
@@ -175,19 +182,6 @@ module tetra_mount_body(height, radius, corner, lower_lip, upper_lip, clear) {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- // external slot for microphone holder
|
|
|
|
|
- if (0) {
|
|
|
|
|
- mount_slot_len = 30;
|
|
|
|
|
- mount_slot_stem = 4;
|
|
|
|
|
- mount_slot_width = 2;
|
|
|
|
|
- mount_slot_radius = 2;
|
|
|
|
|
- translate([-(radius + mount_slot_stem), -(mount_slot_width/2), 0]) {
|
|
|
|
|
- cube([mount_slot_stem, mount_slot_width, mount_slot_len]);
|
|
|
|
|
- }
|
|
|
|
|
- translate([-(radius + mount_slot_stem), 0, 0]) {
|
|
|
|
|
- cylinder(r = mount_slot_radius, h = mount_slot_len, $fn = facets);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
// add parts for clearance check
|
|
// add parts for clearance check
|
|
|
if (clear == 1) {
|
|
if (clear == 1) {
|
|
|
// electrolytic capacitors
|
|
// electrolytic capacitors
|
|
@@ -195,83 +189,25 @@ module tetra_mount_body(height, radius, corner, lower_lip, upper_lip, clear) {
|
|
|
for (rot = [0, 180, 270]) {
|
|
for (rot = [0, 180, 270]) {
|
|
|
rotate([0, 0, rot]) {
|
|
rotate([0, 0, rot]) {
|
|
|
translate([-pcb_front + cap_diam/2, 0, 0]) {
|
|
translate([-pcb_front + cap_diam/2, 0, 0]) {
|
|
|
- cylinder(r = (cap_diam/2), h = 20, $fn = facets);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- // 12.3 x 10.53 caps
|
|
|
|
|
- cap_h = 12.3;
|
|
|
|
|
- cap_w = 10.53/2;
|
|
|
|
|
- for (rot = [0, 180, 270]) {
|
|
|
|
|
- rotate([0, 0, rot]) {
|
|
|
|
|
- translate([-pcb_front + cap_h, -cap_w/2 - 2.5, 0]) {
|
|
|
|
|
- cube([cap_h, cap_w, 20]);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-module tetra_mount_body_new(height, radius, corner, lower_lip, upper_lip, clear) {
|
|
|
|
|
- difference() {
|
|
|
|
|
- tetra_mount_box(height, radius, corner);
|
|
|
|
|
- union() {
|
|
|
|
|
- // hollow out the inside with slots for pcbs
|
|
|
|
|
- tetra_pcb_clear(pcb_length, pcb_width, pcb_thickness, 1.0, pcb_front, pcb_back);
|
|
|
|
|
- // trim square angles
|
|
|
|
|
- cylinder(r = pcb_front, h = height, $fn = facets);
|
|
|
|
|
- // remove slots from inside body
|
|
|
|
|
- slot_len = 30;
|
|
|
|
|
- translate([0, 0, slot_len]) {
|
|
|
|
|
- tetra_mount_box_relative(height, radius, corner, - (2 * wall));
|
|
|
|
|
- }
|
|
|
|
|
- // upper lip for flare to microphone
|
|
|
|
|
- translate([0, 0, height - upper_lip]) {
|
|
|
|
|
- difference() {
|
|
|
|
|
- tetra_mount_box(upper_lip, radius, corner);
|
|
|
|
|
- tetra_mount_box_relative(upper_lip, radius, corner, -(wall + lip_fit));
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- // lower lip for flare to cable
|
|
|
|
|
- translate([0, 0, 0]) {
|
|
|
|
|
- difference() {
|
|
|
|
|
- tetra_mount_box(lower_lip, radius, corner);
|
|
|
|
|
- tetra_mount_box_relative(lower_lip, radius, corner, -(wall + lip_fit));
|
|
|
|
|
|
|
+ *cylinder(r = (cap_diam/2), h = 20, $fn = facets);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
- // external slot for microphone holder
|
|
|
|
|
- if (0) {
|
|
|
|
|
- mount_slot_len = 30;
|
|
|
|
|
- mount_slot_stem = 4;
|
|
|
|
|
- mount_slot_width = 2;
|
|
|
|
|
- mount_slot_radius = 2;
|
|
|
|
|
- translate([-(radius + mount_slot_stem), -(mount_slot_width/2), 0]) {
|
|
|
|
|
- cube([mount_slot_stem, mount_slot_width, mount_slot_len]);
|
|
|
|
|
- }
|
|
|
|
|
- translate([-(radius + mount_slot_stem), 0, 0]) {
|
|
|
|
|
- cylinder(r = mount_slot_radius, h = mount_slot_len, $fn = facets);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- // add parts for clearance check
|
|
|
|
|
- if (clear == 1) {
|
|
|
|
|
- // electrolytic capacitors
|
|
|
|
|
- cap_diam = 10.2;
|
|
|
|
|
|
|
+ // PCBs
|
|
|
for (rot = [0, 180, 270]) {
|
|
for (rot = [0, 180, 270]) {
|
|
|
rotate([0, 0, rot]) {
|
|
rotate([0, 0, rot]) {
|
|
|
- translate([-pcb_front + cap_diam/2, 0, 0]) {
|
|
|
|
|
- cylinder(r = (cap_diam/2), h = 20, $fn = facets);
|
|
|
|
|
|
|
+ translate([-(pcb_front + pcb_thickness), -pcb_width/2, -pcb_low_exp]) {
|
|
|
|
|
+ cube([pcb_thickness, pcb_width, pcb_length]);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- // 12.3 x 10.53 caps
|
|
|
|
|
|
|
+ // connectors
|
|
|
cap_h = 12.3;
|
|
cap_h = 12.3;
|
|
|
cap_w = 10.53/2;
|
|
cap_w = 10.53/2;
|
|
|
for (rot = [0, 180, 270]) {
|
|
for (rot = [0, 180, 270]) {
|
|
|
rotate([0, 0, rot]) {
|
|
rotate([0, 0, rot]) {
|
|
|
- translate([-pcb_front + cap_h, -cap_w/2 - 2.5, 0]) {
|
|
|
|
|
- cube([cap_h, cap_w, 20]);
|
|
|
|
|
|
|
+ translate([-pcb_front, -cap_w/2 - 2.5, 0]) {
|
|
|
|
|
+ *cube([cap_h, cap_w, 20]);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -280,7 +216,7 @@ module tetra_mount_body_new(height, radius, corner, lower_lip, upper_lip, clear)
|
|
|
|
|
|
|
|
// flares from the body to the microphone stalk and cable
|
|
// flares from the body to the microphone stalk and cable
|
|
|
|
|
|
|
|
-module tetra_mount_flare(height, lip, transition, bot_radius, bot_corner, top_radius, stalk_height) {
|
|
|
|
|
|
|
+module tetra_mount_flare(height, lip, transition, bot_radius, bot_corner, top_radius, stalk_height, dot) {
|
|
|
// bottom rounded box
|
|
// bottom rounded box
|
|
|
difference() {
|
|
difference() {
|
|
|
tetra_mount_box(height, bot_radius, bot_corner);
|
|
tetra_mount_box(height, bot_radius, bot_corner);
|
|
@@ -312,6 +248,19 @@ module tetra_mount_flare(height, lip, transition, bot_radius, bot_corner, top_ra
|
|
|
cylinder(r = top_radius, h = stalk_height, $fn = facets);
|
|
cylinder(r = top_radius, h = stalk_height, $fn = facets);
|
|
|
cylinder(r = top_radius - wall, h = stalk_height, $fn = facets);
|
|
cylinder(r = top_radius - wall, h = stalk_height, $fn = facets);
|
|
|
}
|
|
}
|
|
|
|
|
+ // add marker for "back of microphone" orientation
|
|
|
|
|
+ if (dot == 1) {
|
|
|
|
|
+ rotate([0, 0, 90]) {
|
|
|
|
|
+ translate([0, top_radius - wall * 2 / 3, stalk_height - top_radius]) {
|
|
|
|
|
+ difference() {
|
|
|
|
|
+ sphere(r = top_radius / 3, $fn = 32);
|
|
|
|
|
+ translate([0, -top_radius + top_radius / 2, 0]) {
|
|
|
|
|
+ cube([top_radius, top_radius, top_radius], center = true);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -350,9 +299,6 @@ module tetra_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;
|
|
|
- // connecting bar dimensions
|
|
|
|
|
- bar_w = 10;
|
|
|
|
|
- bar_d = 2;
|
|
|
|
|
difference() {
|
|
difference() {
|
|
|
union() {
|
|
union() {
|
|
|
// base ring
|
|
// base ring
|
|
@@ -382,11 +328,11 @@ module tetra_shock_mount_internal_ring(height, radius, corner, gap, lip) {
|
|
|
}
|
|
}
|
|
|
// body for bars that connect both rings together
|
|
// body for bars that connect both rings together
|
|
|
for (rot = [0, 90, 180, 270]) rotate([0, 0, rot]) {
|
|
for (rot = [0, 90, 180, 270]) rotate([0, 0, rot]) {
|
|
|
- translate([radius + gap + 3 * wall, -(bar_w/2 + wall), 0]) {
|
|
|
|
|
- cube([bar_d + wall, bar_w + 2 * wall, height]);
|
|
|
|
|
|
|
+ translate([radius + 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]) {
|
|
for (m = [0, 1]) mirror([0, m, 0]) {
|
|
|
- translate([radius + gap + 4 * wall, -(bar_w/2 + wall), 0]) {
|
|
|
|
|
|
|
+ translate([radius + gap + 4 * wall, -(connector_w/2 + wall), 0]) {
|
|
|
cylinder(r = wall * 2, h = height, $fn = 3);
|
|
cylinder(r = wall * 2, h = height, $fn = 3);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -394,11 +340,11 @@ module tetra_shock_mount_internal_ring(height, radius, corner, gap, lip) {
|
|
|
}
|
|
}
|
|
|
// carve holes for bars that connect both rings
|
|
// carve holes for bars that connect both rings
|
|
|
for (rot = [0, 90, 180, 270]) rotate([0, 0, rot]) {
|
|
for (rot = [0, 90, 180, 270]) rotate([0, 0, rot]) {
|
|
|
- translate([radius + gap + 3 * wall, -bar_w/2, 0]) {
|
|
|
|
|
- cube([bar_d, bar_w, height - 2.75 * wall]);
|
|
|
|
|
- translate([bar_d / 2, 0, height - 3 * wall]) {
|
|
|
|
|
|
|
+ translate([radius + 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]) {
|
|
rotate([-90, 0, 0]) {
|
|
|
- cylinder(r = bar_d / 2, h = bar_w, $fn = facets);
|
|
|
|
|
|
|
+ cylinder(r = connector_d / 2, h = connector_w, $fn = facets);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -419,6 +365,8 @@ module tetra_shock_mount_internal_ring(height, radius, corner, gap, lip) {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+// eyelet for connecting the external ring to the stand mount
|
|
|
|
|
+
|
|
|
module tetra_shock_mount_ring(outside_radius, inside_radius, thickness) {
|
|
module tetra_shock_mount_ring(outside_radius, inside_radius, thickness) {
|
|
|
difference() {
|
|
difference() {
|
|
|
union() {
|
|
union() {
|
|
@@ -431,6 +379,8 @@ 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 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);
|
|
@@ -473,6 +423,7 @@ module tetra_shock_mount_external_ring(height, radius, corner, gap, lip) {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+// connector that joins the two internal rings
|
|
|
|
|
|
|
|
module tetra_shock_mount_connector(length, lip, width, thickness, fit) {
|
|
module tetra_shock_mount_connector(length, lip, width, thickness, fit) {
|
|
|
cube([length + 2 * lip , width - 2 * fit, thickness - 2 * fit]);
|
|
cube([length + 2 * lip , width - 2 * fit, thickness - 2 * fit]);
|
|
@@ -480,6 +431,8 @@ module tetra_shock_mount_connector(length, lip, width, thickness, fit) {
|
|
|
cube([length , width + thickness, thickness * 3 / 2]);
|
|
cube([length , width + thickness, thickness * 3 / 2]);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+// mount to standard microphone clip stand mount
|
|
|
|
|
+
|
|
|
module tetra_shock_mount_stand(height, wall, stand_wall) {
|
|
module tetra_shock_mount_stand(height, wall, stand_wall) {
|
|
|
// stand mount
|
|
// stand mount
|
|
|
translate([0, 0, 0]) {
|
|
translate([0, 0, 0]) {
|
|
@@ -542,8 +495,9 @@ module tetra_shock_mount_stand(height, wall, stand_wall) {
|
|
|
|
|
|
|
|
module render_tetra_capsule_flare(z_offset) {
|
|
module render_tetra_capsule_flare(z_offset) {
|
|
|
translate([0, 0, z_offset]) {
|
|
translate([0, 0, z_offset]) {
|
|
|
- tetra_mount_flare(10 + pcb_hi_exp, mount_lip, flare_height, box_radius + wall, mount_corner, mount_radius + wall, stalk_height);
|
|
|
|
|
- translate([0, 0, 10 + pcb_hi_exp + flare_height + stalk_height]) {
|
|
|
|
|
|
|
+ tetra_mount_flare(pcb_hi_clear + pcb_hi_exp,
|
|
|
|
|
+ mount_lip, flare_height, box_radius + wall, mount_corner, mount_radius + wall, stalk_height, 1);
|
|
|
|
|
+ translate([0, 0, pcb_hi_clear + pcb_hi_exp + flare_height + stalk_height]) {
|
|
|
tetra_capsule_array_mount([-45, 135]);
|
|
tetra_capsule_array_mount([-45, 135]);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -553,9 +507,20 @@ module render_tetra_capsule_flare(z_offset) {
|
|
|
//
|
|
//
|
|
|
tetra_pcb_mount_height = pcb_length - pcb_low_exp - pcb_hi_exp;
|
|
tetra_pcb_mount_height = pcb_length - pcb_low_exp - pcb_hi_exp;
|
|
|
|
|
|
|
|
-module render_tetra_pcb_mount(z_offset) {
|
|
|
|
|
|
|
+module render_tetra_pcb_mount(z_offset, showint) {
|
|
|
translate([0, 0, z_offset]) {
|
|
translate([0, 0, z_offset]) {
|
|
|
- tetra_mount_body_new(tetra_pcb_mount_height, box_radius + wall, mount_corner, mount_lip, mount_lip, 0);
|
|
|
|
|
|
|
+ tetra_mount_body(tetra_pcb_mount_height, box_radius + wall, mount_corner, mount_lip, mount_lip, showint);
|
|
|
|
|
+ }
|
|
|
|
|
+ // add ccrma logo
|
|
|
|
|
+ rotate([0, 0, -90]) {
|
|
|
|
|
+ translate([0, -(box_radius + 0.5), tetra_pcb_mount_height / 2]) {
|
|
|
|
|
+ rotate([90, 270, 0]) {
|
|
|
|
|
+ logo_scale = 1/2;
|
|
|
|
|
+ scale([logo_scale, logo_scale, 1.0]) {
|
|
|
|
|
+ ccrma_logo(1.0);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -564,19 +529,20 @@ module render_tetra_pcb_mount(z_offset) {
|
|
|
|
|
|
|
|
module render_tetra_cable_flare(z_offset, flip) {
|
|
module render_tetra_cable_flare(z_offset, flip) {
|
|
|
translate([0, 0, z_offset]) {
|
|
translate([0, 0, z_offset]) {
|
|
|
- tetra_mount_flare(10 + pcb_low_exp, mount_lip, 20, box_radius + wall, mount_corner, cable_diam / 2 + wall, 10);
|
|
|
|
|
|
|
+ tetra_mount_flare(pcb_low_clear + pcb_low_exp, mount_lip, 20, box_radius + wall, mount_corner, cable_diam / 2 + wall, 10, 0);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// microphone body: render all parts with a vertical separation
|
|
// microphone body: render all parts with a vertical separation
|
|
|
//
|
|
//
|
|
|
|
|
|
|
|
-module render_tetra_body(z_offset, spread) {
|
|
|
|
|
|
|
+module render_tetra_body(z_offset, spread, showint) {
|
|
|
rotate([0, 180, 0]) {
|
|
rotate([0, 180, 0]) {
|
|
|
render_tetra_cable_flare(0);
|
|
render_tetra_cable_flare(0);
|
|
|
}
|
|
}
|
|
|
- render_tetra_pcb_mount(spread);
|
|
|
|
|
- render_tetra_capsule_flare(tetra_pcb_mount_height + spread + spread);
|
|
|
|
|
|
|
+ lippy = spread - mount_lip;
|
|
|
|
|
+ render_tetra_pcb_mount(lippy, showint);
|
|
|
|
|
+ render_tetra_capsule_flare(tetra_pcb_mount_height + 2 * lippy);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// microphone: render the full assembly with a vertical separation
|
|
// microphone: render the full assembly with a vertical separation
|
|
@@ -584,11 +550,26 @@ module render_tetra_body(z_offset, spread) {
|
|
|
|
|
|
|
|
module render_tetra_microphone(z_offset, spread) {
|
|
module render_tetra_microphone(z_offset, spread) {
|
|
|
render_tetra_body(z_offset, spread);
|
|
render_tetra_body(z_offset, spread);
|
|
|
|
|
+ lippy = spread - mount_lip;
|
|
|
render_tetra_capsule_array(z_offset + tetra_pcb_mount_height + mount_top_height +
|
|
render_tetra_capsule_array(z_offset + tetra_pcb_mount_height + mount_top_height +
|
|
|
- flare_height + stalk_height + 10 + pcb_hi_exp + mount_lip + mic_radius + spread);
|
|
|
|
|
|
|
+ flare_height + stalk_height + pcb_hi_clear + pcb_hi_exp + 2 * lippy + spread + mic_radius);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-// shock mount: microphone stand mount
|
|
|
|
|
|
|
+// microphone: render the full assembly with a vertical separation
|
|
|
|
|
+// cut out halt of the assembly so that we can see the inside
|
|
|
|
|
+//
|
|
|
|
|
+
|
|
|
|
|
+module render_tetra_microphone_cutout(z_offset, spread) {
|
|
|
|
|
+ difference() {
|
|
|
|
|
+ render_tetra_microphone(z_offset, spread);
|
|
|
|
|
+ // a cube that blots out half the microphone
|
|
|
|
|
+ translate([0, -50, -50]) {
|
|
|
|
|
+ cube([50, 100, 650]);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+// shock mount: microphone clip on stand mount
|
|
|
//
|
|
//
|
|
|
|
|
|
|
|
module render_tetra_shock_mount_stand(z_offset) {
|
|
module render_tetra_shock_mount_stand(z_offset) {
|
|
@@ -602,7 +583,7 @@ module render_tetra_shock_mount_stand(z_offset) {
|
|
|
|
|
|
|
|
module render_tetra_shock_mount_external_ring(z_offset) {
|
|
module render_tetra_shock_mount_external_ring(z_offset) {
|
|
|
translate([0, 0, z_offset]) {
|
|
translate([0, 0, z_offset]) {
|
|
|
- tetra_shock_mount_external_ring(10, box_radius + wall, mount_corner, main_radius_inc, 0);
|
|
|
|
|
|
|
+ tetra_shock_mount_external_ring(ring_height, box_radius + wall, mount_corner, main_radius_inc, 0);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -611,7 +592,7 @@ module render_tetra_shock_mount_external_ring(z_offset) {
|
|
|
|
|
|
|
|
module render_tetra_shock_mount_internal_ring_bot(z_offset) {
|
|
module render_tetra_shock_mount_internal_ring_bot(z_offset) {
|
|
|
translate([0, 0, z_offset]) {
|
|
translate([0, 0, z_offset]) {
|
|
|
- tetra_shock_mount_internal_ring(10, box_radius + wall, mount_corner, internal_ring_gap, 1);
|
|
|
|
|
|
|
+ tetra_shock_mount_internal_ring(ring_height, box_radius + wall, mount_corner, internal_ring_gap, 1);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -621,7 +602,7 @@ module render_tetra_shock_mount_internal_ring_bot(z_offset) {
|
|
|
module render_tetra_shock_mount_ring_connectors(offset) {
|
|
module render_tetra_shock_mount_ring_connectors(offset) {
|
|
|
for (o = [0, 1, 2, 3]) {
|
|
for (o = [0, 1, 2, 3]) {
|
|
|
translate([-18, (10 + offset) * o, 0]) {
|
|
translate([-18, (10 + offset) * o, 0]) {
|
|
|
- tetra_shock_mount_connector(ring_sep, 4, 10, 2, 0.1);
|
|
|
|
|
|
|
+ tetra_shock_mount_connector(ring_sep, 4, connector_w, connector_d, 0.1);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -631,7 +612,7 @@ module render_tetra_shock_mount_ring_connectors(offset) {
|
|
|
|
|
|
|
|
module render_tetra_shock_mount_internal_ring_top(z_offset) {
|
|
module render_tetra_shock_mount_internal_ring_top(z_offset) {
|
|
|
translate([0, 0, z_offset]) {
|
|
translate([0, 0, z_offset]) {
|
|
|
- tetra_shock_mount_internal_ring(10, box_radius + wall, mount_corner, internal_ring_gap, 0);
|
|
|
|
|
|
|
+ tetra_shock_mount_internal_ring(ring_height, box_radius + wall, mount_corner, internal_ring_gap, 0);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -651,7 +632,7 @@ module render_tetra_shock_mount(z_offset) {
|
|
|
translate([box_radius + 3 * wall + internal_ring_gap, 0, -1]) {
|
|
translate([box_radius + 3 * wall + internal_ring_gap, 0, -1]) {
|
|
|
rotate([0, 90, 0]) {
|
|
rotate([0, 90, 0]) {
|
|
|
translate([-4, -5, 1]) {
|
|
translate([-4, -5, 1]) {
|
|
|
- tetra_shock_mount_connector(ring_sep, 4, 10, 2, 0.1);
|
|
|
|
|
|
|
+ tetra_shock_mount_connector(ring_sep, 4, connector_w, connector_d, 0.1);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -659,26 +640,14 @@ module render_tetra_shock_mount(z_offset) {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
// external ring
|
|
// external ring
|
|
|
- translate([0, 0, z_offset]) {
|
|
|
|
|
|
|
+ translate([0, 0, z_offset - ring_height / 4]) {
|
|
|
render_tetra_shock_mount_external_ring(0);
|
|
render_tetra_shock_mount_external_ring(0);
|
|
|
}
|
|
}
|
|
|
// mount to stand
|
|
// mount to stand
|
|
|
- translate([0, 85, -(mic_mount_height + mic_mount_radius)]) {
|
|
|
|
|
|
|
+ translate([0, 85, -(mic_mount_height + mic_mount_radius + ring_height / 4)]) {
|
|
|
rotate([0, 0, 90]) {
|
|
rotate([0, 0, 90]) {
|
|
|
render_tetra_shock_mount_stand(0);
|
|
render_tetra_shock_mount_stand(0);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-// first try at a ccrma logo
|
|
|
|
|
-//
|
|
|
|
|
-*rotate([90, 0, 0]) {
|
|
|
|
|
- translate([0, 10, box_radius + 1.5]) {
|
|
|
|
|
- scale([0.03, 0.03, 0.02]) {
|
|
|
|
|
- surface(file = "ccrma-black.png", center = true, invert = true);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|