Ver código fonte

recalculate parameters for the mount, add new version of mount that is parametric (almost working)

Fernando Pablo Lopez-Lezcano 11 anos atrás
pai
commit
107c86ff91
1 arquivos alterados com 72 adições e 95 exclusões
  1. 72 95
      first_order.scad

+ 72 - 95
first_order.scad

@@ -13,30 +13,28 @@
 // https://en.wikipedia.org/wiki/Tetrahedron
 // angle capsule to vertical = atan(sqrt(2)) = 54.7356103172
 
-
+////
 //// model parameters
 
-// dimensions for the EM182 electret microphone
+// dimensions of the EM182 electret microphone
 capsule_radius = 5;
 capsule_height = 4.5;
 
 // distance between face of capsule and center of array
-mic_radius = 11;
-
-// separation between capsules (right now only used in stalk)
-cap_sep = 7;
+mic_radius = 10;
 
-// dimensions of capsule holder legs
+// dimensions of capsule holder connection legs
 leg_width = 4;
 leg_thick = 2.5;
-leg_length = mic_radius - (capsule_radius / sqrt(2));
-slot_depth = leg_thick;
 
 // dimensions of microphone holder
-hold_radius = 4;
+mount_radius = 3;
 
-//// end of model parameters
+// height of mount
+mount_height = 4;
 
+//// end of model parameters
+////
 //// rendering control
 
 // what to render:
@@ -50,9 +48,10 @@ renderset = 0;
 // 0 -> original cylinder beams
 // 1 -> interlocking beams (out)
 // 2 -> interlocking beams (in)
-connect = 2;
+connect = 1;
 
 //// end of rendering control
+////
 
 // adjustment for the size of the capsule
 //   (measured inside diameter was around 7.5 to 8.2 instead of 10, capsule diameter was 9.99)
@@ -67,6 +66,26 @@ wall = 1;
 // number of facets for cylinders
 facets = 64;
 
+// width of the ridge that connects to the mount
+ridge_width = 2;
+ridge_length = 3;
+
+// the rest of the leg geometry
+tetra = atan(sqrt(2));
+leg_length = 
+	connect == 0 ?
+		mic_radius * sin(tetra) - capsule_radius * cos(tetra) :
+		connect == 1 ? 
+			(mic_radius - capsule_height + leg_thick) * sin(tetra) / sin(90 - tetra) - capsule_radius : 
+			mic_radius - (capsule_radius / sqrt(2));
+slot_depth = connect == 1 ?
+	leg_thick * 1.5 : leg_thick;
+
+// holder geometry
+capsule_sep_min = mic_radius * sin(tetra) - capsule_radius * cos(tetra);
+capsule_sep_max = capsule_sep_min + capsule_height * sin(tetra);
+capsule_bottom = mic_radius * cos(tetra) + capsule_radius * sin(tetra);
+
 ////////
 // microphone capsule holder
 
@@ -90,19 +109,21 @@ module capsule (azimuth, elevation, twist, mounts) {
 								// connect with cylindrical beams, very pretty
 								if (connect == 0) {
 									translate([capsule_radius - wall, 0, capsule_height - wall]) {
-										rotate(a = 145, v = [0, 1, 0]) {
-											cylinder(d = wall * 4, h = 6, center = false, $fn = facets);
+										rotate([0, 90 + tetra, 0]) {
+											cylinder(d = leg_width, h = leg_length - 0.3, center = false, $fn = facets);
 										}
 									}
 								}
-								// connect with flat square beams pointing out
+								// connect with horizontal legs
 								if (connect == 1) {
-									translate([capsule_radius - wall, 3 * wall / 4, wall]) {
-										rotate(a = 90, v = [0, 1, 0]) {
+									translate([capsule_radius + leg_length + fudge, - leg_width / 3, 0]) {
+										rotate([0, -90, 0]) {
 											difference() {
-												cube([wall * 2, wall * 4, capsule_height * 4], center = true);
-												translate([0, 0, wall * 8]) {
-													cube([wall * 2, wall * 1.5, capsule_height], center = true);
+												// thickness, width
+												cube([leg_thick, leg_width, leg_length]);
+												// cut slot in connector
+												translate([0, leg_width / 3 - (fit / 2), 0]) {
+													cube([leg_thick, leg_width / 3 + fit, slot_depth]);
 												}
 											}
 										}
@@ -128,9 +149,9 @@ module capsule (azimuth, elevation, twist, mounts) {
 							rotate(a = 120 + twist, v = [0, 0, 1]) {
 								translate([capsule_radius + fudge, - wall , 0]) {
 									difference() {
-										cube([wall * 3, wall * 2, capsule_height], center = false);
-										rotate([0, 55, 0]) {
-											cube([wall * 3, wall * 2, capsule_height], center = false);
+										cube([ridge_length, ridge_width, capsule_height], center = false);
+										rotate([0, tetra, 0]) {
+											cube([ridge_length, ridge_width, capsule_height], center = false);
 										}
 									}
 								}
@@ -142,90 +163,46 @@ module capsule (azimuth, elevation, twist, mounts) {
 						cylinder(r = capsule_radius + fudge, h = capsule_height + 2, $fn = facets);
 					}
 					// remove any extra connecting beam material from the face of the holder
-					//translate ([0, 0, capsule_height]) {
-					//	cylinder(r = capsule_radius + wall * 2, h = 2, $fn = facets);
-					//}
+					if (connect == 0) {
+						translate ([0, 0, capsule_height]) {
+							cylinder(r = capsule_radius + wall * 2, h = 2, $fn = facets);
+						}
+					}
 				}
 			}
 		}
 	}
 }
 
-module capsule_old (azimuth, elevation, micradius, cap_radius, cap_height, wall, twist, mounts) {
-	rotate([0, 0, azimuth]) {
-		rotate([0, (90 - elevation), 0]) {
-  			translate([0, 0, mic_radius - capsule_height]) {
-				// the capsule holder
-				difference () {
-					union () {
-						// main capsule holder
-						cylinder(r = capsule_radius + wall, h = capsule_height, $fn = facets);	
-						// the attachment point to the other capsules
-						for (rot = [-120 : 120 : mounts == 2 ? 0 : 120]) {
-							// connect with cylindrical beams, very pretty
-							rotate(a = rot + twist, v = [0, 0, 1]) {
-								if (connect == 0) {
-									translate([capsule_radius - wall, 0, capsule_height - wall]) {
-										rotate(a = 145, v = [0, 1, 0]) {
-											cylinder(d = wall * 4, h = 6, center = false, $fn = facets);
-										}
-									}
-								}
-								// connect with flat square beams pointing out
-								if (connect == 1) {
-									translate([capsule_radius - wall, 3 * wall / 4, wall]) {
-										rotate(a = 90, v = [0, 1, 0]) {
-											difference() {
-												cube([wall * 2, wall * 4, capsule_height * 4], center = true);
-												translate([0, 0, wall * 8]) {
-													cube([wall * 2, wall * 1.5, capsule_height], center = true);
-												}
-											}
-										}
-									}
-								}
-								// connect with flat square beams pointing in
-								if (connect == 2) {
-									translate([capsule_radius + fudge, - wall * 1.29 , - capsule_height]) {
-										difference() {
-											cube([wall * 3, wall * 4, capsule_height * 2], center = false);
-											translate([0, wall * 1.25, - wall * 2]) {
-												cube([wall * 3, wall * 1.5, capsule_height], center = false);
-											}
-										}
-									}
-								}
-							}
-						}
-						// add ridges for microphone mount
-						rotate(a = 120 + twist, v = [0, 0, 1]) {
-							translate([capsule_radius + fudge, - wall , 0]) {
-								difference() {
-									cube([wall * 3, wall * 2, capsule_height], center = false);
-									rotate([0, 55, 0]) {
-										cube([wall * 3, wall * 2, capsule_height], center = false);
-									}
-								}
-							}
+// microphone mount
+
+module mount (radius, length, wall, separation) {
+	translate([0, 0, -(separation + 1)]) {
+		difference() {
+			union() {
+				for (rot = [0 : 180 : 360]) {
+					rotate([0, 0, rot - 45]) {
+						translate([-(capsule_sep_max / 2), (ridge_width / 2) + fit, -mount_height]) {
+							cube([capsule_sep_max, ridge_width / 2, mount_height]);
 						}
 					}
-					// make the hole for the capsule
-					translate ([0, 0, -2]) {
-						cylinder(r = capsule_radius + fudge, h = capsule_height + 2, $fn = facets);
-					}
-					// remove any extra connecting beam material from the face of the holder
-					translate ([0, 0, capsule_height]) {
-						cylinder(r = capsule_radius + wall * 2, h = 2, $fn = facets);
-					}
+				}
+				translate([0, 0, -mount_height]) {
+					cylinder(r = mount_radius + wall, h = mount_height, $fn = facets);
+				}
+			}
+			translate([0, 0, -mount_height]) {
+				cylinder(r = mount_radius, h = mount_height, $fn = facets);			}
+			rotate([0, 0, -45]) {
+				translate([-(capsule_sep_max / 2), 0, -mount_height]) {
+					cube([capsule_sep_max, ridge_width / 2, mount_height]);
 				}
 			}
 		}
 	}
 }
 
-// microphone mount
-
-module mount (radius, length, wall, separation) {
+module mount_old (radius, length, wall, separation) {
 	// mounting ring
 	translate([0, 0, -separation]) {
 		difference() {
@@ -254,7 +231,7 @@ module mount (radius, length, wall, separation) {
 			for (rot = [0 : 180 : 360]) {
 				rotate([0, 0, rot]) {
 					translate([- radius, radius, 3.5]) {
-						rotate([55, 0, 45]) {
+						rotate([tetra, 0, 45]) {
 							cube([radius * 3, radius, radius * 3], center = true);
 						}
 					}
@@ -294,7 +271,7 @@ if (rendermic == 1) {
 	capsule(az3, el3, 60, 3);
 	capsule(az4, el4, 240, 2);
 	// the mount
-	//mount(hold_radius, capsule_height, 1, mic_radius);
+	mount(hold_radius, capsule_height, 1, capsule_bottom);
 }
 
 part_sep = capsule_radius * 2 * 3;