|
|
@@ -13,30 +13,28 @@
|
|
|
// https://en.wikipedia.org/wiki/Tetrahedron
|
|
|
// angle capsule to vertical = atan(sqrt(2)) = 54.7356103172
|
|
|
|
|
|
-
|
|
|
+////
|
|
|
//// model parameters
|
|
|
|
|
|
-// dimensions for the EM182 electret microphone
|
|
|
+// dimensions of the EM182 electret microphone
|
|
|
capsule_radius = 5;
|
|
|
capsule_height = 4.5;
|
|
|
|
|
|
// distance between face of capsule and center of array
|
|
|
-mic_radius = 11;
|
|
|
-
|
|
|
-// separation between capsules (right now only used in stalk)
|
|
|
-cap_sep = 7;
|
|
|
+mic_radius = 10;
|
|
|
|
|
|
-// dimensions of capsule holder legs
|
|
|
+// dimensions of capsule holder connection legs
|
|
|
leg_width = 4;
|
|
|
leg_thick = 2.5;
|
|
|
-leg_length = mic_radius - (capsule_radius / sqrt(2));
|
|
|
-slot_depth = leg_thick;
|
|
|
|
|
|
// dimensions of microphone holder
|
|
|
-hold_radius = 4;
|
|
|
+mount_radius = 3;
|
|
|
|
|
|
-//// end of model parameters
|
|
|
+// height of mount
|
|
|
+mount_height = 4;
|
|
|
|
|
|
+//// end of model parameters
|
|
|
+////
|
|
|
//// rendering control
|
|
|
|
|
|
// what to render:
|
|
|
@@ -50,9 +48,10 @@ renderset = 0;
|
|
|
// 0 -> original cylinder beams
|
|
|
// 1 -> interlocking beams (out)
|
|
|
// 2 -> interlocking beams (in)
|
|
|
-connect = 2;
|
|
|
+connect = 1;
|
|
|
|
|
|
//// end of rendering control
|
|
|
+////
|
|
|
|
|
|
// adjustment for the size of the capsule
|
|
|
// (measured inside diameter was around 7.5 to 8.2 instead of 10, capsule diameter was 9.99)
|
|
|
@@ -67,6 +66,26 @@ wall = 1;
|
|
|
// number of facets for cylinders
|
|
|
facets = 64;
|
|
|
|
|
|
+// width of the ridge that connects to the mount
|
|
|
+ridge_width = 2;
|
|
|
+ridge_length = 3;
|
|
|
+
|
|
|
+// the rest of the leg geometry
|
|
|
+tetra = atan(sqrt(2));
|
|
|
+leg_length =
|
|
|
+ connect == 0 ?
|
|
|
+ mic_radius * sin(tetra) - capsule_radius * cos(tetra) :
|
|
|
+ connect == 1 ?
|
|
|
+ (mic_radius - capsule_height + leg_thick) * sin(tetra) / sin(90 - tetra) - capsule_radius :
|
|
|
+ mic_radius - (capsule_radius / sqrt(2));
|
|
|
+slot_depth = connect == 1 ?
|
|
|
+ leg_thick * 1.5 : leg_thick;
|
|
|
+
|
|
|
+// holder geometry
|
|
|
+capsule_sep_min = mic_radius * sin(tetra) - capsule_radius * cos(tetra);
|
|
|
+capsule_sep_max = capsule_sep_min + capsule_height * sin(tetra);
|
|
|
+capsule_bottom = mic_radius * cos(tetra) + capsule_radius * sin(tetra);
|
|
|
+
|
|
|
////////
|
|
|
// microphone capsule holder
|
|
|
|
|
|
@@ -90,19 +109,21 @@ module capsule (azimuth, elevation, twist, mounts) {
|
|
|
// connect with cylindrical beams, very pretty
|
|
|
if (connect == 0) {
|
|
|
translate([capsule_radius - wall, 0, capsule_height - wall]) {
|
|
|
- rotate(a = 145, v = [0, 1, 0]) {
|
|
|
- cylinder(d = wall * 4, h = 6, center = false, $fn = facets);
|
|
|
+ rotate([0, 90 + tetra, 0]) {
|
|
|
+ cylinder(d = leg_width, h = leg_length - 0.3, center = false, $fn = facets);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- // connect with flat square beams pointing out
|
|
|
+ // connect with horizontal legs
|
|
|
if (connect == 1) {
|
|
|
- translate([capsule_radius - wall, 3 * wall / 4, wall]) {
|
|
|
- rotate(a = 90, v = [0, 1, 0]) {
|
|
|
+ translate([capsule_radius + leg_length + fudge, - leg_width / 3, 0]) {
|
|
|
+ rotate([0, -90, 0]) {
|
|
|
difference() {
|
|
|
- cube([wall * 2, wall * 4, capsule_height * 4], center = true);
|
|
|
- translate([0, 0, wall * 8]) {
|
|
|
- cube([wall * 2, wall * 1.5, capsule_height], center = true);
|
|
|
+ // thickness, width
|
|
|
+ cube([leg_thick, leg_width, leg_length]);
|
|
|
+ // cut slot in connector
|
|
|
+ translate([0, leg_width / 3 - (fit / 2), 0]) {
|
|
|
+ cube([leg_thick, leg_width / 3 + fit, slot_depth]);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -128,9 +149,9 @@ module capsule (azimuth, elevation, twist, mounts) {
|
|
|
rotate(a = 120 + twist, v = [0, 0, 1]) {
|
|
|
translate([capsule_radius + fudge, - wall , 0]) {
|
|
|
difference() {
|
|
|
- cube([wall * 3, wall * 2, capsule_height], center = false);
|
|
|
- rotate([0, 55, 0]) {
|
|
|
- cube([wall * 3, wall * 2, capsule_height], center = false);
|
|
|
+ cube([ridge_length, ridge_width, capsule_height], center = false);
|
|
|
+ rotate([0, tetra, 0]) {
|
|
|
+ cube([ridge_length, ridge_width, capsule_height], center = false);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -142,90 +163,46 @@ module capsule (azimuth, elevation, twist, mounts) {
|
|
|
cylinder(r = capsule_radius + fudge, h = capsule_height + 2, $fn = facets);
|
|
|
}
|
|
|
// remove any extra connecting beam material from the face of the holder
|
|
|
- //translate ([0, 0, capsule_height]) {
|
|
|
- // cylinder(r = capsule_radius + wall * 2, h = 2, $fn = facets);
|
|
|
- //}
|
|
|
+ if (connect == 0) {
|
|
|
+ translate ([0, 0, capsule_height]) {
|
|
|
+ cylinder(r = capsule_radius + wall * 2, h = 2, $fn = facets);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-module capsule_old (azimuth, elevation, micradius, cap_radius, cap_height, wall, twist, mounts) {
|
|
|
- rotate([0, 0, azimuth]) {
|
|
|
- rotate([0, (90 - elevation), 0]) {
|
|
|
- translate([0, 0, mic_radius - capsule_height]) {
|
|
|
- // the capsule holder
|
|
|
- difference () {
|
|
|
- union () {
|
|
|
- // main capsule holder
|
|
|
- cylinder(r = capsule_radius + wall, h = capsule_height, $fn = facets);
|
|
|
- // the attachment point to the other capsules
|
|
|
- for (rot = [-120 : 120 : mounts == 2 ? 0 : 120]) {
|
|
|
- // connect with cylindrical beams, very pretty
|
|
|
- rotate(a = rot + twist, v = [0, 0, 1]) {
|
|
|
- if (connect == 0) {
|
|
|
- translate([capsule_radius - wall, 0, capsule_height - wall]) {
|
|
|
- rotate(a = 145, v = [0, 1, 0]) {
|
|
|
- cylinder(d = wall * 4, h = 6, center = false, $fn = facets);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- // connect with flat square beams pointing out
|
|
|
- if (connect == 1) {
|
|
|
- translate([capsule_radius - wall, 3 * wall / 4, wall]) {
|
|
|
- rotate(a = 90, v = [0, 1, 0]) {
|
|
|
- difference() {
|
|
|
- cube([wall * 2, wall * 4, capsule_height * 4], center = true);
|
|
|
- translate([0, 0, wall * 8]) {
|
|
|
- cube([wall * 2, wall * 1.5, capsule_height], center = true);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- // connect with flat square beams pointing in
|
|
|
- if (connect == 2) {
|
|
|
- translate([capsule_radius + fudge, - wall * 1.29 , - capsule_height]) {
|
|
|
- difference() {
|
|
|
- cube([wall * 3, wall * 4, capsule_height * 2], center = false);
|
|
|
- translate([0, wall * 1.25, - wall * 2]) {
|
|
|
- cube([wall * 3, wall * 1.5, capsule_height], center = false);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- // add ridges for microphone mount
|
|
|
- rotate(a = 120 + twist, v = [0, 0, 1]) {
|
|
|
- translate([capsule_radius + fudge, - wall , 0]) {
|
|
|
- difference() {
|
|
|
- cube([wall * 3, wall * 2, capsule_height], center = false);
|
|
|
- rotate([0, 55, 0]) {
|
|
|
- cube([wall * 3, wall * 2, capsule_height], center = false);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+// microphone mount
|
|
|
+
|
|
|
+module mount (radius, length, wall, separation) {
|
|
|
+ translate([0, 0, -(separation + 1)]) {
|
|
|
+ difference() {
|
|
|
+ union() {
|
|
|
+ for (rot = [0 : 180 : 360]) {
|
|
|
+ rotate([0, 0, rot - 45]) {
|
|
|
+ translate([-(capsule_sep_max / 2), (ridge_width / 2) + fit, -mount_height]) {
|
|
|
+ cube([capsule_sep_max, ridge_width / 2, mount_height]);
|
|
|
}
|
|
|
}
|
|
|
- // make the hole for the capsule
|
|
|
- translate ([0, 0, -2]) {
|
|
|
- cylinder(r = capsule_radius + fudge, h = capsule_height + 2, $fn = facets);
|
|
|
- }
|
|
|
- // remove any extra connecting beam material from the face of the holder
|
|
|
- translate ([0, 0, capsule_height]) {
|
|
|
- cylinder(r = capsule_radius + wall * 2, h = 2, $fn = facets);
|
|
|
- }
|
|
|
+ }
|
|
|
+ translate([0, 0, -mount_height]) {
|
|
|
+ cylinder(r = mount_radius + wall, h = mount_height, $fn = facets);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ translate([0, 0, -mount_height]) {
|
|
|
+ cylinder(r = mount_radius, h = mount_height, $fn = facets); }
|
|
|
+ rotate([0, 0, -45]) {
|
|
|
+ translate([-(capsule_sep_max / 2), 0, -mount_height]) {
|
|
|
+ cube([capsule_sep_max, ridge_width / 2, mount_height]);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-// microphone mount
|
|
|
-
|
|
|
-module mount (radius, length, wall, separation) {
|
|
|
+module mount_old (radius, length, wall, separation) {
|
|
|
// mounting ring
|
|
|
translate([0, 0, -separation]) {
|
|
|
difference() {
|
|
|
@@ -254,7 +231,7 @@ module mount (radius, length, wall, separation) {
|
|
|
for (rot = [0 : 180 : 360]) {
|
|
|
rotate([0, 0, rot]) {
|
|
|
translate([- radius, radius, 3.5]) {
|
|
|
- rotate([55, 0, 45]) {
|
|
|
+ rotate([tetra, 0, 45]) {
|
|
|
cube([radius * 3, radius, radius * 3], center = true);
|
|
|
}
|
|
|
}
|
|
|
@@ -294,7 +271,7 @@ if (rendermic == 1) {
|
|
|
capsule(az3, el3, 60, 3);
|
|
|
capsule(az4, el4, 240, 2);
|
|
|
// the mount
|
|
|
- //mount(hold_radius, capsule_height, 1, mic_radius);
|
|
|
+ mount(hold_radius, capsule_height, 1, capsule_bottom);
|
|
|
}
|
|
|
|
|
|
part_sep = capsule_radius * 2 * 3;
|