update socket

This commit is contained in:
2026-08-27 07:31:30 -07:00
parent e0296ffd26
commit a6e7f27bee
16 changed files with 29802 additions and 29756 deletions
+32 -26
View File
@@ -11,17 +11,18 @@ inlays printed against a textured build plate.
## Coordinate system and principal dimensions ## Coordinate system and principal dimensions
- Base: 203.2 x 248 x 15 mm, with 12.7 mm corner radii. - Base: 203.2 x 248 x 15 mm, with 12.7 mm corner radii.
- The grid origin is Y=0 and positive Y runs toward the operator. The socket's - The grid origin is Y=0 and positive Y runs toward the operator. The socket
straight front reference face is Y=12.7 mm (0.5 inch), halfway between the flange's straight front reference face is Y=12.7 mm (0.5 inch), halfway
origin and the first insert row. between the origin and the first insert row. The extrusion's front face is
aligned to Y=0, so either reference can be used for direct measurement.
- The 8 x 8 insert array has 25.4 mm spacing. Its rows are Y=25.4 through - The 8 x 8 insert array has 25.4 mm spacing. Its rows are Y=25.4 through
Y=203.2 mm relative to the socket datum. Y=203.2 mm relative to the socket datum.
- A blue Y=0 datum line continues beneath the socket, leaving aligned visible - A blue Y=0 datum line continues beneath the socket, leaving aligned visible
segments on both sides. segments on both sides.
- The removable socket captures 50 mm of a nominal 20 x 20 mm extrusion. - The removable socket captures 50 mm of a nominal 20 x 20 mm extrusion.
- Its 110 x 38.7 x 10 mm flange reaches from the rear plate edge to the - Its 110 x 38.7 x 10 mm flange reaches from the rear plate edge to the
half-inch reference face. The column is shifted forward to improve the half-inch reference face. The collar is near the flange center, with tapered
overturning load path and reduce the camera arm's required overhang. side gussets that retain the original broad flange footprint.
- The two outside inserts in the front grid row also mount the front leveling - The two outside inserts in the front grid row also mount the front leveling
feet. They cannot accept top-side accessories while the feet are installed. feet. They cannot accept top-side accessories while the feet are installed.
@@ -84,22 +85,25 @@ gauge. From left to right, the insert pilots are 7.70, 7.85, 8.00, 8.15, and
four-wall collar with the production 6 mm side walls, 2.7 mm end walls, and four-wall collar with the production 6 mm side walls, 2.7 mm end walls, and
full 50 mm engagement depth. External gussets and M5 holes are omitted because full 50 mm engagement depth. External gussets and M5 holes are omitted because
they do not define the rail-fit surfaces. The coupon also they do not define the rail-fit surfaces. The coupon also
contains the production-width blue line and a 6 mm-deep production-size contains the production-width blue line and a 6 mm-deep 52.5 x 22.5 mm
52.5 x 22.5 mm through-slot. The separate 52 x 22 x 6 mm tongue prints in the through-slot. The separate 52 x 22 x 6 mm tongue is an XY fit gauge for the
same orientation as the socket tongue and has a support-free stop shoulder and production interface; its shorter depth keeps the calibration print compact.
vertical grip for insertion and removal. Verify that the slot is visibly open, It has a support-free stop shoulder and vertical grip for insertion and
with no first-layer membrane, before testing the fit. removal. Verify that the slot is visibly open, with no first-layer membrane,
before testing the fit.
The production model defaults to the physically calibrated 8.10 mm insert The production model defaults to the physically calibrated 8.10 mm insert
pilot and 20.1 mm rail cavity. These values were selected from an ASA coupon: pilot and 20.1 mm rail cavity. These values were selected from an ASA coupon:
the 20.1 mm collar accepted the fully cooled rail through all 50 mm by hand the 20.1 mm collar accepted the fully cooled rail through all 50 mm by hand
without objectionable play, and the 8.10 mm pilot provided the preferred without objectionable play, and the 8.10 mm pilot provided the preferred
insert fit. The rectangular tongue and through-slot also passed the physical insert fit. The rectangular tongue and through-slot also passed the physical
fit test, so their dimensions remain unchanged. For another printer, material, XY fit test. The production tongue retains those dimensions and extends 14.8
or process, select the smallest rail gauge that fits without forcing and use mm into the 15 mm base, leaving 0.2 mm underside clearance. For another
the insert pilot that gives the required installation grip. Change printer, material, or process, select the smallest rail gauge that fits without
`insert_pilot_diameter` or `rail_clearance` at the top of `copy_stand.scad`, forcing and use the insert pilot that gives the required installation grip.
then rebuild. The 8.30 mm coupon remains a diagnostic oversize option; Change `insert_pilot_diameter` or `rail_clearance` at the top of
`copy_stand.scad`, then rebuild. The 8.30 mm coupon remains a diagnostic
oversize option;
McMaster specifies 8.026 mm as the maximum nominal hole diameter, while this McMaster specifies 8.026 mm as the maximum nominal hole diameter, while this
design's 8.10 mm production value reflects the tested print process. design's 8.10 mm production value reflects the tested print process.
@@ -130,11 +134,11 @@ provide the base structure; sparse slicer infill is not relied on there.
flush with its counterbore; do not pull it toward the textured top surface. flush with its counterbore; do not pull it toward the textured top surface.
2. Thread the leveling feet through their locking nuts and into the two rear 2. Thread the leveling feet through their locking nuts and into the two rear
foot inserts and two outer inserts of the front grid row. foot inserts and two outer inserts of the front grid row.
3. Lower the socket's 52 x 22 x 6 mm tongue into the base's through-slot, then 3. Lower the socket's 52 x 22 x 14.8 mm tongue into the base's through-slot,
fasten the flange with four 0.7-inch OD washers and four 1/4-20 x 1-inch then fasten the flange with four 0.7-inch OD washers and four 1/4-20 x
screws. The screws provide clamping and vertical retention; the tongue 1-inch screws. The screws provide clamping and vertical retention; the
provides repeatable X/Y location and carries lateral shear. With a washer tongue provides repeatable X/Y location and carries lateral shear. With a
thickness `t` in millimeters, nominal insert engagement is washer thickness `t` in millimeters, nominal insert engagement is
`11.275 - t` mm, limited by the insert's 9.525 mm threaded length. `11.275 - t` mm, limited by the insert's 9.525 mm threaded length.
4. Preload two T-nuts in each side slot of the extrusion. Lower the extrusion 4. Preload two T-nuts in each side slot of the extrusion. Lower the extrusion
to the socket floor and fasten it through the four M5 clamp holes. to the socket floor and fasten it through the four M5 clamp holes.
@@ -145,12 +149,14 @@ The Lobster/CS-Lite locating fixture, Arca rail, camera carriage, and camera
alignment accessories are deliberately deferred. They can attach to the grid alignment accessories are deliberately deferred. They can attach to the grid
without changing this base. without changing this base.
The socket's broad side buttresses stop before the four base screws. Vertical The socket's tapered side buttresses follow the collar at their upper edges
19 mm washer and tool envelopes preserve access above those screws, and 14 mm while retaining the original broad footprint on the flange. They stop before
horizontal tunnels provide driver access to the M5 rail clamps without the four base screws. Vertical 19 mm washer and tool envelopes preserve access
sacrificing the collar wall around the T-slot extrusion. The 19 mm fore/aft above those screws, and 14 mm horizontal tunnels provide driver access to the
screw-row spacing and shallower side buttresses improve overturning and M5 rail clamps without sacrificing the collar wall around the T-slot
torsional resistance compared with the compact first revision. extrusion. The 19 mm fore/aft screw-row spacing and broad flange attachment
improve overturning and torsional resistance compared with the compact first
revision.
Before mounting a camera, proof-test the assembled stand with a dummy load at Before mounting a camera, proof-test the assembled stand with a dummy load at
the maximum working overhang. Under the normal payload, target less than 1 mm the maximum working overhang. Under the normal payload, target less than 1 mm
+33 -21
View File
@@ -1,8 +1,8 @@
/* /*
* Parametric copy-stand base for a Bambu Lab X2D. * Parametric copy-stand base for a Bambu Lab X2D.
* Service coordinates: X left-to-right, Y rear-to-front, Z bottom-to-top. * Service coordinates: X left-to-right, Y rear-to-front, Z bottom-to-top.
* The grid origin is at plate Y=datum_y. The socket's straight front edge is * The grid origin is at plate Y=datum_y. The socket flange's straight front
* 0.5 inch forward of that origin and remains a convenient reference face. * edge is 0.5 inch forward of that origin, while the rail front face is at 0.
*/ */
/* [Output] */ /* [Output] */
@@ -50,7 +50,10 @@ socket_capture = 50;
socket_front_y = grid_pitch / 2; socket_front_y = grid_pitch / 2;
socket_rear_y = -datum_y; socket_rear_y = -datum_y;
socket_flange_size = [110, socket_front_y - socket_rear_y, 10]; socket_flange_size = [110, socket_front_y - socket_rear_y, 10];
socket_key_size = [52, 22, 6]; socket_rail_front_y = 0;
socket_key_axis_y = -0.05; // Fixed to the existing base locator slot.
socket_key_bottom_clearance = 0.2;
socket_key_size = [52, 22, plate_height - socket_key_bottom_clearance];
socket_key_clearance = 0.25; socket_key_clearance = 0.25;
socket_side_wall = 6; socket_side_wall = 6;
socket_end_wall = 2.7; socket_end_wall = 2.7;
@@ -88,7 +91,10 @@ assert(socket_gusset_outer_x
< socket_mount_x - socket_mount_tool_diameter / 2, < socket_mount_x - socket_mount_tool_diameter / 2,
"Socket gusset enters a flange-screw tool-access envelope"); "Socket gusset enters a flange-screw tool-access envelope");
assert(socket_front_y == grid_pitch / 2, assert(socket_front_y == grid_pitch / 2,
"Socket reference face must remain at the half-inch grid coordinate"); "Socket flange reference face must remain at the half-inch grid coordinate");
assert(socket_rail_axis_y() + (rail_size + 2 * rail_clearance) / 2
== socket_rail_front_y,
"Rail front face must remain at the grid origin");
assert(socket_rear_y == -datum_y, assert(socket_rear_y == -datum_y,
"Socket flange must reach the rear edge of the base"); "Socket flange must reach the rear edge of the base");
assert(socket_mount_x + socket_mount_tool_diameter / 2 assert(socket_mount_x + socket_mount_tool_diameter / 2
@@ -99,7 +105,7 @@ assert(socket_mount_ys[0] - socket_mount_tool_diameter / 2
&& socket_mount_ys[len(socket_mount_ys) - 1] && socket_mount_ys[len(socket_mount_ys) - 1]
+ socket_mount_tool_diameter / 2 <= socket_front_y, + socket_mount_tool_diameter / 2 <= socket_front_y,
"Socket washer envelope exceeds the flange depth"); "Socket washer envelope exceeds the flange depth");
assert(socket_rail_axis_y() + socket_key_size[1] / 2 assert(socket_key_axis_y + socket_key_size[1] / 2
+ socket_key_clearance + socket_key_clearance
< grid_pitch - insert_boss_diameter / 2, < grid_pitch - insert_boss_diameter / 2,
"Socket key slot overlaps the first grid-row insert bosses"); "Socket key slot overlaps the first grid-row insert bosses");
@@ -107,8 +113,8 @@ assert(socket_mount_ys[len(socket_mount_ys) - 1]
+ insert_boss_diameter / 2 + insert_boss_diameter / 2
< grid_pitch - insert_boss_diameter / 2, < grid_pitch - insert_boss_diameter / 2,
"Socket mounting bosses overlap the first grid-row bosses"); "Socket mounting bosses overlap the first grid-row bosses");
assert(socket_key_size[2] < plate_height, assert(socket_key_size[2] == plate_height - socket_key_bottom_clearance,
"Socket tongue must stop above the base underside"); "Socket tongue must leave 0.2 mm clearance above the base underside");
grid_xs = [for (i = [0 : grid_columns - 1]) grid_xs = [for (i = [0 : grid_columns - 1])
plate_width / 2 + (i - (grid_columns - 1) / 2) * grid_pitch]; plate_width / 2 + (i - (grid_columns - 1) / 2) * grid_pitch];
@@ -225,7 +231,7 @@ module insert_pattern_2d(diameter) {
} }
module socket_key_2d(clearance = 0) { module socket_key_2d(clearance = 0) {
translate([plate_width / 2, datum_y + socket_rail_axis_y()]) translate([plate_width / 2, datum_y + socket_key_axis_y])
rounded_rect_2d( rounded_rect_2d(
[socket_key_size[0] + 2 * clearance, [socket_key_size[0] + 2 * clearance,
socket_key_size[1] + 2 * clearance], socket_key_size[1] + 2 * clearance],
@@ -326,26 +332,30 @@ module socket_flange_2d() {
function socket_outer_y() = rail_size + 2 * rail_clearance function socket_outer_y() = rail_size + 2 * rail_clearance
+ 2 * socket_end_wall; + 2 * socket_end_wall;
function socket_rail_axis_y() = socket_front_y - socket_outer_y() / 2; function socket_rail_axis_y() = socket_rail_front_y
- (rail_size + 2 * rail_clearance) / 2;
module socket_key_local_2d() { module socket_key_local_2d() {
translate([0, socket_rail_axis_y()]) translate([0, socket_key_axis_y])
rounded_rect_2d([socket_key_size[0], socket_key_size[1]], 2); rounded_rect_2d([socket_key_size[0], socket_key_size[1]], 2);
} }
module socket_gusset(side = 1) { module socket_gusset(side = 1) {
cavity = rail_size + 2 * rail_clearance; cavity = rail_size + 2 * rail_clearance;
collar_half_x = (cavity + 2 * socket_side_wall) / 2; collar_half_x = (cavity + 2 * socket_side_wall) / 2;
collar_y_min = socket_rail_axis_y() - socket_outer_y() / 2;
collar_y_depth = socket_outer_y();
near_x = side > 0 ? collar_half_x : -collar_half_x - 2; near_x = side > 0 ? collar_half_x : -collar_half_x - 2;
outer_x = side > 0 ? socket_gusset_outer_x - 2 outer_x = side > 0 ? socket_gusset_outer_x - 2
: -socket_gusset_outer_x; : -socket_gusset_outer_x;
gusset_depth = socket_gusset_y_span[1] - socket_gusset_y_span[0]; gusset_depth = socket_gusset_y_span[1] - socket_gusset_y_span[0];
// Broad buttress with a short outer reach. Tool-access bores below remove // The full-height attachment follows the collar's front and rear edges,
// any material that could obstruct either family of fasteners. // while the low outer footprint retains the proven flange support area.
// Tool-access bores below remove material around both fastener families.
hull() { hull() {
translate([near_x, socket_gusset_y_span[0], socket_flange_size[2]]) translate([near_x, collar_y_min, socket_flange_size[2]])
cube([2, gusset_depth, socket_gusset_height]); cube([2, collar_y_depth, socket_gusset_height]);
translate([outer_x, socket_gusset_y_span[0], socket_flange_size[2]]) translate([outer_x, socket_gusset_y_span[0], socket_flange_size[2]])
cube([2, gusset_depth, 2]); cube([2, gusset_depth, 2]);
} }
@@ -360,7 +370,7 @@ module socket_positive() {
linear_extrude(height = socket_key_size[2] + eps) linear_extrude(height = socket_key_size[2] + eps)
socket_key_local_2d(); socket_key_local_2d();
linear_extrude(height = socket_flange_size[2]) socket_flange_2d(); linear_extrude(height = socket_flange_size[2]) socket_flange_2d();
translate([-outer_x / 2, socket_front_y - outer_y, translate([-outer_x / 2, socket_rail_axis_y() - outer_y / 2,
socket_flange_size[2]]) socket_flange_size[2]])
cube([outer_x, outer_y, socket_capture]); cube([outer_x, outer_y, socket_capture]);
socket_gusset(-1); socket_gusset(-1);
@@ -462,12 +472,13 @@ coupon_rail_y = 23;
coupon_fit_center = [82.5, 90]; coupon_fit_center = [82.5, 90];
coupon_fit_outer = [64, 34]; coupon_fit_outer = [64, 34];
coupon_fit_height = 6; coupon_fit_height = 6;
coupon_key_depth = 6;
coupon_key_center = [200, 90]; coupon_key_center = [200, 90];
coupon_key_cap = [56, 26, 2]; coupon_key_cap = [56, 26, 2];
coupon_key_handle = [40, 6, 8]; coupon_key_handle = [40, 6, 8];
assert(coupon_fit_height == socket_key_size[2], assert(coupon_fit_height == coupon_key_depth,
"Coupon socket depth must match the production tongue"); "Coupon socket and tongue gauges must have matching depths");
assert(len(coupon_rail_gaps) == len(coupon_rail_xs), assert(len(coupon_rail_gaps) == len(coupon_rail_xs),
"Each rail gauge must have one layout position"); "Each rail gauge must have one layout position");
assert(len([for (gap = coupon_rail_gaps) assert(len([for (gap = coupon_rail_gaps)
@@ -558,17 +569,18 @@ module coupon_key() {
// Separate full-size tongue. A 45-degree stop shoulder remains // Separate full-size tongue. A 45-degree stop shoulder remains
// support-free, and the vertical rib provides a grip for removal. // support-free, and the vertical rib provides a grip for removal.
translate([coupon_key_center[0], coupon_key_center[1], 0]) { translate([coupon_key_center[0], coupon_key_center[1], 0]) {
rounded_prism(socket_key_size, 2); rounded_prism(
[socket_key_size[0], socket_key_size[1], coupon_key_depth], 2);
hull() { hull() {
translate([0, 0, socket_key_size[2] - eps]) translate([0, 0, coupon_key_depth - eps])
rounded_prism( rounded_prism(
[socket_key_size[0], socket_key_size[1], eps], 2); [socket_key_size[0], socket_key_size[1], eps], 2);
translate([0, 0, translate([0, 0,
socket_key_size[2] + coupon_key_cap[2] - eps]) coupon_key_depth + coupon_key_cap[2] - eps])
rounded_prism( rounded_prism(
[coupon_key_cap[0], coupon_key_cap[1], eps], 3); [coupon_key_cap[0], coupon_key_cap[1], eps], 3);
} }
translate([0, 0, socket_key_size[2] + coupon_key_cap[2] - eps]) translate([0, 0, coupon_key_depth + coupon_key_cap[2] - eps])
rounded_prism( rounded_prism(
[coupon_key_handle[0], coupon_key_handle[1], [coupon_key_handle[0], coupon_key_handle[1],
coupon_key_handle[2] + eps], coupon_key_handle[2] + eps],
Binary file not shown.
+29737 -29709
View File
File diff suppressed because it is too large Load Diff
Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.5 KiB

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 KiB

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.1 KiB

After

Width:  |  Height:  |  Size: 8.3 KiB