Parcourir la source

change length and width of pcb to match new design, parametrize several hard coded numbers, add space in front of and behind the printed circuit board, make main body more rounded, remove old version of main body, add dot in the microphone stalk marking the back of the microphone, add CCRMA logo to microphone body

Fernando Pablo Lopez-Lezcano il y a 10 ans
Parent
commit
6e48003c29
4 fichiers modifiés avec 145 ajouts et 144 suppressions
  1. 28 0
      CCRMA_logo.scad
  2. 5 3
      TinySpHEAR_EM182.scad
  3. 5 3
      TinySpHEAR_EM200.scad
  4. 107 138
      TinySpHEAR_mount_pcb.scad

Fichier diff supprimé car celui-ci est trop grand
+ 28 - 0
CCRMA_logo.scad


+ 5 - 3
TinySpHEAR_EM182.scad

@@ -42,15 +42,17 @@ mic_radius = 9.6;
 
 *render_tetra_capsule_flare(0);
 
-*render_tetra_pcb_mount(0);
+*render_tetra_pcb_mount(0, 0);
 
 *render_tetra_cable_flare(0);
 
 // the whole body
-*render_tetra_body(0, 5);
+*render_tetra_body(0, 10, 0);
 
 // the whole microphone
-render_tetra_microphone(0, 5);
+// or use render_tetra_microphone_cutout(0, 0) for a "transparent" view
+//
+render_tetra_microphone(0, 0, 0);
 
 //// microphone shock mount
 

+ 5 - 3
TinySpHEAR_EM200.scad

@@ -50,15 +50,17 @@ mount_top_eccentricity = 1.6;
 
 *render_tetra_capsule_flare(0);
 
-*render_tetra_pcb_mount(0);
+*render_tetra_pcb_mount(0, 0);
 
 *render_tetra_cable_flare(0);
 
 // the whole body
-*render_tetra_body(0, 5);
+*render_tetra_body(0, 10, 0);
 
 // the whole microphone
-render_tetra_microphone(0, 5);
+// or use render_tetra_microphone_cutout(0, 0) for a "transparent" view
+//
+render_tetra_microphone(0, 0, 0);
 
 //// microphone shock mount
 

+ 107 - 138
TinySpHEAR_mount_pcb.scad

@@ -25,25 +25,31 @@
 // http://creativecommons.org/licenses/by-nc-sa/4.0/
 
 include <TinySpHEAR_common.scad>;
+include <CCRMA_logo.scad>;
 
 ////
 //// default model parameters
 ////
 
 // size of Zapnspark printed circuit board
-pcb_length = 85.090;
+pcb_length = 81.915;
 // measured = 16.26 (fit = 0.25)
-pcb_width = 16.51;
+pcb_width = 19.050;
 // measured = 1.33 (fit = 0.28)
 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
 // preamplifier, same at the top of the pcb to solder the wires
 // to the capsules
 pcb_low_exp = 12.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
 cable_diam = 9.5;
 
@@ -51,7 +57,7 @@ cable_diam = 9.5;
 mount_lip = 6.0;
 
 // main body corner radius
-mount_corner = 10.0;
+mount_corner = 15.0;
 
 // capsule array mount, height of flare and stalk
 flare_height = 50;
@@ -71,9 +77,8 @@ lip_fit = 0.20 / 2;
 wall = 1.0;
 
 // 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
 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
 //
 
-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;
 
+// connector that joins the two internal rings
+connector_w = 10.0;
+connector_d = 2.0;
+
 // the printed circuit board
 
 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) {
     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) {
-    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);
 }
 
@@ -150,14 +162,9 @@ module tetra_mount_body(height, radius, corner, lower_lip, upper_lip, clear) {
             // trim square angles
             cylinder(r = pcb_front, h = height, $fn = facets);
             // remove slots from inside body
-            slot_len = 15;
+            slot_len = 30;
             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
             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
     if (clear == 1) {
         // electrolytic capacitors
@@ -195,83 +189,25 @@ module tetra_mount_body(height, radius, corner, lower_lip, upper_lip, clear) {
         for (rot = [0, 180, 270]) {
             rotate([0, 0, rot]) {
                 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]) {
             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_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]);
+                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
 
-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
     difference() {
         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 - 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_w = 5;
     slot_o = height / 3;
-    // connecting bar dimensions
-    bar_w = 10;
-    bar_d = 2;
     difference() {
         union() {
             // 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
             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]) {
-                    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);
                     }
                 }
@@ -394,11 +340,11 @@ module tetra_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, -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]) {
-                        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) {
     difference() {
         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) {
     difference() {
         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) {
     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]);
 }
 
+// mount to standard microphone clip stand mount
+
 module tetra_shock_mount_stand(height, wall, stand_wall) {
     // stand mount
     translate([0, 0, 0]) {
@@ -542,8 +495,9 @@ module tetra_shock_mount_stand(height, wall, stand_wall) {
 
 module render_tetra_capsule_flare(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]);
         }
     }
@@ -553,9 +507,20 @@ module render_tetra_capsule_flare(z_offset) {
 //
 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]) {
-        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) {
     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
 //
 
-module render_tetra_body(z_offset, spread) {
+module render_tetra_body(z_offset, spread, showint) {
     rotate([0, 180, 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
@@ -584,11 +550,26 @@ module render_tetra_body(z_offset, spread) {
 
 module render_tetra_microphone(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 +
-            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) {
@@ -602,7 +583,7 @@ module render_tetra_shock_mount_stand(z_offset) {
 
 module render_tetra_shock_mount_external_ring(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) {
     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) {
     for (o = [0, 1, 2, 3]) {
         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) {
     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]) {
                     rotate([0, 90, 0]) {
                         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
-    translate([0, 0, z_offset]) {
+    translate([0, 0, z_offset - ring_height / 4]) {
         render_tetra_shock_mount_external_ring(0);
     }
     // 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]) {
             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);
-        }
-    }
-}
-

Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff