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

Octathingy: add new bottom flare to single DB25 connector, first try at new design for the shock mount

Fernando Pablo Lopez-Lezcano 9 жил өмнө
parent
commit
0867c40109
2 өөрчлөгдсөн 360 нэмэгдсэн , 4 устгасан
  1. 246 4
      Octathingy_mount_pcb.scad
  2. 114 0
      db25.scad

+ 246 - 4
Octathingy_mount_pcb.scad

@@ -31,6 +31,9 @@
 include <Octathingy_common.scad>;
 include <CCRMA_logo.scad>;
 
+// d-sub connector
+include <db25.scad>;
+
 ////
 //// overrides
 
@@ -167,7 +170,7 @@ ring_wall = 4 * wall;
 ring_ext_height = 6;
 
 // gap between external ring and support arm
-ring_arm_gap = 20;
+ring_arm_gap = 16;
 
 
 // the main body that holds the phantom power interfaces
@@ -224,7 +227,7 @@ module rounded_octagon(height, radius) {
 module rounded_octagon_wall(height, radius, wall) {
     difference() {
         rounded_octagon(height, radius);
-        rounded_octagon(height, radius - wall);
+        rounded_octagon(height + thin_mint, radius - wall);
     }
 }
 
@@ -660,6 +663,138 @@ module octa_mount_flare_connector(height, lip, transition, radius, top_xradius,
     }
 }
 
+// flare to d-sub 25 pin connector
+
+module octa_mount_flare_dsub(height, lip, transition, radius, top_xradius, top_yradius) {
+    // bottom octagonal 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 db25 connector mounting plate
+    expand = 3;
+    // height of connector
+    guard_height = 9.525;
+    // thickness of db25 plate
+    db25_t = 3 * wall;
+    translate([0, 0, height]) {
+        minkr = 2.0;
+        difference() {
+            hull() {
+                rounded_octagon(thin_mint, radius);
+                rotate([0, 0, -22.5]) translate([0, 0, transition]) {
+                    minkowski() {
+                        db25_plate(th = thin_mint, border = expand);
+                        cylinder(r = minkr, h = thin_mint, $fn = facets);
+                    }
+                }
+            }
+            hull() {
+                rounded_octagon(thin_mint, radius - 2 * wall);
+                rotate([0, 0, -22.5]) translate([0, 0, transition]) {
+                    minkowski() {
+                        db25_plate(th = thin_mint);
+                        cylinder(r = minkr, h = thin_mint, $fn = facets);
+                    }
+                }
+            }
+        }
+        // db25 mounting plate
+        rotate([0, 0, -22.5]) translate([0, 0, transition]) {
+            difference() {
+                db25_plate(th = db25_t, border = expand);
+                db25_cutout(th = db25_t);
+            }
+            // add guard wall around connector
+            difference() {
+                minkowski() {
+                    db25_plate(th = guard_height + db25_t, border = expand);
+                    cylinder(r = minkr, h = thin_mint, $fn = facets);
+                }
+                db25_plate(th = guard_height + db25_t + thin_mint, border = expand);
+            }
+        }
+        // for testing
+        *rotate([0, 0, -22.5]) translate([0, 0, 30]) db25_plate(th = 1.0);
+    }
+}
+
+module octa_mount_stand(height, lip, transition, radius, top_xradius, top_yradius) {
+    // flare to db25 connector mounting plate
+    expand = 3;
+    // height of connector
+    guard_height = 9.525;
+    // thickness of db25 plate
+    db25_t = 3 * wall;
+    translate([0, 0, height]) {
+        minkr = 2.0;
+        // db25 mounting plate
+        rotate([0, 0, -22.5]) translate([0, 0, transition]) {
+            // add guard wall around connector
+            difference() {
+                minkowski() {
+                    db25_plate(th = guard_height + db25_t, border = 1.8 * expand);
+                    cylinder(r = minkr, h = thin_mint, $fn = facets);
+                }
+                db25_plate(th = guard_height + db25_t + thin_mint, border = 1.8 * expand);
+            }
+        }
+        // ring and connector
+        translate([0, 0, height]) {
+            o_rad = 8;
+            i_rad = 3;
+            rotate([0, 90, -22.5]) {
+                // connector
+                translate([-guard_height, 13, 0]) cube([guard_height, 10, o_rad/2]);
+                translate([-guard_height, 9, o_rad/4]) rotate([0, 90, 0]) {
+                    difference() {
+                        cylinder(r = o_rad, h = guard_height, $fn = facets);
+                        translate([-10, -16, 0]) cube([20, 20, 10]);
+                    }
+                }
+                // ring
+                translate([-o_rad, 30, 0]) {
+                    shock_mount_ring(o_rad, i_rad, ring_wall);
+                }
+            }
+        }
+    }
+}
+
 // top conical section that plugs into capsule array
 
 module octa_capsule_array_mount(angles) {
@@ -705,6 +840,95 @@ module octa_capsule_array_mount(angles) {
     }
 }
 
+//
+// shock mount components
+//
+
+// shock mount internal ring
+
+module octa_shock_mount_internal_ring(height, radius, band_height, corner, gap) {
+    rotate([0, 0, 22.5]) {
+        // inner octagon, hugs the body
+        difference() {
+            rounded_octagon_wall(band_height, radius + 3 * wall, 2 * wall);
+            rotate([0, 0, -22.5 + 90]) translate([-40, -20, 0]) {
+                cube([80, 40, 20 + thin_mint]);
+            }
+        }
+    }
+    // joins inner and outer octagons
+    for (m = [0, 1]) mirror([m, 0, 0]) {
+        translate([octa_pcb_radius, -10, 0]) {
+            cube([2, 20, band_height]);
+        }
+    }
+    // 8 columns for mounting rubber bands
+    for (r = [0, 90, 180, 270]) rotate([0, 0, r]) {
+        for (m = [0, 1]) mirror([m, 0, 0]) {
+            translate([radius + 1.0, radius/2 - 2, 0]) {
+                rotate([0, 0, 0]) {
+                    difference() {
+                        // columns
+                        union() {
+                            translate([3, 0, 0]) scale([1.2, 0.75, 1.0]) cylinder(r = 3, h = height, $fn = facets);
+                        }
+                        // lower slots for rubber bands
+                        translate([3, radius/2, 0]) scale([1.0, 1.0, 3.0]) rotate([90, 0, 0]) {
+                            cylinder(r = 1.2, h = radius * 2, $fn = facets);
+                        }
+                        // upper slots for rubber bands
+                        translate([3, radius/2, height]) scale([1.0, 1.0, 3.0]) rotate([90, 0, 0]) {
+                            cylinder(r = 1.2, h = radius * 2, $fn = facets);
+                        }
+                    }
+                }
+            }
+        }
+        // the outer octagon, holds the columns
+        rotate([0, 0, 22.5]) rounded_octagon_wall(band_height, radius + 6, 2 * wall);
+    }
+}
+
+// shock mount external ring
+
+module octa_shock_mount_external_ring(height, radius, corner, gap) {
+    // main ring
+    rotate([0, 0, 22.5]) rounded_octagon_wall(ring_ext_height, 2 * radius - ring_wall, ring_wall);
+    for (rot = [0, 90, 180, 270]) {
+        // anchors for rubber bands
+        rotate([0, 0, rot]) {
+            translate([radius + gap + 2 * ring_wall, -7.5, 0]) {
+                cube([4, 15, ring_ext_height]);
+            }
+            translate([radius + gap + ring_wall, -2, 0]) {
+                cube([7, 4, ring_ext_height]);
+            }
+        }
+    }
+    // connection to stand mount
+    intersection() {
+        translate([ring_arm_gap, 0, 0]) {
+            rotate([0, 0, 22.5]) rounded_octagon_wall(ring_ext_height, 2 * radius - ring_wall, ring_wall);
+        }
+        translate([ring_arm_gap / 2, -(radius + 2 * corner), 0]) {
+            cube([(radius + 2 * corner) + ring_arm_gap, 2 * (radius + 2 * corner), ring_ext_height]);
+        }
+    }
+    // connection to hub
+    translate([radius + corner + ring_arm_gap - 0.7, -2, 0]) {
+        cube([10, 4, ring_ext_height * 2]);
+    }
+    // rotating mount
+    o_rad = 8;
+    i_rad = 3;
+    rotate([0, 90, -90]) {
+        translate([-o_rad, radius + corner + ring_arm_gap + o_rad + 2 * ring_wall, -2]) {
+            shock_mount_ring(o_rad, i_rad, ring_wall);
+        }
+    }
+}
+
+
 ////
 //// render all the different parts
 ////
@@ -828,12 +1052,18 @@ module render_octa_shock_mount_stand(z_offset) {
 // shock mount: external ring
 //
 
-module render_octa_shock_mount_external_ring(z_offset) {
+module render_octa_shock_mount_external_ring_old(z_offset) {
     translate([0, 0, z_offset]) {
         shock_mount_external_ring(ring_height, box_radius + wall, box_radius * 2 - wall, mount_corner, main_radius_inc, 0);
     }
 }
 
+module render_octa_shock_mount_external_ring(z_offset) {
+    translate([0, 0, z_offset]) {
+        octa_shock_mount_external_ring(ring_height, octa_pcb_radius, 20, main_radius_inc);
+    }
+}
+
 // shock mount: bottom internal ring
 //
 
@@ -843,15 +1073,27 @@ module render_octa_shock_mount_internal_ring_bot(z_offset) {
     }
 }
 
+module render_octa_shock_mount_internal_ring_bot(z_offset) {
+    translate([0, 0, z_offset]) {
+        shock_mount_internal_ring(ring_height, A/2 + wall, A/2 + 3, octa_pcb_radius * 2/3, internal_ring_gap, 1);
+    }
+}
+
 // shock mount: top internal ring
 //
 
-module render_octa_shock_mount_internal_ring_top(z_offset) {
+module render_octa_shock_mount_internal_ring_top_old(z_offset) {
     translate([0, 0, z_offset]) {
         shock_mount_internal_ring(ring_height, box_radius + wall, box_radius * 2 - wall, mount_corner, internal_ring_gap, 0);
     }
 }
 
+module render_octa_shock_mount_internal_ring_top(z_offset) {
+    translate([0, 0, z_offset]) {
+        shock_mount_internal_ring(ring_height, A/2 + wall, A/2 + 3, octa_pcb_radius * 2/3, internal_ring_gap, 0);
+    }
+}
+
 // shock mount: all four internal ring connectors
 //
 

+ 114 - 0
db25.scad

@@ -0,0 +1,114 @@
+//
+// *SpHEAR Project (Spherical Harmonics Ears), 
+//
+// db25 connector plate
+// 
+// dimensions found here:
+// http://www.interfacebus.com/Connector_D-Sub_Mechanical_Dimensions.html
+//
+//
+// Copyright 2015-2016, Fernando Lopez-Lezcano, All Rights Reserved
+// nando@ccrma.stanford.edu
+//
+//
+//  This program is free software: you can redistribute it and/or modify
+//  it under the terms of the GNU General Public License as published by
+//  the Free Software Foundation, either version 3 of the License, or
+//  (at your option) any later version.
+//
+//  This program is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//  GNU General Public License for more details.
+//
+//  You should have received a copy of the GNU General Public License
+//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+//
+//
+// 3d Models released under the Creative Commons license as follows:
+//   Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)
+// http://creativecommons.org/licenses/by-nc-sa/4.0/
+
+// size of connector
+B = 39.09;
+D = 8.48;
+// size of cutout
+H = 41.53;
+J = 10.97;
+// distance between mounting screws
+C = 47.17;
+// mount plate
+A = 53.42;
+E = 12.93;
+// depth of contacts
+c_depth = 9.5;
+
+ang = 10;
+d_s = 3.4 / 2;
+
+// thickness of plate
+t = 1.0;
+
+// facets of cylinders
+facets = 32;
+
+// mini-xlr diameter
+xlr_diam = 0.444 * 2.54;
+
+
+module db25_plate(width = E, th = t, border = 0) {
+    linear_extrude(height = th) {
+        polygon([
+                [- (A/2 + border), width/2 + border],
+                [A/2 + border, width/2 + border],
+                [A/2 + border, - (width/2 + border)], 
+                [-(A/2 + border), - (width/2 + border)], 
+                ]);
+    }
+}
+
+module db25_box(width = E, height, th = t) {
+    linear_extrude(height = th) {
+        polygon([
+                [- A/2, width/2],
+                [A/2, width/2],
+                [A/2, - width/2], 
+                [-A/2, - width/2], 
+                ]);
+    }
+    // box walls
+    *translate([-A/2, -(width/2) - th / 8, 0]) {
+        cube([th, width, height + 4]);
+    }
+    *translate([A/2, -(width/2) - th/2, -6]) {
+        cube([th, width, height]);
+    }
+}
+
+module db25_cutout(th = t) {
+    thin_mint = 0.001;
+    hull() {
+        // corners
+        for (coord = [
+                [- H/2 + d_s/2, J/2 - d_s/2],
+                [H/2 - d_s/2, J/2 - d_s/2],
+                [- H/2 + d_s/2 + J * tan(10), - J/2 + d_s/2], 
+                [H/2 - d_s/2 - J * tan(10), - J/2 + d_s/2], 
+                ]) {
+            translate([coord[0], coord[1], -thin_mint]) {
+                cylinder(r = d_s, h = th + thin_mint * 2, $fn = facets);
+            }
+        }
+    }
+    // holes for screws
+    for (hole = [-C/2, C/2]) {
+        translate([hole, 0, -thin_mint]) {
+            cylinder(r = d_s, h = th + thin_mint * 2, $fn = facets);
+        }
+    }
+}
+
+*difference() {
+    db25_plate();
+    db25_cutout();
+}