update socket
@@ -11,17 +11,18 @@ inlays printed against a textured build plate.
|
||||
## Coordinate system and principal dimensions
|
||||
|
||||
- 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
|
||||
straight front reference face is Y=12.7 mm (0.5 inch), halfway between the
|
||||
origin and the first insert row.
|
||||
- The grid origin is Y=0 and positive Y runs toward the operator. The socket
|
||||
flange's straight front reference face is Y=12.7 mm (0.5 inch), halfway
|
||||
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
|
||||
Y=203.2 mm relative to the socket datum.
|
||||
- A blue Y=0 datum line continues beneath the socket, leaving aligned visible
|
||||
segments on both sides.
|
||||
- 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
|
||||
half-inch reference face. The column is shifted forward to improve the
|
||||
overturning load path and reduce the camera arm's required overhang.
|
||||
half-inch reference face. The collar is near the flange center, with tapered
|
||||
side gussets that retain the original broad flange footprint.
|
||||
- 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.
|
||||
|
||||
@@ -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
|
||||
full 50 mm engagement depth. External gussets and M5 holes are omitted because
|
||||
they do not define the rail-fit surfaces. The coupon also
|
||||
contains the production-width blue line and a 6 mm-deep production-size
|
||||
52.5 x 22.5 mm through-slot. The separate 52 x 22 x 6 mm tongue prints in the
|
||||
same orientation as the socket tongue and has a support-free stop shoulder and
|
||||
vertical grip for insertion and removal. Verify that the slot is visibly open,
|
||||
with no first-layer membrane, before testing the fit.
|
||||
contains the production-width blue line and a 6 mm-deep 52.5 x 22.5 mm
|
||||
through-slot. The separate 52 x 22 x 6 mm tongue is an XY fit gauge for the
|
||||
production interface; its shorter depth keeps the calibration print compact.
|
||||
It has a support-free stop shoulder and vertical grip for insertion and
|
||||
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
|
||||
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
|
||||
without objectionable play, and the 8.10 mm pilot provided the preferred
|
||||
insert fit. The rectangular tongue and through-slot also passed the physical
|
||||
fit test, so their dimensions remain unchanged. For another printer, material,
|
||||
or process, select the smallest rail gauge that fits without forcing and use
|
||||
the insert pilot that gives the required installation grip. 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;
|
||||
XY fit test. The production tongue retains those dimensions and extends 14.8
|
||||
mm into the 15 mm base, leaving 0.2 mm underside clearance. For another
|
||||
printer, material, or process, select the smallest rail gauge that fits without
|
||||
forcing and use the insert pilot that gives the required installation grip.
|
||||
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
|
||||
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.
|
||||
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.
|
||||
3. Lower the socket's 52 x 22 x 6 mm tongue into the base's through-slot, then
|
||||
fasten the flange with four 0.7-inch OD washers and four 1/4-20 x 1-inch
|
||||
screws. The screws provide clamping and vertical retention; the tongue
|
||||
provides repeatable X/Y location and carries lateral shear. With a washer
|
||||
thickness `t` in millimeters, nominal insert engagement is
|
||||
3. Lower the socket's 52 x 22 x 14.8 mm tongue into the base's through-slot,
|
||||
then fasten the flange with four 0.7-inch OD washers and four 1/4-20 x
|
||||
1-inch screws. The screws provide clamping and vertical retention; the
|
||||
tongue provides repeatable X/Y location and carries lateral shear. With a
|
||||
washer thickness `t` in millimeters, nominal insert engagement is
|
||||
`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
|
||||
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
|
||||
without changing this base.
|
||||
|
||||
The socket's broad side buttresses stop before the four base screws. Vertical
|
||||
19 mm washer and tool envelopes preserve access above those screws, and 14 mm
|
||||
horizontal tunnels provide driver access to the M5 rail clamps without
|
||||
sacrificing the collar wall around the T-slot extrusion. The 19 mm fore/aft
|
||||
screw-row spacing and shallower side buttresses improve overturning and
|
||||
torsional resistance compared with the compact first revision.
|
||||
The socket's tapered side buttresses follow the collar at their upper edges
|
||||
while retaining the original broad footprint on the flange. They stop before
|
||||
the four base screws. Vertical 19 mm washer and tool envelopes preserve access
|
||||
above those screws, and 14 mm horizontal tunnels provide driver access to the
|
||||
M5 rail clamps without sacrificing the collar wall around the T-slot
|
||||
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
|
||||
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.
|
||||
* 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
|
||||
* 0.5 inch forward of that origin and remains a convenient reference face.
|
||||
* The grid origin is at plate Y=datum_y. The socket flange's straight front
|
||||
* edge is 0.5 inch forward of that origin, while the rail front face is at 0.
|
||||
*/
|
||||
|
||||
/* [Output] */
|
||||
@@ -50,7 +50,10 @@ socket_capture = 50;
|
||||
socket_front_y = grid_pitch / 2;
|
||||
socket_rear_y = -datum_y;
|
||||
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_side_wall = 6;
|
||||
socket_end_wall = 2.7;
|
||||
@@ -88,7 +91,10 @@ assert(socket_gusset_outer_x
|
||||
< socket_mount_x - socket_mount_tool_diameter / 2,
|
||||
"Socket gusset enters a flange-screw tool-access envelope");
|
||||
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,
|
||||
"Socket flange must reach the rear edge of the base");
|
||||
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_tool_diameter / 2 <= socket_front_y,
|
||||
"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
|
||||
< grid_pitch - insert_boss_diameter / 2,
|
||||
"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
|
||||
< grid_pitch - insert_boss_diameter / 2,
|
||||
"Socket mounting bosses overlap the first grid-row bosses");
|
||||
assert(socket_key_size[2] < plate_height,
|
||||
"Socket tongue must stop above the base underside");
|
||||
assert(socket_key_size[2] == plate_height - socket_key_bottom_clearance,
|
||||
"Socket tongue must leave 0.2 mm clearance above the base underside");
|
||||
|
||||
grid_xs = [for (i = [0 : grid_columns - 1])
|
||||
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) {
|
||||
translate([plate_width / 2, datum_y + socket_rail_axis_y()])
|
||||
translate([plate_width / 2, datum_y + socket_key_axis_y])
|
||||
rounded_rect_2d(
|
||||
[socket_key_size[0] + 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
|
||||
+ 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() {
|
||||
translate([0, socket_rail_axis_y()])
|
||||
translate([0, socket_key_axis_y])
|
||||
rounded_rect_2d([socket_key_size[0], socket_key_size[1]], 2);
|
||||
}
|
||||
|
||||
module socket_gusset(side = 1) {
|
||||
cavity = rail_size + 2 * rail_clearance;
|
||||
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;
|
||||
outer_x = side > 0 ? socket_gusset_outer_x - 2
|
||||
: -socket_gusset_outer_x;
|
||||
gusset_depth = socket_gusset_y_span[1] - socket_gusset_y_span[0];
|
||||
|
||||
// Broad buttress with a short outer reach. Tool-access bores below remove
|
||||
// any material that could obstruct either family of fasteners.
|
||||
// The full-height attachment follows the collar's front and rear edges,
|
||||
// while the low outer footprint retains the proven flange support area.
|
||||
// Tool-access bores below remove material around both fastener families.
|
||||
hull() {
|
||||
translate([near_x, socket_gusset_y_span[0], socket_flange_size[2]])
|
||||
cube([2, gusset_depth, socket_gusset_height]);
|
||||
translate([near_x, collar_y_min, socket_flange_size[2]])
|
||||
cube([2, collar_y_depth, socket_gusset_height]);
|
||||
translate([outer_x, socket_gusset_y_span[0], socket_flange_size[2]])
|
||||
cube([2, gusset_depth, 2]);
|
||||
}
|
||||
@@ -360,7 +370,7 @@ module socket_positive() {
|
||||
linear_extrude(height = socket_key_size[2] + eps)
|
||||
socket_key_local_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]])
|
||||
cube([outer_x, outer_y, socket_capture]);
|
||||
socket_gusset(-1);
|
||||
@@ -462,12 +472,13 @@ coupon_rail_y = 23;
|
||||
coupon_fit_center = [82.5, 90];
|
||||
coupon_fit_outer = [64, 34];
|
||||
coupon_fit_height = 6;
|
||||
coupon_key_depth = 6;
|
||||
coupon_key_center = [200, 90];
|
||||
coupon_key_cap = [56, 26, 2];
|
||||
coupon_key_handle = [40, 6, 8];
|
||||
|
||||
assert(coupon_fit_height == socket_key_size[2],
|
||||
"Coupon socket depth must match the production tongue");
|
||||
assert(coupon_fit_height == coupon_key_depth,
|
||||
"Coupon socket and tongue gauges must have matching depths");
|
||||
assert(len(coupon_rail_gaps) == len(coupon_rail_xs),
|
||||
"Each rail gauge must have one layout position");
|
||||
assert(len([for (gap = coupon_rail_gaps)
|
||||
@@ -558,17 +569,18 @@ module coupon_key() {
|
||||
// Separate full-size tongue. A 45-degree stop shoulder remains
|
||||
// support-free, and the vertical rib provides a grip for removal.
|
||||
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() {
|
||||
translate([0, 0, socket_key_size[2] - eps])
|
||||
translate([0, 0, coupon_key_depth - eps])
|
||||
rounded_prism(
|
||||
[socket_key_size[0], socket_key_size[1], eps], 2);
|
||||
translate([0, 0,
|
||||
socket_key_size[2] + coupon_key_cap[2] - eps])
|
||||
coupon_key_depth + coupon_key_cap[2] - eps])
|
||||
rounded_prism(
|
||||
[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(
|
||||
[coupon_key_handle[0], coupon_key_handle[1],
|
||||
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 |