Преглед на файлове

h2n windscreen: many changes to the windscreen design, add slanted bottom beams and reinforce them so they print fine (still to be tested)

Fernando Pablo Lopez-Lezcano преди 9 години
родител
ревизия
eaf9a7a19a
променени са 1 файла, в които са добавени 94 реда и са изтрити 34 реда
  1. 94 34
      TinySpHEAR_mount_pcb.scad

+ 94 - 34
TinySpHEAR_mount_pcb.scad

@@ -181,13 +181,13 @@ ring_arm_gap = 20;
 
 windscreen_height = 60;
 windscreen_w = 4.0;
-beam_radius = 1.4;
+beam_radius = 1.3;
 windscreen_thread_height = 10.0;
-windscreen_thread_pitch = 1.5;
+windscreen_thread_pitch = 2.0;
 windscreen_thread_angle = 30;
-windscreen_thread_depth = cos(windscreen_thread_angle) * windscreen_thread_pitch * 5/8;
+windscreen_thread_depth = cos(windscreen_thread_angle) * windscreen_thread_pitch * 5/8 + 0.5;
 windscreen_thread_radius = box_corner_radius + windscreen_thread_depth;
-
+windscreen_thread_fit = 4 * fit;
 
 // all four printed circuit boards
 
@@ -427,7 +427,7 @@ module tetra_mount_array_stalk(height, radius) {
         cylinder(r = radius - wall, h = height, $fn = facets);
     }
     // add marker for "back of microphone" orientation
-    rotate([0, 0, 90]) {
+    *rotate([0, 0, 90]) {
         translate([0, radius - wall * 2 / 3, height - radius]) {
             difference() {
                 sphere(r = radius / 3, $fn = 32);
@@ -576,19 +576,18 @@ module tetra_capsule_array_mount(angles, mount_radius, mount_wall) {
 // windscreen frame
 
 module tetra_windscreen(radius, corner, height, beam_radius, twist, support) {
-    // hex helix windscreen frame
-    translate([0, 0, 0]) {
-        for (r = [0, 60, 120, 180, 240, 300]) for (t = [1, -1]) rotate([0, 0, r]) {
-            linear_extrude(height = height, center = false, convexity = 0, twist = twist * t, $fn = facets) {
-                translate([radius + beam_radius + windscreen_thread_depth, 0, 0]) {
-                    circle(r = beam_radius, $fn = facets);
-                }
+    // octagonal helix windscreen frame
+    for (r = [0, 45, 90, 135, 180, -135, -90, -45]) for (t = [1, -1]) rotate([0, 0, r]) {
+        linear_extrude(height = height, center = false, convexity = 0, twist = twist * t, $fn = facets) {
+            translate([radius + beam_radius + windscreen_thread_depth, 0, 0]) {
+                // square(size = beam_radius * 1.5, center = true);
+                circle(r = beam_radius, $fn = facets);
             }
         }
     }
     // connectors to top
     translate([0, 0, height]) {
-        for (r = [0, 60, 120, 180, 240, 300]) rotate([0, 0, r + twist]) {
+        for (r = [0, 45, 90, 135, 180, -135, -90, -45]) rotate([0, 0, r + twist]) {
             translate([radius + beam_radius + windscreen_thread_depth, 0, 0]) {
                 // cylinder(r = beam_radius * 2/3, h = 2.0, $fn = facets);
                 cylinder(r = beam_radius * 1, h = 2.0, $fn = facets);
@@ -607,19 +606,58 @@ module tetra_windscreen(radius, corner, height, beam_radius, twist, support) {
     }
 }
 
+// windscreen frame
+
+module tetra_windscreen_frame(sides, radius, height, beam_radius, twist) {
+    inc = 360/sides;
+    for (r = [0:inc:360]) for (t = [1, -1]) rotate([0, 0, r]) {
+        linear_extrude(height = height, center = false, convexity = 0, twist = twist * t, $fn = facets) {
+            translate([radius, 0, 0]) {
+                circle(r = beam_radius, $fn = facets);
+            }
+        }
+    }
+}
+
+// windscreen inset frame
+
+module tetra_windscreen_inset_frame(sides, radius, iradius, height, beam_radius, xscale = 1.0, yscale = 1.0) {
+    inc = 360/sides;
+    for (r = [0:inc:360]) for (t = [1, -1]) rotate([0, 0, r]) {
+        translate([0, 0, 0]) {
+            hull() {
+                translate([iradius, 0, 0]) {
+                    scale([xscale, yscale, 1.0]) cylinder(r = beam_radius, h = thin_mint, $fn = facets);
+                }
+                rotate([0, 0, inc/2 * t]) translate([radius, 0, height]) {
+                    cylinder(r = beam_radius, h = thin_mint, $fn = facets);
+                }
+            }
+        }
+    }
+}
+
 // windscreen frame dome
 
 module tetra_windscreen_dome(radius, beam_radius) {
-    for (r = [0, 60, 120]) rotate([0, 90, r + 30]) {
-        difference() {
-            rotate_extrude(convexity = 10, $fn = facets) {
-                translate([radius + beam_radius + windscreen_thread_depth, 0, 0]) {
-                    circle(r = beam_radius, $fn = facets);
+    rad = radius * cos(180/8);
+    difference() {
+        for (r = [0, 90]) rotate([0, 0, r]) {
+            for (t = [1, -1]) {
+                translate([(rad/2 - 1.73 * beam_radius) * t, rad, 0]) rotate([0, 90, 0]) {
+                    translate([0, -rad, 0]) {
+                        rotate_extrude(convexity = 10, $fn = facets) {
+                            translate([rad, 0, 0]) {
+                                circle(r = beam_radius, $fn = facets);
+                            }
+                        }
+                    }
                 }
             }
-            translate([0, -radius * 1.5, -1.4]) {
-                cube([radius * 3, radius * 3, beam_radius * 3]);
-            }
+        }
+        brad = rad + beam_radius + thin_mint;
+        translate([-brad, -brad, - 2 * brad]) {
+            cube([2 * brad, 2 * brad, 2 * brad]);
         }
     }
 }
@@ -627,16 +665,16 @@ module tetra_windscreen_dome(radius, beam_radius) {
 // windscreen mount to body with thread
 
 module tetra_windscreen_mount(height, radius, beam_radius) {
-    hexagon_radius = (radius + wall) * 2/3 * sqrt(3);
+    octagon_radius = (radius + 2 * beam_radius + wall) * cos(PI/8);
     difference() {
         cylinder(r = radius + 2 * beam_radius + windscreen_thread_depth, h = height, $fn = facets);
-        metric_thread(diameter = radius * 2 + fit, pitch = windscreen_thread_pitch, 
-                length = height, windscreen_thread_angle = 45, internal = true);
-        // make outside be a hexagon instead of a circle
-        rotate([0, 0, 30]) translate([0, 0, -thin_mint]) {
+        metric_thread(diameter = radius * 2 + windscreen_thread_fit, pitch = windscreen_thread_pitch,
+                length = height, angle = windscreen_thread_angle, internal = true);
+        // make outside be a octagon instead of a circle
+        rotate([0, 0, 22.5]) translate([0, 0, -thin_mint]) {
             difference() {
                 cylinder(r = 1.5 * radius, h = height + 2 * thin_mint);
-                cylinder(r = hexagon_radius, h = height + 2 * thin_mint, $fn = 6);
+                cylinder(r = octagon_radius, h = height + 2 * thin_mint, $fn = 8);
             }
         }
     }
@@ -646,6 +684,28 @@ module tetra_windscreen_mount(height, radius, beam_radius) {
     }
 }
 
+module tetra_windscreen_round_mount(height, radius, wall) {
+    difference() {
+        cylinder(r = radius + wall, h = height, $fn = facets);
+        metric_thread(diameter = radius * 2 + windscreen_thread_fit, pitch = windscreen_thread_pitch,
+                length = height, angle = windscreen_thread_angle, internal = true);
+    }
+    // add better attachment points for windscreen
+    difference() {
+        union() {
+            cylinder(r = radius + 2 * wall, h = height/2, $fn = facets);
+            translate([0, 0, height/2]) {
+                cylinder(r1 = radius + 2 * wall, r2 = radius + wall, h = height/2, $fn = facets);
+            }
+        }
+        cylinder(r = radius + wall, h = height, $fn = facets);
+    }
+    // marker for center of microphone
+    rotate([0, 0, 22.5]) translate([-(radius + wall), 0, 0]) {
+        cylinder(r = 1.0, h = height, $fn = facets);
+    }
+}
+
 // small tube to connect both helical windscreen mounts
 
 module tetra_windscreen_connector(beam_radius) {
@@ -764,18 +824,18 @@ module render_tetra_microphone_cutout(z_offset, spread) {
 
 module render_tetra_windscreen_top(z_offset) {
     translate([0, 0, z_offset]) {
-        rotate([0, 0, 30]) scale([1, 1, 6/7]) {
+        rotate([0, 0, 22.5]) scale([1, 1, 6/7]) {
             tetra_windscreen_dome(box_corner_radius + beam_radius/2, beam_radius);
         }
-        rotate([0, 180, 30]) {
-            tetra_windscreen(box_corner_radius + beam_radius/2, mount_corner, windscreen_height, beam_radius, 60);
+        rotate([0, 180, 22.5]) {
+            tetra_windscreen(box_corner_radius + beam_radius/2, mount_corner, windscreen_height, beam_radius, 45);
         }
     }
 }
 
 module render_tetra_windscreen_bottom(z_offset) {
-    translate([0, 0, z_offset]) rotate([0, 0, 30]) {
-        tetra_windscreen(box_corner_radius + beam_radius/2, mount_corner, windscreen_height, beam_radius, 60);
+    translate([0, 0, z_offset]) rotate([0, 0, 22.5]) {
+        tetra_windscreen(box_corner_radius + beam_radius/2, mount_corner, windscreen_height, beam_radius, 45);
     }
 }
 
@@ -787,8 +847,8 @@ module render_tetra_windscreen_mount(z_offset) {
 
 module render_tetra_windscreen_connectors(z_offset) {
     translate([0, 0, z_offset]) {
-        for (r = [0, 60, 120, 180, 240, 300]) rotate([0, 0, r + 30]) {
-            translate([box_corner_radius + beam_radius + beam_radius/2, 0, 0]) {
+        for (r = [0, 45, 90, 135, 180, -135, -90, -45]) rotate([0, 0, r + 22.5]) {
+            translate([box_corner_radius + beam_radius * 2 + 0.5, 0, 0]) {
                 tetra_windscreen_connector(beam_radius);
             }
         }