Skip to main content

The Parametric Enclosure

The current enclosure is a mechanical prototype for a tabletop player. The inclined face retains the 1.8-inch display, a separate NFC area, and the rotary control. PCB placement, connector alignment, battery retention, acoustic performance, fasteners, and print tolerances still require physical validation. These files are not a production release.

Native sources and generation​

hardware/assembly.json records the reference dimensions, component envelopes, and docking geometry. hardware/enclosure/safi_enclosure.py creates native parametric FreeCAD objects. Run tools/generate_cad.py with FreeCAD's Python interpreter from the repository checkout.

The saved .FCStd documents contain the generated solids. Recomputing their custom parametric objects requires the generator module to be loaded in FreeCAD. They use Part booleans rather than a sketch-and-pad feature history. STEP exports provide editable solid interchange; STL exports provide meshes for slicing.

Generation creates three enclosure studies: the reference wedge, a lower and deeper version, and a more upright version. Each contains the base, face lid, knob, battery hatch, speaker chamber, display and NFC retainers, and two internal magnet keepers.

Coordinates and component fit​

The reference body is 170 mm wide and 160 mm deep, with front and rear heights of 40 mm and 150 mm. Its origin is the front-left floor corner: X points right, Y rearward, and Z upward. Enclosure exports already share these assembly coordinates. Applying another positioning offset when loading them would misalign the exploded view.

The board mounting points describe a reserved envelope, not the final KiCad PCB. Rear USB-C and headphone openings, display mounting details, speaker dimensions, and the 18650 holder envelope must be checked against the selected parts. The PCB redesign follows completion of the other project work.

Reversible side docking​

Both body sides contain recessed magnet pockets with an exterior plastic skin. Separate internal keepers retain the magnets. A tray has matching docking geometry at both ends so it can sit on either side of the device. Magnet polarity must be checked with an assembly fixture before closing the keepers.

The tray generator accepts capacity and row count. Exported examples provide 12, 30, and 114 grooves, each in single-row and three-row arrangements. Slots are designed around 50 × 85 × 1 mm NTAG215 cards, with 1.6 mm slot width, 4 mm pitch, and 16 mm engagement depth. A 114-card single row is 466 mm wide; the three-row version is 162 mm wide and 174 mm deep. Trays use local coordinates and must be positioned against the selected body side.

Geometry checks​

geometry-checks.json records solid validity, volume, and pairwise intersections for the generated assemblies. mesh-manifest.json maps native parts to STEP and STL exports. The generator rejects invalid solids and reports intersections larger than 0.01 mm³.

These checks do not establish assembly access, insertion paths, screw engagement, printability, magnetic retention force, antenna performance, or clearance to real electronic components. Those require the next physical fit study. See the enclosure guide before printing.