update some deisng parameters and add new cases
This commit is contained in:
+107
-13
@@ -19,13 +19,14 @@ show_references = true;
|
||||
/* [Stack] */
|
||||
top_profile = "generic"; // [generic,gps,oled128x64]
|
||||
wing_count = 1; // [1:1:8]
|
||||
wing_pitch = 11; // [7:0.1:16]
|
||||
wing_pitch = 12.25; // [7:0.1:16]
|
||||
stack_height_override = 0; // [0:0.1:100]
|
||||
generic_component_height = 3; // [0:0.1:30]
|
||||
generic_top_gap = 2; // [0.5:0.1:10]
|
||||
gps_antenna_height = 4;
|
||||
gps_antenna_height = 6;
|
||||
gps_top_gap = 5;
|
||||
oled_component_height = 2.4;
|
||||
oled_display_height = 1.5;
|
||||
oled_face_gap = 0.8;
|
||||
|
||||
/* [OLED controls] */
|
||||
@@ -77,15 +78,21 @@ corner_radius = 4;
|
||||
board_bottom_clearance = 5.4;
|
||||
board_side_clearance = 7;
|
||||
board_rear_clearance = 4;
|
||||
usb_board_wall_gap = 1.2;
|
||||
usb_board_wall_gap = 2;
|
||||
lid_lip_depth = 2.4;
|
||||
lid_lip_thickness = 1.2;
|
||||
fit_clearance = 0.35;
|
||||
cutout_min_web = 1.2;
|
||||
hole_compensation = 0.2;
|
||||
lid_screw_head_diameter = 5.2;
|
||||
lid_screw_head_height = 2.5;
|
||||
|
||||
/* [USB-C opening] */
|
||||
usb_opening_enabled = true;
|
||||
usb_guide_enabled = true;
|
||||
usb_connector_overhang = 2;
|
||||
usb_guide_wall_thickness = 1.2;
|
||||
usb_guide_end_gap = 1;
|
||||
usb_opening_width = 12.5;
|
||||
usb_opening_height = 7;
|
||||
usb_opening_radius = 1.5;
|
||||
@@ -131,6 +138,20 @@ board_origin_x = wall_thickness + usb_board_wall_gap;
|
||||
board_origin_y = wall_thickness + board_side_clearance;
|
||||
board_bottom_z = effective_floor + effective_board_clearance;
|
||||
board_top_z = board_bottom_z + board_thickness;
|
||||
usb_center_u = board_origin_y + usb_center_y;
|
||||
usb_center_z = board_top_z + 1.6 + usb_vertical_offset;
|
||||
usb_inner_width = usb_opening_width + hole_compensation;
|
||||
usb_inner_height = usb_opening_height + hole_compensation;
|
||||
usb_guide_length = max(
|
||||
0,
|
||||
usb_board_wall_gap - usb_connector_overhang - usb_guide_end_gap
|
||||
);
|
||||
usb_guide_active = usb_opening_enabled && usb_guide_enabled
|
||||
&& usb_guide_length > 0;
|
||||
usb_reserved_width = usb_inner_width
|
||||
+ (usb_guide_active ? 2 * usb_guide_wall_thickness : 0);
|
||||
usb_reserved_height = usb_inner_height
|
||||
+ (usb_guide_active ? 2 * usb_guide_wall_thickness : 0);
|
||||
|
||||
computed_top_pcb_z = board_top_z + wing_count * wing_pitch;
|
||||
top_pcb_z = stack_height_override > 0
|
||||
@@ -215,8 +236,43 @@ assert(m25_boss_diameter > m25_insert_hole_diameter + 2,
|
||||
assert(!tripod_insert_enabled
|
||||
|| tripod_boss_diameter > tripod_insert_hole_diameter + 3,
|
||||
"Tripod insert boss does not have enough radial material");
|
||||
assert(usb_opening_enabled || !usb_guide_enabled,
|
||||
"USB guide requires the USB opening");
|
||||
|
||||
function clamp(v, lo, hi) = min(max(v, lo), hi);
|
||||
function cutout_height(entry) = len(entry) > 5 ? entry[5] : entry[4];
|
||||
function cutouts_separated(first, second, web) =
|
||||
abs(first[2] - second[2])
|
||||
>= (first[4] + second[4]) / 2 + web
|
||||
|| abs(first[3] - second[3])
|
||||
>= (cutout_height(first) + cutout_height(second)) / 2 + web;
|
||||
function cutout_clear_of_usb(entry, web) =
|
||||
abs(entry[2] - usb_center_u)
|
||||
>= (entry[4] + usb_reserved_width) / 2 + web
|
||||
|| abs(entry[3] - usb_center_z)
|
||||
>= (cutout_height(entry) + usb_reserved_height) / 2 + web;
|
||||
|
||||
module validate_cutout_spacing() {
|
||||
if (len(extra_cutouts) > 1)
|
||||
for (first = [0 : len(extra_cutouts) - 2],
|
||||
second = [first + 1 : len(extra_cutouts) - 1])
|
||||
if (extra_cutouts[first][0] == extra_cutouts[second][0])
|
||||
assert(
|
||||
cutouts_separated(
|
||||
extra_cutouts[first],
|
||||
extra_cutouts[second],
|
||||
cutout_min_web
|
||||
),
|
||||
"Custom cutouts are too close on the same wall"
|
||||
);
|
||||
if (usb_opening_enabled)
|
||||
for (entry = extra_cutouts)
|
||||
if (entry[0] == "front")
|
||||
assert(
|
||||
cutout_clear_of_usb(entry, cutout_min_web),
|
||||
"Front cutout is too close to the USB opening or guide"
|
||||
);
|
||||
}
|
||||
|
||||
module rounded_rect_2d(size, radius) {
|
||||
r = clamp(radius, 0.01, min(size[0], size[1]) / 2 - 0.01);
|
||||
@@ -300,6 +356,40 @@ module face_circle_cutout(face, u, z, diameter) {
|
||||
rotate([-90, 0, 0]) cylinder(h = depth, d = diameter);
|
||||
}
|
||||
|
||||
module x_rounded_prism(x, length, u, z, width, height, radius) {
|
||||
r = clamp(radius, 0.01, min(width, height) / 2 - 0.01);
|
||||
hull()
|
||||
for (yy = [u - width / 2 + r, u + width / 2 - r],
|
||||
zz = [z - height / 2 + r, z + height / 2 - r])
|
||||
translate([x, yy, zz])
|
||||
rotate([0, 90, 0]) cylinder(h = length, r = r);
|
||||
}
|
||||
|
||||
module usb_guide_shell() {
|
||||
outer_width = usb_inner_width + 2 * usb_guide_wall_thickness;
|
||||
outer_height = usb_inner_height + 2 * usb_guide_wall_thickness;
|
||||
difference() {
|
||||
x_rounded_prism(
|
||||
wall_thickness - eps,
|
||||
usb_guide_length + 2 * eps,
|
||||
usb_center_u,
|
||||
usb_center_z,
|
||||
outer_width,
|
||||
outer_height,
|
||||
usb_opening_radius + usb_guide_wall_thickness
|
||||
);
|
||||
x_rounded_prism(
|
||||
wall_thickness - 2 * eps,
|
||||
usb_guide_length + 4 * eps,
|
||||
usb_center_u,
|
||||
usb_center_z,
|
||||
usb_inner_width,
|
||||
usb_inner_height,
|
||||
usb_opening_radius
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
module custom_wall_cutout(entry) {
|
||||
face = entry[0];
|
||||
shape = entry[1];
|
||||
@@ -454,6 +544,8 @@ module body_positive() {
|
||||
if (tripod_insert_enabled)
|
||||
translate([case_length / 2, case_width / 2, 0])
|
||||
cylinder(h = effective_floor, d = tripod_boss_diameter);
|
||||
if (usb_guide_active)
|
||||
usb_guide_shell();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -477,15 +569,15 @@ module body_cutouts() {
|
||||
);
|
||||
|
||||
// USB-C cable opening. Connector center is from the official ESP32 V2 PCB.
|
||||
usb_center_z = board_top_z + 1.6 + usb_vertical_offset;
|
||||
face_rounded_cutout(
|
||||
"front",
|
||||
board_origin_y + usb_center_y,
|
||||
usb_center_z,
|
||||
usb_opening_width + hole_compensation,
|
||||
usb_opening_height + hole_compensation,
|
||||
usb_opening_radius
|
||||
);
|
||||
if (usb_opening_enabled)
|
||||
face_rounded_cutout(
|
||||
"front",
|
||||
usb_center_u,
|
||||
usb_center_z,
|
||||
usb_inner_width,
|
||||
usb_inner_height,
|
||||
usb_opening_radius
|
||||
);
|
||||
|
||||
if (battery_enabled) {
|
||||
face_circle_cutout(
|
||||
@@ -708,7 +800,7 @@ module reference_top_feature() {
|
||||
cube([
|
||||
oled_visible_size[0],
|
||||
oled_visible_size[1],
|
||||
oled_component_height
|
||||
oled_display_height
|
||||
]);
|
||||
color([0.6, 0.6, 0.6, 0.9])
|
||||
for (xy = [
|
||||
@@ -853,6 +945,8 @@ module fit_coupon() {
|
||||
}
|
||||
}
|
||||
|
||||
validate_cutout_spacing();
|
||||
|
||||
if (part == "assembly")
|
||||
assembly();
|
||||
else if (part == "body")
|
||||
|
||||
Reference in New Issue
Block a user