Selaa lähdekoodia

add new capsule holder connection legs, horizontal with slanted top and dual fingers with support, interlocks much better than the previous version but only works for small microphone array radius (no error checking at this point), this is now the default; add bottom flare to microphone body that can house a 12 pin connector, includes a side collar that locks the connector in place; add click locks for snapping the top and bottom flares to the body of the microphone; modify the capsule array mount to include four holes for the individual capsule cables so that there is no connection to the resonant cavity below; change defaults for the mount so that the bottom two capsules snap more securely into the mount

Fernando Pablo Lopez-Lezcano 9 vuotta sitten
vanhempi
sitoutus
8560803359
4 muutettua tiedostoa jossa 361 lisäystä ja 50 poistoa
  1. 35 5
      SpHEAR_common.scad
  2. 17 6
      TinySpHEAR_EM182.scad
  3. 12 11
      TinySpHEAR_EM200.scad
  4. 297 28
      TinySpHEAR_mount_pcb.scad

+ 35 - 5
SpHEAR_common.scad

@@ -69,6 +69,7 @@ mount_height = 40;
 //
 // diameter of existing shielded wires (x 4)
 mic_wire_diam = 1.5;
+mic_wire_fit = 0.8;
 mic_wire_hole_radius = 3.0;
 mic_wire_hole_offset = 5;
 
@@ -89,8 +90,9 @@ mic_mount_height = 35.0 + mic_wire_hole_offset + mic_wire_hole_radius + 2 * mic_
 
 // what type of connection to use between capsule holders:
 // 0 -> original cylindrical angled legs
-// 1 -> interlocking horizontal legs
-// 2 -> interlocking vertical legs
+// 1 -> interlocking horizontal legs with triangular top (only works with small radius)
+// 2 -> interlocking horizontal legs
+// 3 -> interlocking vertical legs
 connect = 1;
 
 // how many mount ridges to create
@@ -138,7 +140,7 @@ module capsule (mounts, twist, ridge, ridge_wfit = 0.0, ridge_hfit = 0.0, solid
             // the mounting legs
             for (angles = mounts) {
                 rotate([0, 0, angles[0] + twist]) {
-                    // connect with cylindrical beams, very pretty
+                    // connect with cylindrical beams, very pretty, not printable
                     if (connect == 0) {
                         leg_length = mic_radius * cos(angles[1]) - capsule_radius * sin(angles[1]);
                         translate([capsule_radius - wall, 0, capsule_height - wall]) {
@@ -147,8 +149,36 @@ module capsule (mounts, twist, ridge, ridge_wfit = 0.0, ridge_hfit = 0.0, solid
                             }
                         }
                     }
-                    // connect with horizontal legs
+                    // connect with horizontal slanted legs (only works for small microphone radius)
                     if (connect == 1) {
+                        leg_length = (mic_radius - capsule_height + leg_thick + fit) * tan(90 - angles[1]);
+                        slot_depth = leg_thick / cos(90 - 2 * angles[1]);
+                        slot_xtra_depth = (angles[1] < 45) ? (leg_thick * tan(90 - 2 * angles[1])) : 0.0;
+                        translate([0, 2 * (- leg_width / 3), 0]) {
+                            difference() {
+                                cube([leg_length, leg_width + leg_width / 3, capsule_height]);
+                                // cut center slot in connector
+                                translate([leg_length - slot_depth - slot_xtra_depth - 2 * fit, leg_width / 3 - (fit / 2), 0]) {
+                                    rotate([0, elev_angle / 2, 0])
+                                    cube([slot_depth + slot_xtra_depth + fit, leg_width / 3 + fit, capsule_height]);
+                                }
+                                // cut side slot
+                                translate([leg_length - slot_depth - slot_xtra_depth - 2 * fit, leg_width - fit / 2, 0]) {
+                                    // FIXME: we need to do the geometry for the angle below as I had to tweak it...
+                                    rotate([0, elev_angle / 2 + 1.5, 0])
+                                    cube([slot_depth + slot_xtra_depth + fit, leg_width / 3 + fit, capsule_height]);
+                                }
+                                // shave top of fingers
+                                translate([capsule_radius + wall, 0, capsule_height]) {
+                                    rotate([0, 90 - elev_angle, 0]) {
+                                        cube([leg_length, leg_width + leg_width / 3, capsule_height]);
+                                    }
+                                }
+                            }
+                        }
+                    }
+                    // connect with horizontal legs
+                    if (connect == 2) {
                         leg_length = (mic_radius - capsule_height + leg_thick) * tan(90 - angles[1]);
                         slot_depth = leg_thick / cos(90 - 2 * angles[1]);
                         slot_xtra_depth = (angles[1] < 45) ? (leg_thick * tan(90 - 2 * angles[1])) : 0.0;
@@ -163,7 +193,7 @@ module capsule (mounts, twist, ridge, ridge_wfit = 0.0, ridge_hfit = 0.0, solid
                         }
                     }
                     // connect with vertical legs
-                    if (connect == 2) {
+                    if (connect == 3) {
                         // fix this 0.2 == (2 * fudge?)
                         leg_length = (mic_radius * tan(90 - angles[1]) - capsule_radius) * tan(angles[1]) - 0.2;
                         slot_depth = leg_thick * cos (90 - (2 * angles[1]));

+ 17 - 6
TinySpHEAR_EM182.scad

@@ -28,18 +28,25 @@ include <SpHEAR_common.scad>;
 include <TinySpHEAR_common.scad>;
 include <TinySpHEAR_mount_pcb.scad>;
 
-// dimensions of the EM182 electret microphone capsule
-capsule_radius = 5;
+// dimensions of the EM182 electret microphone capsule (measured 10mm)
+capsule_radius = 10.0 / 2;
 capsule_height = 4.5;
-mic_radius = 9.6;
+mic_radius = 9.2;
 
 // lower the capsule assembly into the mount a bit more
-mic_to_mount_fit = 0.5;
+mic_to_mount_fit = 0.1;
+
+connect = 3;
+
+// thinner connection legs
+leg_width = 4;
 
 ////
 //// render the different assemblies
 ////
 
+facets = 128;
+
 //// microphone body and array
 
 *render_tetra_capsule_array(0);
@@ -48,6 +55,10 @@ mic_to_mount_fit = 0.5;
 
 *render_tetra_pcb_mount(0, 0);
 
+*render_tetra_connector_flare(0);
+
+*render_tetra_connector_lock(0);
+
 *render_tetra_cable_flare(0);
 
 // the whole body
@@ -56,7 +67,7 @@ mic_to_mount_fit = 0.5;
 // the whole microphone
 // or use render_tetra_microphone_cutout(0, 0) for a "transparent" view
 //
-*render_tetra_microphone_cutout(0, 0, 0);
+*render_tetra_microphone(0, 0, 0);
 
 //// microphone shock mount
 
@@ -77,5 +88,5 @@ mic_to_mount_fit = 0.5;
 
 *render_tetra_capsule_top(0);
 
-*render_tetra_capsule_bot(0);
+render_tetra_capsule_bot(0);
 

+ 12 - 11
TinySpHEAR_EM200.scad

@@ -28,29 +28,30 @@ include <SpHEAR_common.scad>;
 include <TinySpHEAR_common.scad>;
 include <TinySpHEAR_mount_pcb.scad>;
 
-// dimensions of the EM200 electret microphone capsule (measured)
-capsule_radius = 14.55 / 2;
+// dimensions of the EM200 electret microphone capsule (measured 14.59 max)
+capsule_radius = 14.6 / 2;
 capsule_height = 4.75;
 mic_radius = 11;
 
-// connector to mount
-ridge_width = 2.0;
-ridge_slot_width = 2.0;
-
-// height and eccentricity of top connector
-mount_top_height = 15.0;
-mount_top_eccentricity = 1.6;
+// adjust the depth of slots in mount
+mic_to_mount_fit = -0.4;
 
 ////
 //// render the different assemblies
 ////
 
+facets = 128;
+
 //// microphone body and array
 
-*render_tetra_capsule_array(0);
+*render_tetra_capsule_array(140);
 
 *render_tetra_capsule_flare(0);
 
+*render_tetra_connector_flare(0);
+
+*render_tetra_connector_lock(0);
+
 *render_tetra_pcb_mount(0, 0);
 
 *render_tetra_cable_flare(0);
@@ -61,7 +62,7 @@ mount_top_eccentricity = 1.6;
 // the whole microphone
 // or use render_tetra_microphone_cutout(0, 0) for a "transparent" view
 //
-*render_tetra_microphone(0, 0, 0);
+*render_tetra_microphone_cutout(0, 0, 0);
 
 //// microphone shock mount
 

+ 297 - 28
TinySpHEAR_mount_pcb.scad

@@ -84,7 +84,7 @@ cable_diam = 9.5;
 capsule_cable_diam = 1.7;
 
 // lip that mounts flares into main body box
-mount_lip = 6.0;
+mount_lip = 10.0;
 
 // lip fit for flares
 lip_fit = 0.05;
@@ -105,6 +105,28 @@ box_radius = pcb_front + (pcb_thickness + pcb_tfit) + pcb_back + 2 * wall;
 // calculated main body corner radius
 mount_corner = box_radius - pcb_width / 2 + pcb_slot_depth + 4.0;
 
+// dimensions of 12 pin male bottom connector
+//
+// Amphenol T 3635 002
+// 12 pin DIN male to cable, gold plated contacts
+//
+conn_diam_fit = 0.4;
+conn_max_diam = 18.00 + conn_diam_fit;
+conn_min_diam = 17.12 + conn_diam_fit;
+conn_bottom_h = 7.25;
+conn_sleeve = 7.00;
+conn_lock_diam = 15.1;
+conn_top_h = 12.40;
+
+// width and radius of "click" that locks upper and lower flanges to body
+click_width = 5.0;
+click_radius = 1.4;
+
+// dimensions of 5/32 screws for the collar that locks the connector in place
+collar_screw_head = 4.00;
+collar_screw_hole = 2.40;
+collar_screw_nut = 5.30 + 0.2;
+
 // shock mount parameters
 //
 
@@ -167,6 +189,30 @@ module tetra_mount_body(height, radius, corner, lower_lip, upper_lip, clear) {
                     rounded_block_relative(lower_lip, radius, radius, corner, -(wall + lip_fit));
                 }
             }
+            // slots for click tonges
+            // lower
+            for (m=[-1, 1]) rotate([0, 90, 0]) {
+                translate([-lower_lip * 3/4, (radius - wall/2)*m, -(click_width/2 + 0.25)]) {
+                    cylinder(r = click_radius, h = click_width + 0.5, $fn = facets);
+                }
+            }
+            // upper
+            for (m=[-1, 1]) rotate([0, 90, 0]) {
+                translate([- height + upper_lip * 3/4, (radius - wall/2)*m, -(click_width/2 + 0.25)]) {
+                    cylinder(r = click_radius, h = click_width + 0.5, $fn = facets);
+                }
+            }
+        }
+    }
+    // upper lip is too thin, reinforce the back of the click holes
+    for (r = [0, 180]) rotate([0, 90, r]) {
+        translate([- height + upper_lip * 3/4, (radius - wall), -(click_width/2 + 0.25)]) {
+            difference() {
+                cylinder(r = click_radius * 1.25, h = click_width + 0.5, $fn = facets);
+                translate([- click_radius * 1.25, - wall, 0]) {
+                    cube([click_radius * 3, click_radius * 3, click_width * 1.5]);
+                }
+            }
         }
     }
     // add parts for clearance check
@@ -210,6 +256,14 @@ module tetra_mount_flare(height, lip, transition, bot_radius, bot_corner, top_ra
         rounded_block_relative(height, bot_radius, bot_radius, bot_corner, -(2 * wall));
         // cut flange to mount on body
         rounded_block_relative(lip + 1.00, bot_radius, bot_radius, bot_corner, - (wall));
+        // cut slots for tonge
+        for (r = [0, 180]) rotate([0, 0, r]) {
+            for (m = [-1, 1]) {
+                translate([m * (click_width + 0.5) - 0.25, bot_radius - 1.5 * wall, 0]) {
+                    cube([0.5, 2 * wall, lip * 2/3]);
+                }
+            }
+        }
         // and make a smooth transition to avoid overhangs
         translate([0, 0, lip + 1.00]) {
             hull() {
@@ -220,6 +274,19 @@ module tetra_mount_flare(height, lip, transition, bot_radius, bot_corner, top_ra
             }
         }
     }
+    // add click to secure to lip
+    for (r = [0, 180]) rotate([0, 0, r]) {
+        translate([- click_width / 2, bot_radius - wall/2, 1/4 * lip]) {
+            rotate([90, 0, 90]) {
+                difference() {
+                    cylinder(r = click_radius - 0.2, h = click_width, $fn = facets);
+                    translate([0, -click_radius, 0]) {
+                        cube([click_radius, click_width, click_width]);
+                    }
+                }
+            }
+        }
+    }
     // flare to round section
     translate([0, 0, height]) {
         difference() {
@@ -259,42 +326,226 @@ module tetra_mount_flare(height, lip, transition, bot_radius, bot_corner, top_ra
     }
 }
 
+// flares from the body to 12 pin connector
+
+module tetra_mount_connector_flare(height, lip, transition, bot_radius, bot_corner, top_radius, stalk_height, dot) {
+    // bottom rounded box
+    difference() {
+        rounded_block(height, bot_radius, bot_radius, bot_corner);
+        rounded_block_relative(height, bot_radius, bot_radius, bot_corner, -(2 * wall));
+        // cut flange to mount on body
+        rounded_block_relative(lip + 1.00, bot_radius, bot_radius, bot_corner, - (wall));
+        // cut slots for tonge
+        for (r = [0, 180]) rotate([0, 0, r]) {
+            for (m = [-1, 1]) {
+                translate([m * (click_width + 0.5) - 0.25, bot_radius - 1.5 * wall, 0]) {
+                    cube([0.5, 2 * wall, lip * 2/3]);
+                }
+            }
+        }
+        // and make a smooth transition to avoid overhangs
+        translate([0, 0, lip + 1.00]) {
+            hull() {
+                rounded_block_relative(thin_mint, bot_radius, bot_radius, bot_corner, - wall);
+                translate([0, 0, 1.0]) {
+                    rounded_block_relative(thin_mint, bot_radius, bot_radius, bot_corner, - 2 * wall);
+                }
+            }
+        }
+    }
+    // add click to secure to lip
+    for (r = [0, 180]) rotate([0, 0, r]) {
+        translate([- click_width / 2, bot_radius - wall/2, 1/4 * lip]) {
+            rotate([90, 0, 90]) {
+                difference() {
+                    cylinder(r = click_radius - 0.2, h = click_width, $fn = facets);
+                    translate([0, -click_radius, 0]) {
+                        cube([click_radius, click_width, click_width]);
+                    }
+                }
+            }
+        }
+    }
+    // flare to round section
+    translate([0, 0, height]) {
+        difference() {
+            hull() {
+                rounded_block(thin_mint, bot_radius, bot_radius, bot_corner);
+                translate([0, 0, transition]) {
+                    cylinder(r = top_radius, h = thin_mint, $fn = facets);
+                }
+            }
+            hull() {
+                rounded_block_relative(thin_mint, bot_radius, bot_radius, bot_corner, - wall);
+                translate([0, 0, transition]) {
+                    cylinder(r = top_radius - wall, h = thin_mint, $fn = facets);
+                }
+            }
+        }
+    }
+    // connector holder
+    translate([0, 0, height + transition]) {
+        difference() {
+            cylinder(r = top_radius, h = conn_sleeve + conn_top_h / 2, $fn = facets);
+            cylinder(r = top_radius - wall, h = conn_sleeve + conn_top_h / 2, $fn = facets);
+            // holes for bolts for securing connector
+            rotate([0, 0, 90]) for (m = [0, 1]) {
+                mirror([m, 0, 0]) scale([2/3, 1, 1]) translate([top_radius / 2, top_radius, conn_top_h / 2 + conn_sleeve / 2]) {
+                    rotate([90, 0, 0]) {
+                        cylinder(r = conn_sleeve / 2 - thin_mint, h = top_radius * 2, $fn = facets);
+                    }
+                }
+            }
+        }
+    }
+    // connector bottom transition
+    translate([0, 0, height + transition + conn_sleeve + conn_top_h / 2 - thin_mint]) {
+        radius_diff = (conn_max_diam - conn_min_diam) / 2;
+        difference() {
+            hull() {
+                cylinder(r = top_radius, h = thin_mint, $fn = facets);
+                translate([0, 0, conn_bottom_h]) {
+                    cylinder(r = top_radius - radius_diff, h = thin_mint, $fn = facets);
+                }
+            }
+            hull() {
+                cylinder(r = top_radius - wall, h = thin_mint, $fn = facets);
+                translate([0, 0, conn_bottom_h]) {
+                    cylinder(r = top_radius - radius_diff - wall, h = thin_mint, $fn = facets);
+                }
+            }
+        }
+    }
+}
+
+// connector lock collar
+
+module tetra_mount_connector_lock(height, radius, side) {
+    difference() {
+        union() {
+            difference() {
+                cylinder(r = radius + wall, h = height, $fn = facets);
+                cylinder(r = radius, h = height, $fn = facets);
+            }
+            difference() {
+                // bolts for securing connector
+                for (m = [0, 1]) {
+                    mirror([m, 0, 0]) scale([2/3, 1, 1]) translate([radius / 2, radius, height / 2]) {
+                        rotate([90, 0, 0]) {
+                            cylinder(r = (conn_sleeve - wall) / 2, h = radius * 2, $fn = facets);
+                        }
+                    }
+                }
+                // shave bolts to size of internal connector collar
+                intersection() {
+                    translate([-conn_lock_diam/2, -conn_lock_diam/2, 0]) {
+                        cube([conn_lock_diam, conn_lock_diam, height]);
+                    }
+                    cylinder(r = radius - wall, h = height, $fn = facets);
+                }
+                // and shave everything outside of the cylinder
+                difference() {
+                    cylinder(r = radius + 4 * wall, h = height, $fn = facets);
+                    cylinder(r = radius + wall, h = height, $fn = facets);
+                }
+            }
+            // screw holders
+            difference() {
+                for (m = [0, 1]) mirror([m, 0, 0]) {
+                    translate([radius, 0, 0]) {
+                        cube([wall + 0.5 + collar_screw_head + 1.00, 3 * wall, height]);
+                    }
+                    translate([radius, - 3 * wall, 0]) {
+                        cube([wall + 0.5 + collar_screw_head + 1.00, 3 * wall, height]);
+                    }
+                }
+                // through holes for screws
+                for (m = [0, 1]) mirror([m, 0, 0]) {
+                    translate([radius + wall + 0.5 + collar_screw_head / 2, 4 * wall, height / 2]) {
+                        rotate([90, 0, 0]) {
+                            cylinder(r = collar_screw_hole / 2, h = 8 * wall, $fn = facets);
+                        }
+                    }
+                }
+                // recessed nuts
+                translate([radius + wall + 0.5 + collar_screw_head / 2, - 2.333 * wall, height / 2]) {
+                    rotate([90, 30, 0]) {
+                        cylinder(r = collar_screw_nut / 2, h = wall, $fn = 6);
+                    }
+                }
+            }
+        }
+        // substract one half (or the other)...
+        cut_size = 2 * (radius + wall); // + 0.5 + collar_screw_head / 2 + 0.5);
+        // cut internal cylinder
+        translate([-cut_size / 2, 0, 0]) {
+            cube([cut_size, cut_size, height]);
+        }
+        // cut screw holder assymetrically
+        translate([radius + wall, wall, 0]) {
+            cube([0.5 + collar_screw_head + 1.00, 5 * wall, height]);
+        }
+        mirror([1, 0, 0]) translate([radius + wall, -wall, 0]) {
+            cube([0.5 + collar_screw_head + 1.00, 5 * wall, height]);
+        }
+    }
+}
+
 // top conical section that plugs into capsule array
 
+module tilted_cylinder(radius, height, offset) {
+    hull() {
+        cylinder(r = radius, h = thin_mint, $fn = facets);
+        translate([offset, 0, height]) {
+            cylinder(r = radius, h = thin_mint, $fn = facets);
+        }
+    }
+}
+
+module tilted_cube(width, depth, height, offset) {
+    hull() {
+        cube([width, depth, thin_mint]);
+        translate([offset, 0, height]) {
+            cube([width, depth, thin_mint]);
+        }
+    }
+}
+
 module tetra_capsule_array_mount(angles) {
     difference() {
         union() {
             rotate([0, 0, 45]) {
+                wire_offset = wall;
+                wire_diam = mic_wire_diam + mic_wire_fit;
+                sleeve_width = leg_thick + wire_offset + wire_diam * 2 + wall / 2;
+                sleeve_width_max = capsule_radius + wall;
+                sleeve_w = (sleeve_width > sleeve_width_max) ? sleeve_width : sleeve_width_max;
                 difference() {
                     hull() {
                         cylinder(r = mount_radius + wall, h = thin_mint, $fn = facets);
                         translate([0, 0, mount_top_height]) {
-                            rounded_block(thin_mint, capsule_radius + wall, mount_radius_capsule - wall/2, mount_radius*4/5);
+                            rounded_block(thin_mint, sleeve_w, mount_radius_capsule - wall/2, mount_radius*4/5);
                         }
                     }
-                    hull() {
-                        cylinder(r = mount_radius, h = thin_mint, $fn = facets);
-                        translate([0, 0, mount_top_height]) {
-                            rounded_block_relative(thin_mint, capsule_radius + wall, mount_radius_capsule - wall/2, mount_radius*4/5, -wall);
-                        }
+                    // cavity for printing without support
+                    scale([1.0, 1.0, 3.0]) {
+                        sphere(r = mount_radius, $fn = facets);
                     }
-                }
-                // internal divider wall with slot for capsule ridges
-                difference() {
-                    translate([-(leg_thick + wall*2)/2, -(mount_radius_capsule - wall/2), mount_top_height/2]) {
-                        difference() {
-                            cube([leg_thick + wall*2, (mount_radius_capsule - wall/2) * 2, mount_top_height/2]);
-                            // arch at bottom of dividing wall
-                            translate([0, mount_radius_capsule - wall/2, -wall]) {
-                                rotate([0, 90, 0]) {
-                                    cylinder(r = mount_radius_capsule - wall, h = leg_thick + wall*3, $fn = facets);
-                                }
-                            }
+                    // holes for cables
+                    // offset for outer hole
+                    hole_offset_l = mount_radius - wire_diam / 2;
+                    hole_offset_h = (sleeve_w - wall - wire_diam / 2) - hole_offset_l;
+                    for (m = [0, 1]) mirror([m, 0, 0]) {
+                        translate([hole_offset_l - wire_diam, 0, 0]) {
+                            tilted_cylinder(wire_diam / 2, mount_top_height, hole_offset_h);
+                        }
+                        translate([hole_offset_l, 0, 0]) {
+                            tilted_cylinder(wire_diam / 2, mount_top_height, hole_offset_h);
+                        }
+                        // shave the inside of the double tube
+                        translate([hole_offset_l - wire_diam, - wire_diam / 4, 0]) {
+                            tilted_cube(wire_diam, wire_diam/2, mount_top_height, hole_offset_h);
                         }
-                    }
-                    // shave the top of the wall
-                    translate([-(capsule_radius + wall), -(mount_radius_capsule - wall/2), mount_top_height - wall]) {
-                        cube([(capsule_radius + wall) * 2, (mount_radius_capsule - wall/2) * 2, 10]);
                     }
                 }
             }
@@ -304,12 +555,12 @@ module tetra_capsule_array_mount(angles) {
         translate([0, 0, mount_top_height + (mic_radius - capsule_height) + capsule_height * cos(elev_angle) - mic_to_mount_fit]) {
             rotate([0, (90 + elev_angle), angles[0]]) {
                 translate([0, 0, mic_radius - capsule_height]) {
-                    capsule([], 0, 1, 0.02, 1.5, 1);
+                    capsule([], 0, 1, 0.02, 0.02, 1);
                 }
             }
             rotate([0, (90 + elev_angle), angles[1]]) {
                 translate([0, 0, mic_radius - capsule_height]) {
-                    capsule([], 0, 1, 0.02, 1.5, 1);
+                    capsule([], 0, 1, 0.02, 0.02, 1);
                 }
             }
         }
@@ -354,7 +605,7 @@ module render_tetra_pcb_mount(z_offset, showint) {
     rotate([0, 0, -90]) {
         translate([0, -(box_radius - 0.5), tetra_pcb_mount_height / 2]) {
             rotate([90, 270, 0]) {
-                logo_scale = 1 / 2.2;
+                logo_scale = 1 / 2.4;
                 scale([logo_scale, logo_scale, 1.0]) {
                     ccrma_logo(1.65);
                 }
@@ -372,12 +623,30 @@ module render_tetra_cable_flare(z_offset, flip) {
     }
 }
 
+// microphone body: flare to 12 pin connector (slips into PCB holder body)
+//
+
+module render_tetra_connector_flare(z_offset, flip) {
+    translate([0, 0, z_offset]) {
+        tetra_mount_connector_flare(pcb_low_clear + pcb_low_exp, mount_lip, 20, box_radius + wall, mount_corner, conn_max_diam / 2 + wall, 10, 0);
+    }
+}
+
+// microphone body: 12 pin connector lock collar
+//
+
+module render_tetra_connector_lock(z_offset) {
+    translate([0, 0, z_offset]) {
+        tetra_mount_connector_lock(conn_sleeve + 2 * wall, (conn_max_diam / 2) + wall);
+    }
+}
+
 // microphone body: render all parts with a vertical separation
 //
 
 module render_tetra_body(z_offset, spread, showint) {
     rotate([0, 180, 0]) {
-        render_tetra_cable_flare(0);
+        render_tetra_connector_flare(0);
     }
     lippy = spread - mount_lip;
     render_tetra_pcb_mount(lippy, showint);
@@ -402,7 +671,7 @@ module render_tetra_microphone_cutout(z_offset, spread) {
     difference() {
         render_tetra_microphone(z_offset, spread);
         // a cube that blots out 1/4 of the microphone
-        rotate([0, 0, 45]) {
+        rotate([0, 0, 90]) {
             translate([0, 0, -50]) {
                 cube([50, 100, 650]);
             }