|
|
@@ -103,6 +103,13 @@ h2n_mount_fit = 0.04;
|
|
|
h2n_bridge_base_height = 7.0;
|
|
|
h2n_bridge_stalk_height = 45.0;
|
|
|
|
|
|
+// bridge funnel and stalk dimensions
|
|
|
+h2n_bridge_array_height = 51;
|
|
|
+h2n_bridge_cylinder_height = 30;
|
|
|
+
|
|
|
+// thread pedestal
|
|
|
+h2n_thread_pedestal = 0.5;
|
|
|
+
|
|
|
// bridge base dimensions
|
|
|
h2n_bridge_circle = 24.00;
|
|
|
h2n_bridge_band_w = 13.25;
|
|
|
@@ -137,7 +144,7 @@ module h2n_ring(width, depth, radius, height, tilt, slot_w, slot_d, band_wall, w
|
|
|
conical_rounded_box(height, width / 2 + band_wall, depth / 2 + band_wall, radius - thin_mint, band_wall, height * tan(tilt));
|
|
|
for (m = [0, 1]) mirror([m, 0, 0]) {
|
|
|
translate([-(width / 2 + col_rad - col_wall), 0, 0]) {
|
|
|
- tilted_cylinder(col_rad, height, height * tan(tilt));
|
|
|
+ tilted_cylinder(col_rad, height + thin_mint, height * tan(tilt));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -152,9 +159,9 @@ module h2n_ring(width, depth, radius, height, tilt, slot_w, slot_d, band_wall, w
|
|
|
}
|
|
|
}
|
|
|
// add TinySpHEAR "branding"
|
|
|
- translate([0, -(h2n_depth_m / 2 + band_wall), h2n_band_height / 2]) scale(0.5) {
|
|
|
+ translate([0, -(h2n_depth_m / 2 + band_wall - 0.55 * wall), h2n_band_height / 2]) scale(0.5) {
|
|
|
rotate([90 - h2n_col_tilt, 0, 0]) {
|
|
|
- linear_extrude(height = 0.2, center = "true") {
|
|
|
+ linear_extrude(height = wall, center = "true") {
|
|
|
text("TinySpHEAR", size = 8.0, spacing = 1.1, halign = "center", valign = "center", font = "Liberation Sans");
|
|
|
}
|
|
|
}
|
|
|
@@ -257,30 +264,52 @@ module h2n_column_core(height, ring_height, tilt, transition, radius, col_wall,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-module h2n_column(height, ring_height, tilt, transition, radius, col_wall, wall) {
|
|
|
- // side tubes for cables
|
|
|
- difference() {
|
|
|
- h2n_column_core(height, ring_height, tilt, transition, radius, col_wall, wall, 0);
|
|
|
- // hollow out the cylinder
|
|
|
- tilted_cylinder(radius, height, height * tan(tilt));
|
|
|
- // this fine adjustment determines how much the side walls "hug" the H2N
|
|
|
- width_fit = 0.2;
|
|
|
- translate([radius + 2 * wall - width_fit, 0, 0]) {
|
|
|
- tilted_half_rounded_box(height + thin_mint, 3.8, h2n_side_band_w / 2, 1.5, 4 * wall, height * tan(tilt));
|
|
|
- }
|
|
|
- // trim side of tubes with a vertical plane
|
|
|
- translate([-(radius * 2 + col_wall) + col_wall / 2, -(radius + col_wall), 0]) {
|
|
|
- cube([col_wall * 2, (radius + col_wall) * 2, 30]);
|
|
|
- }
|
|
|
- }
|
|
|
- // add a thicker wall at the bottom of the side trim
|
|
|
+module h2n_column(height, ring_height, tilt, transition, radius, col_wall, wall, screw_mount) {
|
|
|
difference() {
|
|
|
- translate([-(radius), -(radius + col_wall), 0]) {
|
|
|
- cube([wall, (radius + col_wall) * 2, height]);
|
|
|
+ union() {
|
|
|
+ // side tubes for cables
|
|
|
+ difference() {
|
|
|
+ h2n_column_core(height, ring_height, tilt, transition, radius, col_wall, wall, 0);
|
|
|
+ // hollow out the cylinder
|
|
|
+ translate([0, 0, screw_mount]) tilted_cylinder(radius, height, height * tan(tilt));
|
|
|
+ // and shave the inside for the screw mount side
|
|
|
+ if (screw_mount > 0) {
|
|
|
+ translate([0, -radius, 0]) {
|
|
|
+ tilted_cube(wall * 2, radius * 2, height, height * tan(tilt));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // this fine adjustment determines how much the side walls "hug" the H2N
|
|
|
+ width_fit = 0.2;
|
|
|
+ translate([radius + 2 * wall - width_fit, 0, 0]) {
|
|
|
+ tilted_half_rounded_box(height + thin_mint, 3.8, h2n_side_band_w / 2, 1.5, 4 * wall, height * tan(tilt));
|
|
|
+ }
|
|
|
+ // trim side of tubes with a vertical plane
|
|
|
+ translate([-(radius * 2 + col_wall) + col_wall / 2, -(radius + col_wall), 0]) {
|
|
|
+ cube([col_wall * 2, (radius + col_wall) * 2, 30]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // add a thicker wall at the bottom of the side trim
|
|
|
+ difference() {
|
|
|
+ translate([-(radius), -(radius + col_wall), 0]) {
|
|
|
+ cube([wall, (radius + col_wall) * 2, height]);
|
|
|
+ }
|
|
|
+ difference() {
|
|
|
+ tilted_cylinder(radius * 4, height, height * tan(tilt));
|
|
|
+ tilted_cylinder(radius + col_wall, height, height * tan(tilt));
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
- difference() {
|
|
|
- tilted_cylinder(radius * 4, height, height * tan(tilt));
|
|
|
- tilted_cylinder(radius + col_wall, height, height * tan(tilt));
|
|
|
+ // holes for screws that attach to the columns
|
|
|
+ // Number 0 Size, 1/4" Long = thread diameter: 1.6mm, head diameter: 2.75
|
|
|
+ if (screw_mount > 0) {
|
|
|
+ translate([-2 * radius, 0, screw_mount * 3/4]) {
|
|
|
+ rotate([0, 90, 0]) {
|
|
|
+ cylinder(r = (1.6 + 0.1)/2, h = 4 * radius, $fn = facets);
|
|
|
+ }
|
|
|
+ rotate([0, 90, 0]) {
|
|
|
+ cylinder(r = 3.25/2, h = 1.75 * radius, $fn = facets);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
// connector to bridge
|
|
|
@@ -326,8 +355,9 @@ module h2n_column(height, ring_height, tilt, transition, radius, col_wall, wall)
|
|
|
|
|
|
module h2n_columns(width, height, ring_height, tilt, transition, radius, col_wall, wall) {
|
|
|
for (m = [0, 1]) mirror([m, 0, 0]) {
|
|
|
+ screw_mount = height * 3/4 * (1 - m);
|
|
|
translate([-(width / 2 + col_wall - wall / 2), 0, 0]) {
|
|
|
- h2n_column(height, ring_height, tilt, transition, radius, col_wall, wall);
|
|
|
+ h2n_column(height, ring_height, tilt, transition, radius, col_wall, wall, screw_mount);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -597,7 +627,6 @@ module h2n_bridge_core_no_ws(width, base_height, radius, col_wall, wall, offset)
|
|
|
}
|
|
|
|
|
|
module h2n_bridge_core(width, base_height, radius, col_wall, wall, thread_radius, thread_height, offset) {
|
|
|
- pedestal = 0.5;
|
|
|
difference() {
|
|
|
hull() {
|
|
|
// top of bridge
|
|
|
@@ -631,14 +660,14 @@ module h2n_bridge_core(width, base_height, radius, col_wall, wall, thread_radius
|
|
|
}
|
|
|
if (thread_radius > 0 && offset == 0) {
|
|
|
// pedestal for thread
|
|
|
- translate([0, 0, base_height + radius + col_wall + offset + pedestal]) {
|
|
|
+ translate([0, 0, base_height + radius + col_wall + offset + h2n_thread_pedestal]) {
|
|
|
difference() {
|
|
|
cylinder(r = thread_radius + windscreen_thread_depth + offset, h = wall, $fn = facets);
|
|
|
cylinder(r = thread_radius - windscreen_thread_depth - wall, h = wall, $fn = facets);
|
|
|
}
|
|
|
}
|
|
|
// thread
|
|
|
- translate([0, 0, base_height + radius + col_wall + wall + pedestal]) {
|
|
|
+ translate([0, 0, base_height + radius + col_wall + wall + h2n_thread_pedestal]) {
|
|
|
difference() {
|
|
|
metric_thread(diameter = thread_radius * 2, pitch = windscreen_thread_pitch,
|
|
|
length = thread_height, angle = windscreen_thread_angle, internal = false);
|
|
|
@@ -710,6 +739,27 @@ module h2n_bridge_no_ws(width, base_height, stalk_height, radius, col_wall, stal
|
|
|
// bridge with thread for windscreen mount
|
|
|
|
|
|
module h2n_bridge(width, base_height, stalk_height, radius, col_wall, stalk_wall, wall, thread_radius, thread_height) {
|
|
|
+ translate([0, 0, base_height + radius + col_wall + thread_height + h2n_thread_pedestal]) {
|
|
|
+ // capsule array mount
|
|
|
+ rotate([0, 0, -90]) translate([0, 0, h2n_bridge_array_height]) {
|
|
|
+ tetra_capsule_array_mount([-45, 135], mount_radius, wall);
|
|
|
+ }
|
|
|
+ // cylindrical stalk
|
|
|
+ translate([0, 0, h2n_bridge_array_height - h2n_bridge_cylinder_height]) {
|
|
|
+ difference() {
|
|
|
+ cylinder(r = mount_radius + wall, h = h2n_bridge_cylinder_height, $fn = facets);
|
|
|
+ cylinder(r = mount_radius, h = h2n_bridge_cylinder_height, $fn = facets);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // conical funnel to bridge
|
|
|
+ fun_height = h2n_bridge_array_height - h2n_bridge_cylinder_height;
|
|
|
+ difference() {
|
|
|
+ cylinder(r1 = windscreen_thread_radius - windscreen_thread_depth, r2 = mount_radius + wall,
|
|
|
+ h = fun_height, $fn = facets);
|
|
|
+ cylinder(r1 = windscreen_thread_radius - windscreen_thread_depth - wall, r2 = mount_radius,
|
|
|
+ h = fun_height, $fn = facets);
|
|
|
+ }
|
|
|
+ }
|
|
|
difference() {
|
|
|
union() {
|
|
|
h2n_bridge_core(width, base_height, radius, col_wall, wall, thread_radius, thread_height, 0);
|