|
@@ -8,7 +8,7 @@
|
|
|
// by Eric Benjamin, Audio Engineering Society Convention Paper 8728,
|
|
// by Eric Benjamin, Audio Engineering Society Convention Paper 8728,
|
|
|
// October 2012, San Francisco
|
|
// October 2012, San Francisco
|
|
|
//
|
|
//
|
|
|
-// Copyright 2015-2017, Fernando Lopez-Lezcano, All Rights Reserved
|
|
|
|
|
|
|
+// Copyright 2015-2018, 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
|
|
@@ -104,7 +104,7 @@ wall = 1.0;
|
|
|
|
|
|
|
|
// back and front clearance of pcb (components and leads)
|
|
// back and front clearance of pcb (components and leads)
|
|
|
pcb_front = pcb_version == 2 ? 2.50 : 3.00;
|
|
pcb_front = pcb_version == 2 ? 2.50 : 3.00;
|
|
|
-pcb_back = pcb_version == 2 ? 1.50 : 1.80;
|
|
|
|
|
|
|
+pcb_back = pcb_version == 2 ? 1.70 : 1.80;
|
|
|
|
|
|
|
|
// calculated minimum "radius" of microphone box
|
|
// calculated minimum "radius" of microphone box
|
|
|
box_radius = pcb_front + (pcb_thickness + pcb_tfit) + pcb_back + 2 * wall;
|
|
box_radius = pcb_front + (pcb_thickness + pcb_tfit) + pcb_back + 2 * wall;
|
|
@@ -116,7 +116,7 @@ mount_corner = box_radius - pcb_width / 2 + pcb_slot_depth + 4.0;
|
|
|
render_screw_holes = true;
|
|
render_screw_holes = true;
|
|
|
radial_pcb_offset = pcb_version == 2 ? 15.0 : 17.0;
|
|
radial_pcb_offset = pcb_version == 2 ? 15.0 : 17.0;
|
|
|
octa_pcb_mount_height = pcb_length - pcb_low_exp - pcb_hi_exp;
|
|
octa_pcb_mount_height = pcb_length - pcb_low_exp - pcb_hi_exp;
|
|
|
-octa_pcb_radius = radial_pcb_offset + pcb_width/2 + 5 * wall;
|
|
|
|
|
|
|
+octa_pcb_radius = radial_pcb_offset + pcb_width/2 + (pcb_version == 2 ? 4.75 : 5) * wall;
|
|
|
|
|
|
|
|
// body to flares snap joint arm slot width
|
|
// body to flares snap joint arm slot width
|
|
|
snap_joint_slot_w = 0.75;
|
|
snap_joint_slot_w = 0.75;
|
|
@@ -252,7 +252,7 @@ module rounded_octagon_wall(height, radius, wall) {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-octa_pcb_twist = pcb_version == 2 ? 19 : 16;
|
|
|
|
|
|
|
+octa_pcb_twist = pcb_version == 2 ? 12 : 16;
|
|
|
|
|
|
|
|
module octa_mount_body(height, radius, lower_lip, upper_lip, clear) {
|
|
module octa_mount_body(height, radius, lower_lip, upper_lip, clear) {
|
|
|
// rotate pcb assembly so it does not interfere with the screws
|
|
// rotate pcb assembly so it does not interfere with the screws
|
|
@@ -271,7 +271,7 @@ module octa_mount_body(height, radius, lower_lip, upper_lip, clear) {
|
|
|
translate([radial_pcb_offset, 0, 0]) {
|
|
translate([radial_pcb_offset, 0, 0]) {
|
|
|
rotate([0, 0, 180 + twist_angle]) {
|
|
rotate([0, 0, 180 + twist_angle]) {
|
|
|
one_pcb_slot(pcb_width + pcb_fit, height * 2/3, pcb_thickness + pcb_tfit,
|
|
one_pcb_slot(pcb_width + pcb_fit, height * 2/3, pcb_thickness + pcb_tfit,
|
|
|
- pcb_slot_depth, pcb_front, pcb_back, true);
|
|
|
|
|
|
|
+ pcb_slot_depth, pcb_front, pcb_back, false);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -415,7 +415,7 @@ module octa_mount_flare_no_ws(height, lip, transition, radius, top_radius, stalk
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-module octa_mount_flare(height, lip, transition, radius, top_radius, stalk_height, dot) {
|
|
|
|
|
|
|
+module octa_mount_flare_old(height, lip, transition, radius, top_radius, stalk_height, dot) {
|
|
|
// transition from bottom box to windscreen mounting thread
|
|
// transition from bottom box to windscreen mounting thread
|
|
|
transition_to_threads = 5;
|
|
transition_to_threads = 5;
|
|
|
// bottom box
|
|
// bottom box
|
|
@@ -537,6 +537,116 @@ module octa_mount_flare(height, lip, transition, radius, top_radius, stalk_heigh
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+module octa_mount_flare(height, lip, transition, radius, top_radius, stalk_height, dot) {
|
|
|
|
|
+ // transition from bottom box to windscreen mounting thread
|
|
|
|
|
+ transition_to_threads = 5;
|
|
|
|
|
+ // 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);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ // indicator of "front" of microphone
|
|
|
|
|
+ rotate([0, 0, 180 + 22.5]) translate([radius - 2, 0, 0]) {
|
|
|
|
|
+ cylinder(r = 1.0, h = lip/2, $fn = facets);
|
|
|
|
|
+ }
|
|
|
|
|
+ // stops for shock mount
|
|
|
|
|
+ for (r = [0, 90, 180, 270]) rotate([0, 0, r - 22.5]) {
|
|
|
|
|
+ translate([radius - 3.4, 0, 0]) scale([2.0, 1.0, 1.0]) {
|
|
|
|
|
+ difference() {
|
|
|
|
|
+ cylinder(r = 2.0, h = lip + transition_to_threads, $fn = facets);
|
|
|
|
|
+ translate([-2, -2.0, 0]) cube([2.0, 4.0, lip + transition_to_threads]);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ // 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 windscreen threads
|
|
|
|
|
+ translate([0, 0, height - windscreen_thread_height - transition_to_threads]) {
|
|
|
|
|
+ difference() {
|
|
|
|
|
+ hull() {
|
|
|
|
|
+ rounded_octagon(thin_mint, radius);
|
|
|
|
|
+ translate([0, 0, transition_to_threads]) {
|
|
|
|
|
+ cylinder(r = windscreen_thread_radius + 0.5, h = thin_mint, $fn = facets);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ hull() {
|
|
|
|
|
+ rounded_octagon(thin_mint, radius - wall);
|
|
|
|
|
+ translate([0, 0, transition_to_threads]) {
|
|
|
|
|
+ cylinder(r = windscreen_thread_radius - windscreen_thread_depth - wall, h = thin_mint, $fn = facets);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ // windscreen mounting threads
|
|
|
|
|
+ translate([0, 0, height - windscreen_thread_height]) difference() {
|
|
|
|
|
+ metric_thread(diameter = windscreen_thread_radius * 2, pitch = windscreen_thread_pitch,
|
|
|
|
|
+ length = windscreen_thread_height, angle = windscreen_thread_angle, internal = false);
|
|
|
|
|
+ cylinder(r = windscreen_thread_radius - wall - windscreen_thread_depth, h = windscreen_thread_height + thin_mint, $fn = facets);
|
|
|
|
|
+ }
|
|
|
|
|
+ // flare to stalk
|
|
|
|
|
+ translate([0, 0, height - 1.5]) {
|
|
|
|
|
+ difference() {
|
|
|
|
|
+ cylinder(r1 = windscreen_thread_radius - windscreen_thread_depth,
|
|
|
|
|
+ r2 = top_radius + wall + fit, h = transition + 1.5, $fn = facets);
|
|
|
|
|
+ cylinder(r1 = windscreen_thread_radius - windscreen_thread_depth - wall,
|
|
|
|
|
+ r2 = top_radius + fit, h = transition + 1.5, $fn = facets);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ // socket for stalk
|
|
|
|
|
+ s_length = 10.0;
|
|
|
|
|
+ translate([0, 0, height + transition - s_length]) {
|
|
|
|
|
+ difference() {
|
|
|
|
|
+ cylinder(r = top_radius + wall + fit, h = s_length, $fn = facets);
|
|
|
|
|
+ cylinder(r = top_radius + fit, h = s_length, $fn = facets);
|
|
|
|
|
+ // add key slot for orientation
|
|
|
|
|
+ translate([top_radius, 0, -1]) {
|
|
|
|
|
+ cylinder(r = 0.4, h = s_length + 2, $fn = facets);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ // internal flare for stalk
|
|
|
|
|
+ translate([0, 0, height - 1.5]) {
|
|
|
|
|
+ difference() {
|
|
|
|
|
+ cylinder(r1 = windscreen_thread_radius - windscreen_thread_depth,
|
|
|
|
|
+ r2 = top_radius + wall + fit, h = transition + 1.5 - s_length, $fn = facets);
|
|
|
|
|
+ cylinder(r1 = windscreen_thread_radius - windscreen_thread_depth - wall,
|
|
|
|
|
+ r2 = top_radius + fit, h = transition + 1.5 - s_length, $fn = facets);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
// flares from the body to a dual cable housing
|
|
// flares from the body to a dual cable housing
|
|
|
|
|
|
|
|
module octa_mount_flare_dual(height, lip, transition, xradius, yradius, corner, top_radius, stalk_height) {
|
|
module octa_mount_flare_dual(height, lip, transition, xradius, yradius, corner, top_radius, stalk_height) {
|
|
@@ -737,7 +847,7 @@ module octa_mount_flare_dsub(height, lip, transition, radius, top_xradius, top_y
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
// flare to db25 connector mounting plate
|
|
// flare to db25 connector mounting plate
|
|
|
- expand = 3;
|
|
|
|
|
|
|
+ expand = pcb_version == 2 ? 1 : 3;
|
|
|
// height of connector
|
|
// height of connector
|
|
|
guard_height = 9.525;
|
|
guard_height = 9.525;
|
|
|
// thickness of db25 plate
|
|
// thickness of db25 plate
|
|
@@ -747,7 +857,7 @@ module octa_mount_flare_dsub(height, lip, transition, radius, top_xradius, top_y
|
|
|
difference() {
|
|
difference() {
|
|
|
hull() {
|
|
hull() {
|
|
|
rounded_octagon(thin_mint, radius);
|
|
rounded_octagon(thin_mint, radius);
|
|
|
- rotate([0, 0, -22.5]) translate([0, 0, transition]) {
|
|
|
|
|
|
|
+ rotate([0, 0, -22.5]) translate([0, 0, transition - 5.0]) {
|
|
|
minkowski() {
|
|
minkowski() {
|
|
|
db25_plate(th = thin_mint, border = expand);
|
|
db25_plate(th = thin_mint, border = expand);
|
|
|
cylinder(r = minkr, h = thin_mint, $fn = facets);
|
|
cylinder(r = minkr, h = thin_mint, $fn = facets);
|
|
@@ -756,9 +866,9 @@ module octa_mount_flare_dsub(height, lip, transition, radius, top_xradius, top_y
|
|
|
}
|
|
}
|
|
|
hull() {
|
|
hull() {
|
|
|
rounded_octagon(thin_mint, radius - 2 * wall);
|
|
rounded_octagon(thin_mint, radius - 2 * wall);
|
|
|
- rotate([0, 0, -22.5]) translate([0, 0, transition]) {
|
|
|
|
|
|
|
+ rotate([0, 0, -22.5]) translate([0, 0, transition - 5.0]) {
|
|
|
minkowski() {
|
|
minkowski() {
|
|
|
- db25_plate(th = thin_mint);
|
|
|
|
|
|
|
+ db25_plate(th = thin_mint, border = expand - 2 * wall);
|
|
|
cylinder(r = minkr, h = thin_mint, $fn = facets);
|
|
cylinder(r = minkr, h = thin_mint, $fn = facets);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -770,17 +880,18 @@ module octa_mount_flare_dsub(height, lip, transition, radius, top_xradius, top_y
|
|
|
db25_plate(th = db25_t, border = expand);
|
|
db25_plate(th = db25_t, border = expand);
|
|
|
db25_cutout(th = db25_t);
|
|
db25_cutout(th = db25_t);
|
|
|
}
|
|
}
|
|
|
- // add guard wall around connector
|
|
|
|
|
- difference() {
|
|
|
|
|
|
|
+ // connector border
|
|
|
|
|
+ translate([0, 0, -5.0]) difference() {
|
|
|
|
|
+ overhang = 3.0;
|
|
|
minkowski() {
|
|
minkowski() {
|
|
|
- db25_plate(th = guard_height + db25_t, border = expand);
|
|
|
|
|
|
|
+ db25_plate(th = 5.0 + db25_t + overhang, border = expand);
|
|
|
cylinder(r = minkr, h = thin_mint, $fn = facets);
|
|
cylinder(r = minkr, h = thin_mint, $fn = facets);
|
|
|
}
|
|
}
|
|
|
- db25_plate(th = guard_height + db25_t + thin_mint, border = expand);
|
|
|
|
|
|
|
+ db25_plate(th = 5.0 + db25_t + overhang + thin_mint, border = expand);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
// for testing
|
|
// for testing
|
|
|
- *rotate([0, 0, -22.5]) translate([0, 0, 30]) db25_plate(th = 1.0);
|
|
|
|
|
|
|
+ *rotate([0, 0, -22.5]) translate([0, 0, 40]) db25_plate(th = 1.0, border = 1.0);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -877,22 +988,22 @@ module octa_capsule_array_mount(angles) {
|
|
|
|
|
|
|
|
// shock mount band that attaches snugly to microphone body
|
|
// shock mount band that attaches snugly to microphone body
|
|
|
|
|
|
|
|
-module octa_shock_mount_band(band_height, radius) {
|
|
|
|
|
|
|
+module octa_shock_mount_band(band_height, radius, delta_radius) {
|
|
|
rotate([0, 0, 22.5]) {
|
|
rotate([0, 0, 22.5]) {
|
|
|
// inner octagon, hugs the body
|
|
// inner octagon, hugs the body
|
|
|
difference() {
|
|
difference() {
|
|
|
rounded_octagon_wall(band_height, radius + 3 * wall, 2 * wall);
|
|
rounded_octagon_wall(band_height, radius + 3 * wall, 2 * wall);
|
|
|
- rotate([0, 0, -22.5 + 90]) translate([-40, -20, 0]) {
|
|
|
|
|
- cube([80, 40, band_height + thin_mint]);
|
|
|
|
|
|
|
+ rotate([0, 0, -22.5 + 90]) translate([-40, -(1.273 * radius)/2, 0]) {
|
|
|
|
|
+ cube([80, 1.273 * radius, band_height + thin_mint]);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
// the outer octagon
|
|
// the outer octagon
|
|
|
- rounded_octagon_wall(band_height, radius + 6, 2 * wall);
|
|
|
|
|
|
|
+ rounded_octagon_wall(band_height, radius + delta_radius, 2 * wall);
|
|
|
}
|
|
}
|
|
|
// joins inner and outer octagons
|
|
// joins inner and outer octagons
|
|
|
for (m = [0, 1]) mirror([m, 0, 0]) {
|
|
for (m = [0, 1]) mirror([m, 0, 0]) {
|
|
|
translate([radius, -10, 0]) {
|
|
translate([radius, -10, 0]) {
|
|
|
- cube([2, 20, band_height]);
|
|
|
|
|
|
|
+ cube([delta_radius - 4 * wall, 20, band_height]);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -900,12 +1011,14 @@ module octa_shock_mount_band(band_height, radius) {
|
|
|
// shock mount internal ring
|
|
// shock mount internal ring
|
|
|
|
|
|
|
|
module octa_shock_mount_internal_ring(height, radius, band_height, corner) {
|
|
module octa_shock_mount_internal_ring(height, radius, band_height, corner) {
|
|
|
|
|
+ echo(radius);
|
|
|
|
|
+ delta_radius = pcb_version == 2 ? 7.5 : 6;
|
|
|
// octagonal band
|
|
// octagonal band
|
|
|
- octa_shock_mount_band(band_height, radius);
|
|
|
|
|
|
|
+ octa_shock_mount_band(band_height, radius, delta_radius);
|
|
|
// 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]) {
|
|
|
for (m = [0, 1]) mirror([m, 0, 0]) {
|
|
for (m = [0, 1]) mirror([m, 0, 0]) {
|
|
|
- translate([radius + 2.25, radius/2 - 2, 0]) {
|
|
|
|
|
|
|
+ translate([radius + (pcb_version == 2 ? 3.5 : 2.25), radius/2 - 2, 0]) {
|
|
|
rotate([0, 0, 0]) {
|
|
rotate([0, 0, 0]) {
|
|
|
difference() {
|
|
difference() {
|
|
|
// columns
|
|
// columns
|
|
@@ -926,7 +1039,7 @@ module octa_shock_mount_internal_ring(height, radius, band_height, corner) {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
// walls between columns so that they cannot bend
|
|
// walls between columns so that they cannot bend
|
|
|
- rotate([0, 0, 45]) translate([radius + 2.25 * wall, -14, 0]) {
|
|
|
|
|
|
|
+ rotate([0, 0, 45]) translate([radius + (pcb_version == 2 ? 2.7 : 2.25) * wall, -14, 0]) {
|
|
|
cube([wall, 28, height]);
|
|
cube([wall, 28, height]);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -993,7 +1106,7 @@ module octa_quik_release_stand_mount(band_height, radius) {
|
|
|
vertical_offset = 18;
|
|
vertical_offset = 18;
|
|
|
mount_offset = 3.0;
|
|
mount_offset = 3.0;
|
|
|
// octagonal band
|
|
// octagonal band
|
|
|
- octa_shock_mount_band(band_height, radius);
|
|
|
|
|
|
|
+ octa_shock_mount_band(band_height, radius, pcb_version == 2 ? 7.5 : 6);
|
|
|
difference() {
|
|
difference() {
|
|
|
hull() {
|
|
hull() {
|
|
|
// attachment "plate"
|
|
// attachment "plate"
|
|
@@ -1018,6 +1131,52 @@ module octa_quik_release_stand_mount(band_height, radius) {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+// stand 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
|
|
|
|
|
+ // 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]);
|
|
|
|
|
+ }
|
|
|
|
|
+ // transition
|
|
|
|
|
+ grip_sep = 25.4 * 1.5 / 2;
|
|
|
|
|
+ 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, -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]);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ // grip pillar, plugs into slots
|
|
|
|
|
+ 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]);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
////
|
|
////
|
|
|
//// render all the different parts
|
|
//// render all the different parts
|
|
|
////
|
|
////
|
|
@@ -1041,7 +1200,7 @@ module render_octa_pcb_mount(z_offset, showint) {
|
|
|
octa_mount_body(octa_pcb_mount_height, octa_pcb_radius, mount_lip, mount_lip, 0);
|
|
octa_mount_body(octa_pcb_mount_height, octa_pcb_radius, mount_lip, mount_lip, 0);
|
|
|
// add ccrma logo
|
|
// add ccrma logo
|
|
|
rotate([0, 0, -90 + 22.5]) {
|
|
rotate([0, 0, -90 + 22.5]) {
|
|
|
- translate([0, -(octa_pcb_radius - 3.7), octa_pcb_mount_height / 2]) {
|
|
|
|
|
|
|
+ translate([0, -(octa_pcb_radius - (pcb_version == 2 ? 3.4 : 3.7)), octa_pcb_mount_height / 2]) {
|
|
|
rotate([90, 270, 0]) {
|
|
rotate([90, 270, 0]) {
|
|
|
logo_scale = 1 / (pcb_version == 2 ? 3.0 : 2.4);
|
|
logo_scale = 1 / (pcb_version == 2 ? 3.0 : 2.4);
|
|
|
scale([logo_scale, logo_scale, 1.0]) {
|
|
scale([logo_scale, logo_scale, 1.0]) {
|