opencad
← Machines
MachinePASS 10/10

Crank-slider

Offset crank-slider mechanism of four separate solids in stacked layers, with a full-turn motion sweep.

Facts

Backend
build123d
Gates
10 pass, 0 fail, 4 n/a
Envelope
200.0 × 70.0 × 15.0 mm
Bodies
4 (4 modelled)
Joints
4
Truth case
yes, scored against held-back geometry

Printable part designs

PartGatesFiles
ground
crank-slider-ground
PASS 11/11STEP · STL
crank
crank-slider-crank
PASS 11/11STEP · STL
rod
crank-slider-rod
PASS 11/11STEP · STL
slider
crank-slider-slider
PASS 11/11STEP · STL

Assembled machine

FileKindSize
crank-slider.stepSTEP101 KB
crank-slider.stlSTL74 KB

Source

assembly.yaml (design contract)

Design intent

Offset crank-slider from sources/crank-slider-spec.md (authoritative, text only): four separate solids in stacked 5 mm layers, a ground plate (z -5..0), a 30 mm crank and a 30 x 16 x 5 slider block (z 0..5) and a 100 mm connecting rod (z 5..10). Three revolute pins (O ground to crank, the motor; A crank to rod; B rod to slider) and a prismatic guide along +x on the line y = 10 (ground to slider) form one closed loop: the joint tree runs from the ground through the crank pivot O, the crank pin A and the guide, and the wrist pin B is the loop's closing joint. Rest: crank at 0 deg (A at (30, 0)), B at (129.498744, 10), rod at 5.739170 deg. The crank turns one full revolution; predict the slider travel along the guide from rest as a series over the revolution and its stroke.

Gates

TierGateResultEvidence
Aparts_pass
Every part design passed its own 12 gates and has a handoff STEP
PASSresults/build123d/crank-slider/parts.json designs.<design>.gates_ok: crank-slider-ground=True, crank-slider-crank=True, crank-slider-rod=True, crank-slider-slider=True
Abom_complete
Every body of the bill of materials is in the export, once, with a placement
PASSresults/build123d/crank-slider/verify.json solid_count = 4 (expected 4); placements.missing = []; unmatched = []
Ajoint_fidelity
Every joint's child frame lies on its parent frame (axis, offset, rest angle)
PASSresults/build123d/crank-slider/verify.json joints.joints.<joint>.checks; failing: none
Aclearances
Static clearances and seats at rest
PASSresults/build123d/crank-slider/verify.json clearances.<name>; failing: none
Amotion_clear
Every drive moves through its range without interference; gears mesh; ratios match tooth counts
PASSresults/build123d/crank-slider/kinematics.json motions.<name>.max_interference: crankTurn=0
Afluid_domain
Each fluid region is one sealed piece within its volume band and agrees with the source's fluid body
n/aresults/build123d/crank-slider/domains.json fluids.<name>:
Bexport_agreement
Each exported body equals its part handoff x placement; the assembled envelope matches
PASSresults/build123d/crank-slider/verify.json agreement.bodies.<body>.volume_rel/hausdorff_mm; envelope.max_error = 0.0 (tol 0.1)
Bperformance
Every predicted observable meets the requirement the sources state over its numerical band (value +- 2 u_numerical)
PASSresults/build123d/crank-slider/simulate.json observables.<id>.requirement: stroke=60.33
Bconservation
Energy, mass and force balances of every analysis close within their tolerance
n/aresults/build123d/crank-slider/simulate.json simulations.<id>.conservation:
Brefinement
Every prediction of a mesh ladder is resolved: all its levels finished and the grid-convergence index is within tolerance
n/aresults/build123d/crank-slider/simulate.json simulations.<id>.refinement.observables:
Csource_hygiene
The assembly source imports only its declared inputs, formats and lints clean
PASSresults/build123d/crank-slider/verify.json hygiene: cad_refs=[] truth_refs=[]; ruff format True, ruff check True
Cboundaries_complete
Every face of a bounded body carries exactly one named boundary
n/aresults/build123d/crank-slider/domains.json boundaries.<body>.unassigned/conflicts: none
Cprovenance
Stage JSONs carry provenance stamps; part handoffs are hash-bound; inputs carry provenance
PASSresults/build123d/crank-slider/<stage>.json provenance present for ['verify', 'kinematics', 'domains', 'simulate']; parts.json designs.<d>.step_sha256 present: True
Cevidence_separation
No worker-visible artefact reads truth; the assembly source only places declared inputs
PASSresults/build123d/crank-slider/verify.json hygiene.truth_refs = []

Bill of materials

BodyKindDesignMaterial
groundmodelledcrank-slider-ground
crankmodelledcrank-slider-crank
rodmodelledcrank-slider-rod
slidermodelledcrank-slider-slider