|
|
@@ -3,7 +3,7 @@
|
|
|
//
|
|
|
// Common Modules and Variables
|
|
|
//
|
|
|
-// Copyright 2015-2017, Fernando Lopez-Lezcano, All Rights Reserved
|
|
|
+// Copyright 2015-2018, Fernando Lopez-Lezcano, All Rights Reserved
|
|
|
// nando@ccrma.stanford.edu
|
|
|
//
|
|
|
// This program is free software: you can redistribute it and/or modify
|
|
|
@@ -496,7 +496,7 @@ module shock_mount_stand(height, wall, stand_wall) {
|
|
|
// 5/8-27 for US mic stands
|
|
|
// 3/8-16 for European
|
|
|
|
|
|
-module stand_mount_thread(length, band, wall, diameter = 5/8, threads_per_inch = 27, wall = 2.0, fit = 0.) {
|
|
|
+module stand_mount_thread(length, band, wall, diameter = 5/8, threads_per_inch = 27, wall = 2.0, fit = 0.1) {
|
|
|
diam = diameter * 25.4;
|
|
|
pitch = (1.0/threads_per_inch)*25.4;
|
|
|
difference() {
|
|
|
@@ -629,3 +629,118 @@ module tetra_shock_mount_external_ring(height, radius, corner, gap) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+// shock mount to test rig
|
|
|
+
|
|
|
+// model WidowXL
|
|
|
+//
|
|
|
+// sliding block
|
|
|
+arm_l = 10.2 + 0.38;
|
|
|
+arm_w = 21.5 + 0.38;
|
|
|
+arm_d = 17.6 + 0.1;
|
|
|
+// x profile
|
|
|
+arm_profile_s = 10.25;
|
|
|
+arm_b_prof = 4.25;
|
|
|
+// connection socket
|
|
|
+arm_s_h = 20.0;
|
|
|
+
|
|
|
+module arm_gripper_block () {
|
|
|
+ difference() {
|
|
|
+ // body
|
|
|
+ translate([-(4 * wall)/2, -2 * wall, 0]) {
|
|
|
+ cube([arm_l + 4 * wall, arm_w + 4 * wall, arm_d + arm_s_h]);
|
|
|
+ }
|
|
|
+ // carve out corners for better fit
|
|
|
+ translate([0.2, 0.2, 0]) cylinder(r = 0.4, h = arm_d + arm_s_h, $fn = facets);
|
|
|
+ translate([arm_l, 0.2, 0]) cylinder(r = 0.4, h = arm_d + arm_s_h, $fn = facets);
|
|
|
+ translate([arm_l, arm_w, 0]) cylinder(r = 0.4, h = arm_d + arm_s_h, $fn = facets);
|
|
|
+ translate([0.2, arm_w, 0]) cylinder(r = 0.4, h = arm_d + arm_s_h, $fn = facets);
|
|
|
+ // arm gripper block
|
|
|
+ union() {
|
|
|
+ cube([arm_l, arm_w, arm_d + arm_s_h]);
|
|
|
+ translate([-arm_l/2, arm_w/2 - arm_profile_s/2, arm_d - arm_b_prof - arm_profile_s - 10]) {
|
|
|
+ cube([20, arm_profile_s, arm_profile_s + 10]);
|
|
|
+ }
|
|
|
+ // screw holes
|
|
|
+ translate([-10 + arm_l/2, 3.15, arm_d - 9.7]) rotate([0, 90, 0]) {
|
|
|
+ cylinder(r = 1.94/2, h = 20.0, $fn = facets);
|
|
|
+ }
|
|
|
+ translate([-10 + arm_l/2, arm_w - 3.15, arm_d - 9.7]) rotate([0, 90, 0]) {
|
|
|
+ cylinder(r = 1.94/2, h = 20.0, $fn = facets);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // add ceiling to body and screw hole
|
|
|
+ difference() {
|
|
|
+ translate([-(4 * wall)/2, -2 * wall, arm_d]) {
|
|
|
+ cube([arm_l + 4 * wall, arm_w + 4 * wall, 3 * wall]);
|
|
|
+ }
|
|
|
+ translate([arm_l/2, arm_w/2, 0]) cylinder(r = 3.1/2, h = 30, $fn = facets);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+module tetra_arm_mount(pillar_h, height, radius, band_height, corner, gap) {
|
|
|
+ difference() {
|
|
|
+ // 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]) {
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // pillars for arm grips
|
|
|
+ //
|
|
|
+ // this separation between pillars comes from original arm gripper (it
|
|
|
+ // could be something else now), this should be move to a common parameter
|
|
|
+ grip_sep = 25.4 * 1.5 / 2;
|
|
|
+ grip_width = 15.0;
|
|
|
+ sphear_arm_mount_pillars(radius, pillar_h, grip_sep, grip_width);
|
|
|
+}
|
|
|
+
|
|
|
+// mount pillars that plug into robotic arm sockets
|
|
|
+
|
|
|
+module sphear_arm_mount_pillars(radius, height, grip_sep, grip_width) {
|
|
|
+ // pillars for arm grips
|
|
|
+ m_r = 1.0;
|
|
|
+ for (m = [0, 1]) mirror([m, 0, 0]) translate([radius + 3 * wall + m_r, - grip_width/2 + m_r, 0]) {
|
|
|
+ minkowski() {
|
|
|
+ cube([5 - 2*m_r, grip_width - 2*m_r, height]);
|
|
|
+ cylinder(r = m_r, h = thin_mint, $fn = 32);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // transition
|
|
|
+ tran_h = 30.0;
|
|
|
+ for (m = [0, 1]) mirror([m, 0, 0]) {
|
|
|
+ hull() {
|
|
|
+ translate([radius + 3 * wall + m_r, -grip_width/2 + m_r, height]) {
|
|
|
+ minkowski() {
|
|
|
+ cube([5 - 2 * m_r, grip_width - 2 * m_r, thin_mint]);
|
|
|
+ cylinder(r = m_r, h = thin_mint, $fn = 32);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ translate([grip_sep - wall + m_r, -(arm_w + 2 * fit + 2 * wall)/2 + m_r, height + tran_h]) {
|
|
|
+ minkowski() {
|
|
|
+ cube([arm_l - 2 * fit + 2 * wall - 2 * m_r, arm_w - 2 * fit + 2 * wall - 2 * m_r, thin_mint]);
|
|
|
+ cylinder(r = m_r, h = thin_mint, $fn = 32);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // grip pillar, plugs into slots
|
|
|
+ for (m = [0, 1]) mirror([m, 0, 0]) {
|
|
|
+ translate([grip_sep + m_r, -(arm_w + 2 * fit)/2 + m_r, height + tran_h]) {
|
|
|
+ minkowski() {
|
|
|
+ cube([arm_l - 2 * fit - 2 * m_r, arm_w - 2 * fit - 2 * m_r, 20 - 3.0]);
|
|
|
+ cylinder(r = m_r, h = thin_mint, $fn = 32);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|