|
@@ -996,6 +996,11 @@ module octa_shock_mount_band(band_height, radius, delta_radius) {
|
|
|
rotate([0, 0, -22.5 + 90]) translate([-40, -(1.273 * radius)/2, 0]) {
|
|
rotate([0, 0, -22.5 + 90]) translate([-40, -(1.273 * radius)/2, 0]) {
|
|
|
cube([80, 1.273 * radius, band_height + thin_mint]);
|
|
cube([80, 1.273 * radius, band_height + thin_mint]);
|
|
|
}
|
|
}
|
|
|
|
|
+ // space for screw heads
|
|
|
|
|
+ slot_w = 4.0;
|
|
|
|
|
+ slot_d = 1.5;
|
|
|
|
|
+ for (r = [0, 180]) rotate([0, 0, r - 45])
|
|
|
|
|
+ translate([radius - slot_d/2, -slot_w/2, 0]) cube([slot_d, slot_w, band_height]);
|
|
|
}
|
|
}
|
|
|
// the outer octagon
|
|
// the outer octagon
|
|
|
rounded_octagon_wall(band_height, radius + delta_radius, 2 * wall);
|
|
rounded_octagon_wall(band_height, radius + delta_radius, 2 * wall);
|
|
@@ -1131,52 +1136,62 @@ module octa_quik_release_stand_mount(band_height, radius) {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-// stand mount for robotic arm
|
|
|
|
|
|
|
+// mount pillars that plug into robotic arm sockets
|
|
|
|
|
|
|
|
-module octa_arm_mount(band_height, radius, height) {
|
|
|
|
|
- vertical_offset = 18;
|
|
|
|
|
- mount_offset = 3.0;
|
|
|
|
|
- // octagonal band
|
|
|
|
|
- octa_shock_mount_band(band_height, radius, pcb_version == 2 ? 7.5 : 6);
|
|
|
|
|
|
|
+module sphear_arm_mount_pillars(radius, height, grip_sep, grip_width) {
|
|
|
// pillars for arm grips
|
|
// pillars for arm grips
|
|
|
- // grip_width = 21.8;
|
|
|
|
|
- grip_width = 15;
|
|
|
|
|
- for (m = [0, 1]) mirror([m, 0, 0]) translate([radius + 3 * wall, -grip_width/2, 0]) {
|
|
|
|
|
- cube([5, grip_width, height - 50.0]);
|
|
|
|
|
|
|
+ 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
|
|
// transition
|
|
|
- grip_sep = 25.4 * 1.5 / 2;
|
|
|
|
|
|
|
+ tran_h = 30.0;
|
|
|
for (m = [0, 1]) mirror([m, 0, 0]) {
|
|
for (m = [0, 1]) mirror([m, 0, 0]) {
|
|
|
- difference() {
|
|
|
|
|
- hull() {
|
|
|
|
|
- translate([radius + 3 * wall, -grip_width/2, height - 50]) {
|
|
|
|
|
- cube([5, grip_width, thin_mint]);
|
|
|
|
|
- }
|
|
|
|
|
- translate([grip_sep - wall, -(arm_w + 2 * fit + 2 * wall)/2, height - 20.0]) {
|
|
|
|
|
- cube([arm_l - 2 * fit + 2 * wall, arm_w - 2 * fit + 2 * wall, thin_mint]);
|
|
|
|
|
|
|
+ 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);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- *hull() {
|
|
|
|
|
- translate([radius + 3 * wall, -grip_width/2, height - 50]) {
|
|
|
|
|
- translate([2 * wall, 2 * wall, 0]) cube([5 - 4 * wall, grip_width - 4 * wall, thin_mint]);
|
|
|
|
|
- }
|
|
|
|
|
- translate([grip_sep, -(arm_w + 2 * fit)/2, height - 20.0]) {
|
|
|
|
|
- translate([2 * wall, 2 * wall, 0]) cube([arm_l - 2 * fit - 4 * wall, arm_w - 2 * fit - 4 * wall, thin_mint]);
|
|
|
|
|
|
|
+ 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
|
|
// grip pillar, plugs into slots
|
|
|
for (m = [0, 1]) mirror([m, 0, 0]) {
|
|
for (m = [0, 1]) mirror([m, 0, 0]) {
|
|
|
- translate([grip_sep, -(arm_w + 2 * fit)/2, height - 20.0]) {
|
|
|
|
|
- difference() {
|
|
|
|
|
- cube([arm_l - 2 * fit, arm_w - 2 * fit, 20 - 3.0]);
|
|
|
|
|
- *translate([2 * wall, 2 * wall, 0]) cube([arm_l - 2 * fit - 4 * wall, arm_w - 2 * fit - 4 * wall, 20]);
|
|
|
|
|
|
|
+ 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);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+// octathingy arm mount for robotic arm
|
|
|
|
|
+
|
|
|
|
|
+module octa_arm_mount(band_height, radius, height) {
|
|
|
|
|
+ vertical_offset = 18;
|
|
|
|
|
+ mount_offset = 3.0;
|
|
|
|
|
+ // octagonal band
|
|
|
|
|
+ octa_shock_mount_band(band_height, radius, pcb_version == 2 ? 7.5 : 6);
|
|
|
|
|
+ // 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, height - 50.0, grip_sep, grip_width);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
////
|
|
////
|
|
|
//// render all the different parts
|
|
//// render all the different parts
|
|
|
////
|
|
////
|
|
@@ -1186,7 +1201,7 @@ module octa_arm_mount(band_height, radius, height) {
|
|
|
module render_octa_capsule_flare(z_offset) {
|
|
module render_octa_capsule_flare(z_offset) {
|
|
|
translate([0, 0, 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);
|
|
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]) {
|
|
|
|
|
|
|
+ *translate([0, 0, pcb_hi_clear + pcb_hi_exp + flare_height + stalk_height]) {
|
|
|
octa_capsule_array_mount([45, 135, -45, -135]);
|
|
octa_capsule_array_mount([45, 135, -45, -135]);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -1261,9 +1276,9 @@ module render_octa_mount_dsub_flare(z_offset, flip) {
|
|
|
}
|
|
}
|
|
|
rotate([0, updown, 90]) {
|
|
rotate([0, updown, 90]) {
|
|
|
conn_offset = 2.0;
|
|
conn_offset = 2.0;
|
|
|
- translate([0, 0, -mount_lip]) {
|
|
|
|
|
- octa_mount_flare_dsub(pcb_low_clear + pcb_low_exp, mount_lip, 20,
|
|
|
|
|
- octa_pcb_radius,
|
|
|
|
|
|
|
+ translate([0, 0, z_offset - mount_lip]) {
|
|
|
|
|
+ octa_mount_flare_dsub(pcb_low_clear + pcb_low_exp - (pcb_version == 2 ? 13 : 0), mount_lip,
|
|
|
|
|
+ pcb_version == 2 ? 33 : 20, octa_pcb_radius,
|
|
|
conn_core_o_diam / 2, conn_core_o_diam + conn_offset);
|
|
conn_core_o_diam / 2, conn_core_o_diam + conn_offset);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -1273,7 +1288,7 @@ module render_octa_mount_dsub_flare(z_offset, flip) {
|
|
|
//
|
|
//
|
|
|
module render_octa_body(z_offset, spread, showint) {
|
|
module render_octa_body(z_offset, spread, showint) {
|
|
|
rotate([0, 180, 0]) {
|
|
rotate([0, 180, 0]) {
|
|
|
- render_octa_mount_dsub_flare(0);
|
|
|
|
|
|
|
+ render_octa_mount_dsub_flare(pcb_version == 2 ? 10 : 0, 0);
|
|
|
}
|
|
}
|
|
|
lippy = spread - mount_lip;
|
|
lippy = spread - mount_lip;
|
|
|
render_octa_pcb_mount(lippy, showint);
|
|
render_octa_pcb_mount(lippy, showint);
|
|
@@ -1285,7 +1300,7 @@ module render_octa_body(z_offset, spread, showint) {
|
|
|
module render_octa_microphone(z_offset, spread) {
|
|
module render_octa_microphone(z_offset, spread) {
|
|
|
render_octa_body(z_offset, spread);
|
|
render_octa_body(z_offset, spread);
|
|
|
lippy = spread - mount_lip;
|
|
lippy = spread - mount_lip;
|
|
|
- render_octa_capsule_array(z_offset + octa_pcb_mount_height + mount_top_height +
|
|
|
|
|
|
|
+ *render_octa_capsule_array(z_offset + octa_pcb_mount_height + mount_top_height +
|
|
|
flare_height + stalk_height + pcb_hi_clear + pcb_hi_exp + 2 * lippy + spread + mic_radius);
|
|
flare_height + stalk_height + pcb_hi_clear + pcb_hi_exp + 2 * lippy + spread + mic_radius);
|
|
|
}
|
|
}
|
|
|
|
|
|