Просмотр исходного кода

start work on shock mount for Octathingy

Fernando Pablo Lopez-Lezcano 10 лет назад
Родитель
Сommit
61d16c97d7
1 измененных файлов с 45 добавлено и 37 удалено
  1. 45 37
      Octathingy_mount_pcb.scad

+ 45 - 37
Octathingy_mount_pcb.scad

@@ -123,6 +123,14 @@ internal_ring_gap = 1.0;
 connector_w = 10.0;
 connector_w = 10.0;
 connector_d = 2.0;
 connector_d = 2.0;
 
 
+// wall thickness and height of shock mount rings
+ring_wall = 4 * wall;
+ring_height = 6;
+
+// gap between external ring and support arm
+ring_arm_gap = 20;
+
+
 // all eight printed circuit boards
 // all eight printed circuit boards
 
 
 module octa_pcb_clear(length, width, thick, slot_depth, front, back) {
 module octa_pcb_clear(length, width, thick, slot_depth, front, back) {
@@ -336,26 +344,26 @@ module octa_capsule_array_mount(angles) {
 
 
 // internal ring of shock mount
 // internal ring of shock mount
 
 
-module octa_shock_mount_internal_ring(height, radius, corner, gap, lip) {
-    slot_sep = radius * 2 / 2.5;
+module octa_shock_mount_internal_ring(height, xradius, yradius, corner, gap, lip) {
+    slot_sep = xradius * 2 / 2.5;
     slot_w = 5;
     slot_w = 5;
     slot_o = height / 3;
     slot_o = height / 3;
     difference() {
     difference() {
         union() {
         union() {
             // base ring
             // base ring
             difference() {
             difference() {
-                tetra_rounded_mount_box_relative(slot_o, radius + gap, corner, 3 * wall);
-                tetra_rounded_mount_box(slot_o, radius + gap, corner);
+                rounded_block_relative(slot_o, xradius + gap, yradius + gap, corner, 3 * wall);
+                rounded_block(slot_o, xradius + gap, yradius + gap, corner);
             }
             }
             // upper ring with slots for rubber bands
             // upper ring with slots for rubber bands
             difference() {
             difference() {
-                tetra_rounded_mount_box_relative(height, radius + gap + 2 * wall, corner, 2 * wall);
-                tetra_rounded_mount_box_relative(height, radius + gap + wall, corner, 1 * wall);
+                rounded_block_relative(height, xradius + gap + 2 * wall, yradius + gap + 2 * wall, corner, 2 * wall);
+                rounded_block_relative(height, xradius + gap + wall, yradius + gap + wall, corner, 1 * wall);
                 for (rot = [0, 90, 180, 270]) rotate([0, 0, rot]) {
                 for (rot = [0, 90, 180, 270]) rotate([0, 0, rot]) {
                     // slots for rubber bands
                     // slots for rubber bands
                     minkr = 1.25;
                     minkr = 1.25;
                     for (m = [0, 1]) mirror([0, m, 0]) {
                     for (m = [0, 1]) mirror([0, m, 0]) {
-                        translate([-slot_w / 2 + slot_sep, radius + gap, slot_o + minkr]) {
+                        translate([-slot_w / 2 + slot_sep, ((rot % 180) ? xradius : yradius) + gap, slot_o + minkr]) {
                             minkowski() {
                             minkowski() {
                                 cube([slot_w - minkr, 10, slot_o - minkr]);
                                 cube([slot_w - minkr, 10, slot_o - minkr]);
                                 rotate([90, 0, 0]) cylinder(r = minkr, h = 1, $fn = facets);
                                 rotate([90, 0, 0]) cylinder(r = minkr, h = 1, $fn = facets);
@@ -369,11 +377,11 @@ module octa_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, -(connector_w/2 + wall), 0]) {
+                translate([((rot % 180) ? yradius : xradius) + gap + 3 * wall, -(connector_w/2 + wall), 0]) {
                     cube([connector_d + wall, connector_w + 2 * wall, height]);
                     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, -(connector_w/2 + wall), 0]) {
+                    translate([((rot % 180) ? yradius : xradius) + gap + 4 * wall, -(connector_w/2 + wall), 0]) {
                         cylinder(r = wall * 2, h = height, $fn = 3);
                         cylinder(r = wall * 2, h = height, $fn = 3);
                     }
                     }
                 }
                 }
@@ -381,7 +389,7 @@ module octa_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, -connector_w/2, 0]) {
+            translate([((rot % 180) ? yradius : xradius) + gap + 3 * wall, -connector_w/2, 0]) {
                 cube([connector_d, connector_w, height - 2.75 * wall]);
                 cube([connector_d, connector_w, height - 2.75 * wall]);
                 translate([connector_d / 2, 0, height - 3 * wall]) {
                 translate([connector_d / 2, 0, height - 3 * wall]) {
                     rotate([-90, 0, 0]) {
                     rotate([-90, 0, 0]) {
@@ -395,7 +403,7 @@ module octa_shock_mount_internal_ring(height, radius, corner, gap, lip) {
         // lip to support microphone on lower ring only
         // lip to support microphone on lower ring only
         if (lip == 1) {
         if (lip == 1) {
             lip_w = 10;
             lip_w = 10;
-            translate([radius + gap + 2.5 * wall, -lip_w/2, height]) {
+            translate([((rot % 180) ? yradius : xradius) + gap + 2.5 * wall, -lip_w/2, height]) {
                 rotate([90, 90, 180]) {
                 rotate([90, 90, 180]) {
                     linear_extrude(height = lip_w) {
                     linear_extrude(height = lip_w) {
                         polygon([[0, 0], [0, 4], [1, 4], [height * 2/3, 0]]);
                         polygon([[0, 0], [0, 4], [1, 4], [height * 2/3, 0]]);
@@ -422,44 +430,44 @@ module tetra_shock_mount_ring(outside_radius, inside_radius, thickness) {
 
 
 // external ring of shock mount (connects to stand mount)
 // external ring of shock mount (connects to stand mount)
 
 
-module tetra_shock_mount_external_ring(height, radius, corner, gap, lip) {
+module octa_shock_mount_external_ring(height, xradius, yradius, corner, gap, lip) {
     difference() {
     difference() {
-        tetra_rounded_mount_box_relative(6, radius, mount_corner, gap);
-        tetra_rounded_mount_box_relative(6, radius, mount_corner, gap - 4 * wall);
+        rounded_block_relative(ring_height, xradius, yradius, mount_corner, gap);
+        rounded_block_relative(ring_height, xradius, yradius, mount_corner, gap - ring_wall);
     }
     }
     for (rot = [0, 90, 180, 270]) {
     for (rot = [0, 90, 180, 270]) {
         rotate([0, 0, rot]) {
         rotate([0, 0, rot]) {
-            translate([radius + gap + 4 * wall, -7.5, 0]) {
-                cube([4, 15, 6]);
+            translate([((rot % 180) ? yradius : xradius) + gap + ring_wall, -7.5, 0]) {
+                cube([4, 15, ring_height]);
             }
             }
-            translate([radius + gap, -2, 0]) {
-                cube([7, 4, 6]);
+            translate([((rot % 180) ? yradius : xradius) + gap, -2, 0]) {
+                cube([7, 4, ring_height]);
             }
             }
         }
         }
     }
     }
     // connection to stand mount
     // connection to stand mount
-    translate([0, 18, 0]) {
-        intersection() {
+    ring_arm_gap = 20;
+    intersection() {
+        translate([ring_arm_gap, 0, 0]) {
             difference() {
             difference() {
-                tetra_rounded_mount_box_relative(6, radius, mount_corner - 5, gap);
-                tetra_rounded_mount_box_relative(6, radius, mount_corner - 5, gap - 4 * wall);
-            }
-            translate([-(radius + 2 * mount_corner), 0, 0]) {
-                cube([2 * (radius + 2 * mount_corner), radius + 2 * mount_corner, 6]);
+                rounded_block_relative(ring_height, xradius, yradius, mount_corner, gap);
+                rounded_block_relative(ring_height, xradius, yradius, mount_corner, gap - ring_wall);
             }
             }
         }
         }
+        translate([ring_arm_gap / 2, -(yradius + 2 * mount_corner), 0]) {
+            cube([(xradius + 2 * mount_corner) + ring_arm_gap, 2 * (yradius + 2 * mount_corner), ring_height]);
+        }
     }
     }
     // connection to hub
     // connection to hub
-    translate([-2, radius + 2 * mount_corner + 12, 0]) {
-        cube([4, 10, 6]);
+    translate([xradius + mount_corner + ring_wall + ring_arm_gap, -2, 0]) {
+        cube([8, 4, ring_height]);
     }
     }
     // rotating mount
     // rotating mount
     o_rad = 8;
     o_rad = 8;
     i_rad = 3;
     i_rad = 3;
-    thk = 4;
-    rotate([0, 90, 0]) {
-        translate([-o_rad, 66, -2]) {
-            tetra_shock_mount_ring(o_rad, i_rad, thk);
+    rotate([0, 90, -90]) {
+        translate([-o_rad, xradius + mount_corner + ring_wall + ring_arm_gap + o_rad + ring_wall / 2 + 4, -2]) {
+            tetra_shock_mount_ring(o_rad, i_rad, ring_wall);
         }
         }
     }
     }
 }
 }
@@ -621,18 +629,18 @@ module render_tetra_shock_mount_stand(z_offset) {
 // shock mount: external ring
 // shock mount: external ring
 //
 //
 
 
-module render_tetra_shock_mount_external_ring(z_offset) {
+module render_octa_shock_mount_external_ring(z_offset) {
     translate([0, 0, z_offset]) {
     translate([0, 0, z_offset]) {
-        tetra_shock_mount_external_ring(ring_height, box_radius + wall, mount_corner, main_radius_inc, 0);
+        octa_shock_mount_external_ring(ring_height, box_radius + wall, box_radius * 2 + wall, mount_corner, main_radius_inc, 0);
     }
     }
 }
 }
 
 
 // shock mount: bottom internal ring
 // shock mount: bottom internal ring
 //
 //
 
 
-module render_tetra_shock_mount_internal_ring_bot(z_offset) {
+module render_octa_shock_mount_internal_ring_bot(z_offset) {
     translate([0, 0, z_offset]) {
     translate([0, 0, z_offset]) {
-        tetra_shock_mount_internal_ring(ring_height, box_radius + wall, mount_corner, internal_ring_gap, 1);
+        octa_shock_mount_internal_ring(ring_height, box_radius + wall, box_radius * 2 + wall, mount_corner, internal_ring_gap, 1);
     }
     }
 }
 }
 
 
@@ -650,9 +658,9 @@ module render_tetra_shock_mount_ring_connectors(offset) {
 // shock mount: top internal ring
 // shock mount: top internal ring
 //
 //
 
 
-module render_tetra_shock_mount_internal_ring_top(z_offset) {
+module render_octa_shock_mount_internal_ring_top(z_offset) {
     translate([0, 0, z_offset]) {
     translate([0, 0, z_offset]) {
-        tetra_shock_mount_internal_ring(ring_height, box_radius + wall, mount_corner, internal_ring_gap, 0);
+        octa_shock_mount_internal_ring(ring_height, box_radius + wall, box_radius * 2 + wall, mount_corner, internal_ring_gap, 0);
     }
     }
 }
 }