|
@@ -3,7 +3,7 @@
|
|
|
//
|
|
//
|
|
|
// Common Modules and Variables
|
|
// Common Modules and Variables
|
|
|
//
|
|
//
|
|
|
-// Copyright 2015-2016, Fernando Lopez-Lezcano, All Rights Reserved
|
|
|
|
|
|
|
+// Copyright 2015-2017, Fernando Lopez-Lezcano, All Rights Reserved
|
|
|
// nando@ccrma.stanford.edu
|
|
// nando@ccrma.stanford.edu
|
|
|
//
|
|
//
|
|
|
// This program is free software: you can redistribute it and/or modify
|
|
// This program is free software: you can redistribute it and/or modify
|
|
@@ -347,135 +347,6 @@ module shock_mount_ring(outside_radius, inside_radius, thickness) {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-// internal ring of shock mount
|
|
|
|
|
-
|
|
|
|
|
-module shock_mount_internal_ring(height, xradius, yradius, corner, gap, lip) {
|
|
|
|
|
- slot_sep = xradius * 2 / 2.5;
|
|
|
|
|
- slot_w = 5;
|
|
|
|
|
- slot_o = height / 3;
|
|
|
|
|
- difference() {
|
|
|
|
|
- union() {
|
|
|
|
|
- // base ring
|
|
|
|
|
- difference() {
|
|
|
|
|
- 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
|
|
|
|
|
- difference() {
|
|
|
|
|
- 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]) {
|
|
|
|
|
- // slots for rubber bands
|
|
|
|
|
- minkr = 1.5;
|
|
|
|
|
- for (m = [0, 1]) mirror([0, m, 0]) {
|
|
|
|
|
- translate([-slot_w / 2 + slot_sep, ((rot % 180) ? xradius : yradius) + gap, slot_o + minkr]) {
|
|
|
|
|
- minkowski() {
|
|
|
|
|
- cube([slot_w - minkr, 10, slot_o - minkr]);
|
|
|
|
|
- rotate([90, 0, 0]) cylinder(r = minkr, h = 1, $fn = facets);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- // cut holes in slots
|
|
|
|
|
- rotate([0, 0, -45]) {
|
|
|
|
|
- translate([-thin_mint, 0, slot_o]) {
|
|
|
|
|
- for (m = [0, 1]) mirror([0, m, 0]) {
|
|
|
|
|
- // this should be a pizza slice, not a cube
|
|
|
|
|
- cube([6.0, xradius + gap + 3 * wall + 5.0, height]);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- // body for bars that connect both rings together
|
|
|
|
|
- for (rot = [0, 90, 180, 270]) rotate([0, 0, rot]) {
|
|
|
|
|
- translate([((rot % 180) ? yradius : xradius) + 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([((rot % 180) ? yradius : xradius) + gap + 4 * wall, -(connector_w/2 + wall), 0]) {
|
|
|
|
|
- cylinder(r = wall * 2, h = height, $fn = 3);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- // carve holes for bars that connect both rings
|
|
|
|
|
- for (rot = [0, 90, 180, 270]) rotate([0, 0, rot]) {
|
|
|
|
|
- translate([((rot % 180) ? yradius : xradius) + 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 = connector_d / 2, h = connector_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([((rot % 180) ? yradius : xradius) + 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]]);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-// external ring of shock mount (connects to stand mount)
|
|
|
|
|
-
|
|
|
|
|
-module shock_mount_external_ring(height, xradius, yradius, corner, gap, lip) {
|
|
|
|
|
- difference() {
|
|
|
|
|
- rounded_block_relative(ring_ext_height, xradius, yradius, corner, gap);
|
|
|
|
|
- rounded_block_relative(ring_ext_height, xradius, yradius, corner, gap - ring_wall);
|
|
|
|
|
- }
|
|
|
|
|
- for (rot = [0, 90, 180, 270]) {
|
|
|
|
|
- rotate([0, 0, rot]) {
|
|
|
|
|
- translate([((rot % 180) ? yradius : xradius) + gap + ring_wall, -7.5, 0]) {
|
|
|
|
|
- cube([4, 15, ring_ext_height]);
|
|
|
|
|
- }
|
|
|
|
|
- translate([((rot % 180) ? yradius : xradius) + gap, -2, 0]) {
|
|
|
|
|
- cube([7, 4, ring_ext_height]);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- // connection to stand mount
|
|
|
|
|
- intersection() {
|
|
|
|
|
- translate([ring_arm_gap, 0, 0]) {
|
|
|
|
|
- difference() {
|
|
|
|
|
- rounded_block_relative(ring_ext_height, xradius, yradius, corner, gap);
|
|
|
|
|
- rounded_block_relative(ring_ext_height, xradius, yradius, corner, gap - ring_wall);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- translate([ring_arm_gap / 2, -(yradius + 2 * corner), 0]) {
|
|
|
|
|
- cube([(xradius + 2 * corner) + ring_arm_gap, 2 * (yradius + 2 * corner), ring_ext_height]);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- // connection to hub
|
|
|
|
|
- translate([xradius + corner + ring_arm_gap, -2, 0]) {
|
|
|
|
|
- cube([8, 4, ring_ext_height]);
|
|
|
|
|
- }
|
|
|
|
|
- // rotating mount
|
|
|
|
|
- o_rad = 8;
|
|
|
|
|
- i_rad = 3;
|
|
|
|
|
- rotate([0, 90, -90]) {
|
|
|
|
|
- translate([-o_rad, xradius + corner + ring_arm_gap + o_rad + ring_wall / 2 + 4, -2]) {
|
|
|
|
|
- shock_mount_ring(o_rad, i_rad, ring_wall);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-// connector that joins the two internal rings
|
|
|
|
|
-
|
|
|
|
|
-module shock_mount_connector(length, lip, width, thickness, fit) {
|
|
|
|
|
- cube([length + 2 * lip , width - 2 * fit, thickness - 2 * fit]);
|
|
|
|
|
- translate([lip, -(thickness / 2), 0])
|
|
|
|
|
- cube([length , width + thickness, thickness * 3 / 2]);
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
// one eyelet for connection to shock mount or permanent mount
|
|
// one eyelet for connection to shock mount or permanent mount
|
|
|
|
|
|
|
|
module mount_stand_eyelet(outside_radius, inside_radius, thickness) {
|
|
module mount_stand_eyelet(outside_radius, inside_radius, thickness) {
|
|
@@ -613,12 +484,21 @@ module tetra_shock_mount_band(band_height, radius, corner, gap) {
|
|
|
|
|
|
|
|
module tetra_shock_mount_internal_ring(height, radius, band_height, corner, gap) {
|
|
module tetra_shock_mount_internal_ring(height, radius, band_height, corner, gap) {
|
|
|
difference() {
|
|
difference() {
|
|
|
- // four sided band
|
|
|
|
|
- tetra_shock_mount_band(band_height, radius, corner, gap);
|
|
|
|
|
- // slots so that the band clears the lower screws
|
|
|
|
|
|
|
+ // four sided ring
|
|
|
|
|
+ union() {
|
|
|
|
|
+ tetra_shock_mount_band(band_height, radius, corner, gap);
|
|
|
|
|
+ // ridge so that rubber bands stay in the shock mount
|
|
|
|
|
+ tetra_shock_mount_band(wall, radius, corner, gap + wall);
|
|
|
|
|
+ }
|
|
|
|
|
+ // slots inside body so that the ring clears the lower screws
|
|
|
for (r = [0, 90, 180, 270]) rotate([0, 0, r + 45]) {
|
|
for (r = [0, 90, 180, 270]) rotate([0, 0, r + 45]) {
|
|
|
translate([radius + gap + 2.5, -2.0, 0]) cube([2.0, 4.0, band_height]);
|
|
translate([radius + gap + 2.5, -2.0, 0]) cube([2.0, 4.0, band_height]);
|
|
|
}
|
|
}
|
|
|
|
|
+ // channels in body for upper rubber band
|
|
|
|
|
+ for (r = [0, 90, 180, 270]) rotate([0, 0, r + 45]) {
|
|
|
|
|
+ rotate([90, 0, 0]) translate([radius + 8.75, 2 * wall + 0.2, 0])
|
|
|
|
|
+ cylinder(r = 1.0, h = height, center = true, $fn = facets);
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
// 8 columns for mounting rubber bands
|
|
// 8 columns for mounting rubber bands
|
|
|
for (r = [0, 90, 180, 270]) rotate([0, 0, r]) {
|
|
for (r = [0, 90, 180, 270]) rotate([0, 0, r]) {
|
|
@@ -631,8 +511,11 @@ module tetra_shock_mount_internal_ring(height, radius, band_height, corner, gap)
|
|
|
translate([3, 0, 0]) rotate([0, 0, 45]) scale([1.2, 0.85, 1.0])
|
|
translate([3, 0, 0]) rotate([0, 0, 45]) scale([1.2, 0.85, 1.0])
|
|
|
cylinder(r = 3, h = height, $fn = facets);
|
|
cylinder(r = 3, h = height, $fn = facets);
|
|
|
// connect column to body
|
|
// connect column to body
|
|
|
- translate([-2, -2, 0]) rotate([0, 0, 0])
|
|
|
|
|
|
|
+ translate([-2, -2, 0])
|
|
|
cube([4, 3, band_height]);
|
|
cube([4, 3, band_height]);
|
|
|
|
|
+ // connect columns together so they cannot bend
|
|
|
|
|
+ translate([2, -7, 0])
|
|
|
|
|
+ cube([wall, 6, height]);
|
|
|
}
|
|
}
|
|
|
// lower slots for rubber bands
|
|
// lower slots for rubber bands
|
|
|
rotate([0, 0, 45]) translate([2.5, radius/2, 0]) scale([1.0, 1.0, 3.0]) rotate([90, 0, 0]) {
|
|
rotate([0, 0, 45]) translate([2.5, radius/2, 0]) scale([1.0, 1.0, 3.0]) rotate([90, 0, 0]) {
|
|
@@ -696,4 +579,3 @@ module tetra_shock_mount_external_ring(height, radius, corner, gap) {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-
|
|
|