update socket
@@ -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
|
||||||
|
|||||||
@@ -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],
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 5.8 KiB |
|
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 5.6 KiB |
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 5.8 KiB |
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 5.8 KiB |
|
Before Width: | Height: | Size: 9.5 KiB After Width: | Height: | Size: 6.3 KiB |
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 5.6 KiB |
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 5.3 KiB |
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 7.1 KiB After Width: | Height: | Size: 7.1 KiB |
|
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 7.0 KiB |
|
Before Width: | Height: | Size: 8.1 KiB After Width: | Height: | Size: 8.3 KiB |