1
0
Эх сурвалжийг харах

complete redesign of the body of the Octathingy, all eight phantom power interfaces are now arranged radially instead of in two groups of four, this makes the body symmetrical and less ugly but it is still very bulky as before - this will also make it easier to incorporate a windscreen mount

Fernando Pablo Lopez-Lezcano 9 жил өмнө
parent
commit
a25bc7225d

+ 9 - 3
Octathingy_EM200.scad

@@ -42,27 +42,33 @@ mic_radius = 16.6;
 connect = 1;
 leg_thick = capsule_height * 0.45;
 
+facets = 128;
+
 ////
 //// render the different assemblies
 ////
 
 //// microphone body and array
 
-*render_octa_capsule_array(0);
+*render_octa_capsule_array(212.3);
 
-*render_octa_capsule_flare(0);
+*render_octa_capsule_flare(49.2);
 
 *render_octa_pcb_mount(0, 0);
 
 *render_octa_cable_flare(0);
 
+*rotate([0, 180, 0]) {
+    render_octa_connector_flare(0);
+}
+
 // the whole body
 *render_octa_body(0, 10, 0);
 
 // the whole microphone
 // or use render_octa_microphone_cutout(0, 0) for a "transparent" view
 //
-*render_octa_microphone_cutout(0, 0, 0);
+render_octa_microphone_cutout(0, 0, 0);
 
 //// microphone shock mount
 

+ 366 - 9
Octathingy_mount_pcb.scad

@@ -166,6 +166,18 @@ ring_arm_gap = 20;
 
 // all eight printed circuit boards
 
+module octa_pcb_clear_old(length, width, thick, slot_depth, front, back) {
+    for (ytrans = [-1, 1]) {
+        translate([0, ytrans * (front + back + thick), 0]) {
+            for (rot = [0, 90, 180, 270]) {
+                rotate([0, 0, rot]) {
+                    pcb_clear(pcb_length + pcb_fit, pcb_width + pcb_fit, pcb_thickness + pcb_tfit, slot_depth, front, back);
+                }
+            }
+        }
+    }
+}
+
 module octa_pcb_clear(length, width, thick, slot_depth, front, back) {
     for (ytrans = [-1, 1]) {
         translate([0, ytrans * (front + back + thick), 0]) {
@@ -178,9 +190,126 @@ module octa_pcb_clear(length, width, thick, slot_depth, front, back) {
     }
 }
 
-// the main body of the microphone mount
+// the main body that holds the phantom power interfaces
+
+module one_pcb(pcb_w, pcb_l, pcb_t, slot, clear, back) {
+    // printed circuit board
+    translate([-pcb_t/2, -pcb_w/2, 0]) {
+        cube([pcb_t, pcb_w, pcb_l]);
+    }
+    // space in front and behind
+    translate([0, -pcb_w/2+slot, 0]) {
+        cube([clear, pcb_w - (2 * slot), pcb_l]);
+    }
+    translate([-(back + pcb_t/2), -pcb_w/2+slot, 0]) {
+        cube([back, pcb_w - (2 * slot), pcb_l]);
+    }
+}
+
+module one_pcb_spar(pcb_w, pcb_l, pcb_t, slot, clear, back) {
+    translate([-(back + pcb_t/2 + wall), -pcb_w/2, 0]) {
+        cube([wall, pcb_w, pcb_l]);
+    }
+}
+
+module rounded_octagon(height, radius) {
+    intersection() {
+        cylinder(r = radius, h = height, $fn = 8);
+        cylinder(r = radius - wall, h = height, $fn = facets);
+    }
+}
+
+module rounded_octagon_wall(height, radius, wall) {
+    difference() {
+        rounded_octagon(height, radius);
+        rounded_octagon(height, radius - wall);
+    }
+}
+
+render_screw_holes = true;
+radial_pcb_offset = 19;
+
+module octa_mount_body(height, radius, lower_lip, upper_lip, clear) {
+    // rotate pcb's so they don't interfere with the screws
+    offset_angle = -12;
+    difference() {
+        union() {
+            difference() {
+                // main body
+                rounded_octagon(height, radius);
+                // remove pcb slots
+                for (r = [0:360/8:360]) rotate([0, 0, r + offset_angle]) {
+                    translate([0, radial_pcb_offset, 0]) {
+                        one_pcb(pcb_width, pcb_length, pcb_thickness, pcb_slot_depth, 6, 2);
+                    }
+                }
+                // remove inner tube
+                difference() {
+                    cylinder(r = radial_pcb_offset + pcb_width/2 - wall, h = pcb_length, $fn = facets);
+                    cylinder(r = radial_pcb_offset - pcb_width/2 + 2 * wall, h = pcb_length, $fn = 8);
+                }
+                // remove inner cylinder
+                rotate([0, 0, 22.5]) cylinder(r = radial_pcb_offset - pcb_width/2 - wall, h = pcb_length, $fn = 8);
+                // upper lip for flare to microphone
+                translate([0, 0, height - upper_lip]) {
+                    rounded_octagon_wall(upper_lip, radius, wall + lip_fit);
+                }
+                // lower lip for flare to cable or connector
+                translate([0, 0, 0]) {
+                    rounded_octagon_wall(upper_lip, radius, wall + lip_fit);
+                }
+                // remove upper portion of pcb slots
+                translate([0, 0, height * 2/3]) {
+                    rounded_octagon(height * 2/3, radius - 2.5 * wall);
+                }
+            }
+            if (render_screw_holes) {
+                // add backplates for upper lip screws
+                for (r = [45, 135, 225, 315]) {
+                    rotate([0, 0, r]) translate([-(radius - 3 * wall), -2, height * 2/3]) {
+                        cube([2, 4, height * 1/3]);
+                    }
+                }
+             }
+         }
+         if (render_screw_holes) {
+            // make eight holes in the the body for screws that hold both flares
+            // (number 0 size, 1/4" long = thread diameter: 1.6mm, head diameter: 2.75)
+            difference() {
+                for (z = [lower_lip/2, height - upper_lip/2]) {
+                    for (r = [45, 135, 225, 315]) {
+                        rotate([0, 0, r]) translate([-(radius + 2 * wall), 0, z]) {
+                            rotate([0, 90, 0]) {
+                                cylinder(r = 0.7, h = radius + wall, $fn = facets);
+                            }
+                        }
+                    }
+                }
+                cylinder(r = radius/2, h = height);
+            }
+        }
+    }
+    // add spars that connect internal hub to outer ring
+    for (r = [0:360/8:360]) rotate([0, 0, r + offset_angle]) {
+        translate([0, pcb_width, 0]) {
+            one_pcb_spar(pcb_width, height * 2/3, pcb_thickness, pcb_slot_depth, 7, 2);
+        }
+    }
+    // test for capacitor fit
+    // electrolytic capacitors
+    cap_diam = 10.2;
+    *for (r = [0:360/8:360]) {
+        rotate([0, 0, r + offset_angle]) {
+            translate([cap_diam/2, radial_pcb_offset, 0]) {
+                cylinder(r = (cap_diam/2), h = 20, $fn = facets);
+            }
+        }
+    }
+}
+
+// the main body of the microphone mount (old rectangular design)
 
-module octa_mount_body(height, width, depth, radius, lower_lip, upper_lip, clear) {
+module octa_mount_rect_body(height, width, depth, radius, lower_lip, upper_lip, clear) {
     // outer shell
     difference() {
         rounded_box(height, width, depth, radius, 2 * wall);
@@ -277,9 +406,108 @@ module octa_mount_body(height, width, depth, radius, lower_lip, upper_lip, clear
     }
 }
 
-// flares from the body to the microphone stalk and cable
+// flare from the body to the microphone stalk
 
-module octa_mount_flare(height, lip, transition, bot_xradius, bot_yradius, corner, top_radius, stalk_height, dot) {
+module octa_mount_flare(height, lip, transition, radius, top_radius, stalk_height, dot) {
+    // bottom box
+    difference() {
+        union() {
+            rounded_octagon_wall(height, radius, 2 * wall);
+            if (render_screw_holes) {
+                // small pedestals for the screws that attach the flare to the body
+                // (number 0 size, 1/4" long = thread diameter: 1.6mm, head diameter: 2.75)
+                for (r = [45, 135, 225, 315]) rotate([0, 0, r]) {
+                    translate([radius - wall - 1.75, 0, lip/2]) {
+                        rotate([0, 90, 0]) {
+                            cylinder(r = 1.5, h = 2 * wall, $fn = facets);
+                        }
+                    }
+                }
+            }
+        }
+        // flange to mount on body
+        rounded_octagon_wall(lip + 1.00, radius - wall, wall);
+        // and make a smooth transition to avoid overhangs
+        translate([0, 0, lip + 1.00]) {
+            hull() {
+                rounded_octagon_wall(thin_mint, radius - wall, wall);
+                translate([0, 0, 1.0]) {
+                    rounded_octagon_wall(thin_mint, radius - 2 * wall, wall);
+                }
+            }
+        }
+        if (render_screw_holes) {
+            // holes for screws that attach the flare to the body
+            // Number 0 Size, 1/4" Long = thread diameter: 1.6mm, head diameter: 2.75
+            for (r = [45, 135, 225, 315]) rotate([0, 0, r]) {
+                translate([radius/2, 0, lip/2]) {
+                    rotate([0, 90, 0]) {
+                        cylinder(r = (1.6 + 0.1)/2, h = radius, $fn = facets);
+                    }
+                }
+            }
+        }
+    }
+    // flare to round section
+    translate([0, 0, height]) {
+        difference() {
+            hull() {
+                rounded_octagon(thin_mint, radius);
+                translate([0, 0, transition]) {
+                    cylinder(r = top_radius, h = thin_mint, $fn = facets);
+                }
+            }
+            hull() {
+                rounded_octagon(thin_mint, radius - wall);
+                translate([0, 0, transition]) {
+                    cylinder(r = top_radius - wall, h = thin_mint, $fn = facets);
+                }
+            }
+        }
+    }
+    // cylindrical stalk
+    translate([0, 0, height + transition]) {
+        difference() {
+            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);
+                        }
+                    }
+                }
+            }
+        }
+        // close stalk and add holes for cables
+        translate([0, 0, stalk_height - top_radius - wall]) {
+            difference() {
+                cylinder(r = top_radius - wall, h = top_radius + wall, $fn = facets);
+                translate([0, 0, 0]) {
+                    sphere(r = top_radius - wall, $fn = facets);
+                }
+                wire_diam = mic_wire_diam + mic_wire_fit;
+                for (r = [0, 90, 180, 270]) rotate([0, 0, r]) {
+                    for (t = [0, 1]) {
+                        rotate([0, 0, 45 * t]) translate([top_radius - wire_diam - t * wire_diam * 2/3, 0, wall]) {
+                            cylinder(r = wire_diam / 2, h = top_radius * 2, $fn = facets);
+                        }
+                    }
+                }
+                translate([0, 0, wall]) cylinder(r = wire_diam, h = top_radius * 2, $fn = facets);
+            }
+        }
+    }
+}
+
+// flare from the body to the microphone stalk (old rectangular design)
+
+module octa_mount_rect_flare(height, lip, transition, bot_xradius, bot_yradius, corner, top_radius, stalk_height, dot) {
     // bottom rounded box
     difference() {
         union() {
@@ -476,7 +704,72 @@ module tetra_mount_connector_holder(height, radius, inside_radius, sleeve_height
     }
 }
 
-module octa_mount_flare_connector(height, lip, transition, xradius, yradius, corner, top_xradius, top_yradius) {
+// flare to dual cable connectors
+
+module octa_mount_flare_connector(height, lip, transition, radius, top_xradius, top_yradius) {
+    // hack to get it to render, fix problem in rounded_block when radius is equal to corner...
+    delta = 0.001;
+    // bottom rounded box
+    difference() {
+        union() {
+            rounded_octagon_wall(height, radius, 2 * wall);
+            if (render_screw_holes) {
+                // small pedestals for the screws that attach the flare to the body
+                // (number 0 size, 1/4" long = thread diameter: 1.6mm, head diameter: 2.75)
+                for (r = [45, 135, 225, 315]) rotate([0, 0, r]) {
+                    translate([radius - wall - 1.75, 0, lip/2]) {
+                        rotate([0, 90, 0]) {
+                            cylinder(r = 1.5, h = 2 * wall, $fn = facets);
+                        }
+                    }
+                }
+            }
+        }
+        // flange to mount on body
+        rounded_octagon_wall(lip + 1.00, radius - wall, wall);
+        // and make a smooth transition to avoid overhangs
+        translate([0, 0, lip + 1.00]) {
+            hull() {
+                rounded_octagon_wall(thin_mint, radius - wall, wall);
+                translate([0, 0, 1.0]) {
+                    rounded_octagon_wall(thin_mint, radius - 2 * wall, wall);
+                }
+            }
+        }
+        if (render_screw_holes) {
+            // holes for screws that attach the flare to the body
+            // Number 0 Size, 1/4" Long = thread diameter: 1.6mm, head diameter: 2.75
+            for (r = [45, 135, 225, 315]) rotate([0, 0, r]) {
+                translate([radius/2, 0, lip/2]) {
+                    rotate([0, 90, 0]) {
+                        cylinder(r = (1.6 + 0.1)/2, h = radius, $fn = facets);
+                    }
+                }
+            }
+        }
+    }
+    // flare to rounded section
+    translate([0, 0, height]) {
+        difference() {
+            hull() {
+                rounded_octagon(thin_mint, radius);
+                translate([0, 0, transition]) {
+                    rounded_block(thin_mint, top_xradius, top_yradius, top_xradius - delta);
+                }
+            }
+            hull() {
+                rounded_octagon(thin_mint, radius - 2 * wall);
+                translate([0, -top_xradius, transition]) {
+                    cube([thin_mint, (top_xradius) * 2, thin_mint]);
+                }
+            }
+        }
+    }
+}
+
+// flare to dual cable connectors (old rectangular design)
+
+module octa_mount_flare_rect_connector(height, lip, transition, xradius, yradius, corner, top_xradius, top_yradius) {
     // hack to get it to render, fix problem in rounded_block when radius is equal to corner...
     delta = 0.001;
     // bottom rounded box
@@ -548,7 +841,7 @@ module octa_capsule_array_mount(angles) {
         union() {
             difference() {
                 cylinder(h = mount_top_height, r1 = mount_radius + wall, r2 = mount_radius_capsule, $fn = facets);
-                cylinder(h = mount_top_height, r1 = mount_radius, r2 = mount_radius_capsule - 2 * wall * wall, $fn = facets);
+                cylinder(h = mount_top_height, r1 = mount_radius, r2 = mount_radius_capsule - 3 * wall * wall, $fn = facets);
             }
             // second set of optional "leaves" to get a better mount
             *difference() {
@@ -593,6 +886,17 @@ module octa_capsule_array_mount(angles) {
 // microphone body: flare to capsule array (slips into PCB holder body)
 //
 module render_octa_capsule_flare(z_offset) {
+    translate([0, 0, z_offset]) {
+        octa_mount_flare(pcb_hi_clear + pcb_hi_exp, mount_lip, flare_height, octa_pcb_radius, mount_radius + wall, stalk_height, 1);
+        translate([0, 0, pcb_hi_clear + pcb_hi_exp + flare_height + stalk_height]) {
+            octa_capsule_array_mount([45, 135, -45, -135]);
+        }
+    }
+}
+
+// old rectangular design
+
+module render_octa_capsule_rect_flare(z_offset) {
     translate([0, 0, z_offset]) {
         octa_mount_flare(pcb_hi_clear + pcb_hi_exp, mount_lip, flare_height, box_radius + wall,  box_radius * 2 - wall, 
                          mount_corner, mount_radius + wall, stalk_height, 1);
@@ -605,8 +909,28 @@ module render_octa_capsule_flare(z_offset) {
 // microphone body: main body, holds printed circuit boards
 //
 octa_pcb_mount_height = pcb_length - pcb_low_exp - pcb_hi_exp;
+octa_pcb_radius = radial_pcb_offset + pcb_width/2 + 5 * wall;
 
 module render_octa_pcb_mount(z_offset, showint) {
+    translate([0, 0, z_offset]) {
+        octa_mount_body(octa_pcb_mount_height, octa_pcb_radius, mount_lip, mount_lip, 0);
+        // add ccrma logo
+        rotate([0, 0, -90 + 22.5]) {
+            translate([0, -(octa_pcb_radius - 3.5), octa_pcb_mount_height / 2]) {
+                rotate([90, 270, 0]) {
+                    logo_scale = 1 / 2.4;
+                    scale([logo_scale, logo_scale, 1.0]) {
+                        ccrma_logo(1.65);
+                    }
+                }
+            }
+        }
+    }
+}
+
+// old rectangular design
+
+module render_octa_pcb_rect_mount(z_offset, showint) {
     translate([0, 0, z_offset]) {
         octa_mount_body(octa_pcb_mount_height, box_radius + wall, box_radius * 2 - wall, mount_corner, mount_lip, mount_lip, 0);
     }
@@ -632,7 +956,40 @@ module render_octa_cable_flare(z_offset, flip) {
     }
 }
 
+// microphone body: flare to dual cable connectors (slips into PCB holder body)
+//
 module render_octa_connector_flare(z_offset, flip) {
+    conn_offset = 2.0;
+    conn_wall = conn_core_o_diam / 2 - conn_core_diam / 2;
+    translate([0, 0, z_offset]) {
+        difference() {
+            union() {
+                octa_mount_flare_connector(pcb_low_clear + pcb_low_exp, mount_lip, 20,
+                            octa_pcb_radius,
+                            conn_core_o_diam / 2, conn_core_o_diam + conn_offset);
+                for (m = [0, 1]) mirror([0, m, 0]) translate([0, conn_core_o_diam / 2 + conn_offset, pcb_low_clear + pcb_low_exp + 20]) {
+                    // add two connectors
+                    rotate([0, 0, -90]) {
+                        tetra_mount_connector_holder(conn_core_sleeve, conn_core_o_diam / 2, conn_core_diam / 2,
+                            conn_core_overlap, conn_core_s_diam / 2);
+                    }
+                    // add wall in between the two connectors
+                    translate([- 2 * wall, - (conn_core_o_diam / 2 + conn_offset), 0]) {
+                        cube([4 * wall, conn_offset + wall, 10]);
+                    }
+                }
+            }
+            // redo the hole in the connector holder so that it drills into the top of the flare
+            for (m = [0, 1]) mirror([0, m, 0]) translate([0, conn_core_o_diam / 2 + conn_offset, 0]) {
+                cylinder(r = conn_core_diam / 2, h = 100, $fn = facets);
+            }
+        }
+    }
+}
+
+// old rectangular design
+
+module render_octa_connector_rect_flare(z_offset, flip) {
     conn_offset = 2.0;
     conn_wall = conn_core_o_diam / 2 - conn_core_diam / 2;
     translate([0, 0, z_offset]) {
@@ -672,7 +1029,7 @@ module render_octa_body(z_offset, spread, showint) {
     render_octa_capsule_flare(octa_pcb_mount_height + 2 * lippy);
 }
 
-// microphone: render the full assembly with a vertical separation
+// microphone: render the full assembly with vertical separation between components
 //
 module render_octa_microphone(z_offset, spread) {
     render_octa_body(z_offset, spread);
@@ -681,8 +1038,8 @@ module render_octa_microphone(z_offset, spread) {
             flare_height + stalk_height + pcb_hi_clear + pcb_hi_exp + 2 * lippy + spread + mic_radius);
 }
 
-// microphone: render the full assembly with a vertical separation
-//             cut out halt of the assembly so that we can see the inside
+// microphone: render the full assembly with vertical separation between components
+//             cut out half of the assembly so that we can see the inside
 //
 
 module render_octa_microphone_cutout(z_offset, spread) {