ソースを参照

new version of body with just one slot at the bottom to make space for shielding the printed circuit boards; more work on the shock mount for the microphone assembly

Fernando Pablo Lopez-Lezcano 10 年 前
親
コミット
519d7fd4f8
1 ファイル変更、152 行追加、47 行削除
  1. 152 47
      TinySpHEAR_mount_pcb.scad

+ 152 - 47
TinySpHEAR_mount_pcb.scad

@@ -60,9 +60,9 @@ pcb_fit = 0.25 / 2;
 // add to thickness of pcb
 pcb_tfit = 0.3;
 
-// lip fit for flares (fit = 0.25)
-// tried with 0.30 and seems to be fine
-lip_fit = 0.30 / 2;
+// lip fit for flares
+// 0.20 seems to be fine (0.3 was too lose)
+lip_fit = 0.20 / 2;
 
 // wall thickness
 wall = 1.0;
@@ -157,7 +157,73 @@ module tetra_mount_body(height, radius, corner, lower_lip, upper_lip, clear) {
             translate([0, 0, 0]) {
                 difference() {
                     tetra_mount_box(lower_lip, radius, corner);
-                    tetra_mount_box(lower_lip, radius, corner, -(wall + lip_fit));
+                    tetra_mount_box_relative(lower_lip, radius, corner, -(wall + lip_fit));
+                }
+            }
+        }
+    }
+    // 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;
+        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));
                 }
             }
         }
@@ -207,7 +273,8 @@ module tetra_mount_flare(height, lip, transition, bot_radius, bot_corner, top_ra
         tetra_mount_box(height, bot_radius, bot_corner);
         tetra_mount_box_relative(height, bot_radius, bot_corner, -(2 * wall));
         // flange to mount on body
-        tetra_mount_box_relative(lip + 1.0, bot_radius, bot_corner, - wall);
+        // temporarily add 0.05 for best fit on already printed body (FIXME)
+        tetra_mount_box_relative(lip + 1.0, bot_radius, bot_corner, - (wall + 0.05));
     }
     // flare to round section
     translate([0, 0, height]) {
@@ -258,48 +325,67 @@ module tetra_capsule_array_mount(angles) {
 
 // internal ring of shock mount
 
-module tetra_shock_mount_body_ring(height, radius, corner, rinc, lip) {
+module tetra_shock_mount_body_ring(height, radius, corner, gap, lip) {
     slot_sep = radius * 2 / 2.7;
     slot_w = 6;
     slot_o = height / 3;
-    // base ring
-    *difference() {
-        tetra_mount_box_relative(slot_o, radius + rinc, corner, 3 * wall);
-        tetra_mount_box(slot_o, radius + rinc, corner);
-    }
-    // upper ring with slots for rubber bands
+    // connecting bar dimensions
+    bar_w = 10;
+    bar_d = 2;
     difference() {
-        tetra_mount_box_relative(height, radius + rinc, corner, 4 * wall);
-        tetra_mount_box_relative(height, radius + rinc, corner, 2 * wall);
-        for (rot = [0, 90, 180, 270]) {
-            rotate([0, 0, rot]) {
-                for (xo = [1, -1] * slot_sep) {
-                    translate([-slot_w / 2 + xo, radius + rinc, slot_o]) {
+        union() {
+            // base ring
+            difference() {
+                tetra_mount_box_relative(slot_o, radius + gap, corner, 3 * wall);
+                tetra_mount_box(slot_o, radius + gap, corner);
+            }
+            // upper ring with slots for rubber bands
+            difference() {
+                tetra_mount_box_relative(height, radius + gap + 2 * wall, corner, 2 * wall);
+                tetra_mount_box_relative(height, radius + gap + wall, corner, 1 * wall);
+                for (rot = [0, 90, 180, 270]) {
+                    rotate([0, 0, rot]) {
                         // slots for rubber bands
-                        cube([slot_w, 10, slot_o]);
-                        translate([slot_w / 3, 0, 0]) {
-                            cube([slot_w / 3, 10, 10]);
+                        for (m = [0, 1]) mirror([0, m, 0]) {
+                            translate([-slot_w / 2 + slot_sep, radius + gap, slot_o]) {
+                                cube([slot_w, 10, slot_o]);
+                                translate([slot_w / 3, 0, 0]) {
+                                    cube([slot_w /3, 10, 10]);
+                                }
+                            }
                         }
                     }
                 }
             }
+            // 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]);
+                    }
+               }
+            }
         }
-    }    
-    for (rot = [0, 90, 180, 270]) {
-        rotate([0, 0, rot]) {
-            // slots for connecting the upper and lower rings
-            translate([radius + rinc + 2 * wall, -(slot_sep + slot_w/3)/2, 0]) {
-                difference() {
-                    cube([5, slot_sep + slot_w/3, height]);
-                    translate([0, wall, 0]) {
-                        cube([4, slot_sep + slot_w/3 - 2 * wall, 4]);
+        // 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]) {
+                        rotate([-90, 0, 0]) {
+                            cylinder(r = bar_d / 2, h = bar_w, $fn = facets);
+                        }
                     }
                 }
             }
+        }
+    }
+    for (rot = [0, 90, 180, 270]) {
+        rotate([0, 0, rot]) {
             // lip to support microphone on lower ring only
             if (lip == 1) {
                 lip_w = 10;
-                translate([radius + rinc + 2 * wall, -lip_w/2, height]) {
+                translate([radius + gap + 2.5 * wall, -lip_w/2, height]) {
                     rotate([90, 90, 180]) {
                         linear_extrude(height = lip_w) {
                             polygon([[0, 0], [0, 4], [1, 4], [height * 2/3, 0]]);
@@ -311,34 +397,50 @@ module tetra_shock_mount_body_ring(height, radius, corner, rinc, lip) {
     }    
 }
 
-module tetra_shock_mount_main_ring(height, radius, corner, rinc, lip) {
+module tetra_shock_mount_main_ring(height, radius, corner, gap, lip) {
     difference() {
-        tetra_mount_box_relative(6, box_radius, mount_corner, rinc);
-        tetra_mount_box_relative(6, box_radius, mount_corner, rinc - 4 * wall);
+        tetra_mount_box_relative(6, radius, mount_corner, gap);
+        tetra_mount_box_relative(6, radius, mount_corner, gap - 4 * wall);
     }
     for (rot = [0, 90, 180, 270]) {
         rotate([0, 0, rot]) {
-            translate([box_radius + rinc + 4 * wall, -7.5, 0]) {
+            translate([radius + gap + 4 * wall, -7.5, 0]) {
                 cube([4, 15, 6]);
             }
-            translate([box_radius + rinc, -2, 0]) {
+            translate([radius + gap, -2, 0]) {
                 cube([7, 4, 6]);
             }
         }
     }
+    // connection to stand mount
+    for (m = [0, 1]) mirror([m, 0, 0]) {
+        rotate([0, 0, 20]) {
+            translate([25, radius * 1.36, 0]) cube([4, 50, 6]);
+        }
+    }
+}
+
+
+module tetra_shock_mount_connector(length, width, thickness, fit) {
+        cube([length, width - 2 * fit, thickness - 2 * fit]);
 }
 
+
+*tetra_shock_mount_connector(ring_sep, 9, 3.3, 0.1);
+*translate([0, 15, 0])
+    tetra_shock_mount_connector(ring_sep, 9, 3.3, 0.1);
+
 // main body of microphone mount
 //
-*translate([0, 0, -(pcb_length - pcb_low_exp - pcb_hi_exp + 10)]) {
-    tetra_mount_body(pcb_length - pcb_low_exp - pcb_hi_exp, box_radius + wall, mount_corner, mount_lip, mount_lip, 0);
-}
+//translate([0, 0, -(pcb_length - pcb_low_exp - pcb_hi_exp + 10)]) {
+    *tetra_mount_body_new(pcb_length - pcb_low_exp - pcb_hi_exp, box_radius + wall, mount_corner, mount_lip, mount_lip, 0);
+//}
 
 // flare to microphone stalk
 //
 
 //translate([0, 0, pcb_length - pcb_low_exp - pcb_hi_exp + 10]) {
-*translate([0, 0, 0]) {
+translate([0, 0, 0]) {
     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]) {
@@ -350,7 +452,7 @@ module tetra_shock_mount_main_ring(height, radius, corner, rinc, lip) {
 //
 
 //translate([0, 0, -(10 + pcb_length - pcb_low_exp - pcb_hi_exp + 10)]) {
-translate([0, 0, -14]) {
+*translate([0, 0, -5]) {
     rotate([0, 180, 0]) {
         tetra_mount_flare(10 + pcb_low_exp, mount_lip, 20, box_radius + wall, mount_corner, cable_diam / 2 + wall, 10);
     }
@@ -364,19 +466,22 @@ ring_height = 6;
 band_angle = 40;
 main_radius_inc = (ring_sep / 2) / tan(band_angle);
 
-translate([0, 0, -3]) {
+body_ring_gap = 0.5;
+
+translate([0, 0, 0]) {
     //rotate([0, 180, 0]) {
-        tetra_shock_mount_body_ring(10, box_radius, mount_corner, 0.5, 0);
-        rotate([0, 180, 0]) {
+        *tetra_shock_mount_body_ring(10, box_radius + wall, mount_corner, body_ring_gap, 0);
+        *rotate([0, 180, 0]) {
             translate([0, 0, ring_sep]) {
-                tetra_shock_mount_body_ring(10, box_radius, mount_corner, 0.5, 1);
+                tetra_shock_mount_body_ring(10, box_radius + wall, mount_corner, body_ring_gap, 1);
             }
         }
     //}
 }
 
-translate([0, 0, - ring_sep / 2 - 5]) {
-        tetra_shock_mount_main_ring(10, box_radius, mount_corner, main_radius_inc, 0);
+//translate([0, 0, - ring_sep / 2 - 5]) {
+*translate([0, 0, 0]) {
+        tetra_shock_mount_main_ring(10, box_radius + wall, mount_corner, main_radius_inc, 0);
 }
 
 // first try at a ccrma logo