main
History Download
John Lauer Rev 2: case refit to the placed board (DONE rev B), pin span 24 x 16 mm, build status 1cd53fe 1d ago

Ghost Hand rev 2 case

A compact sage pebble with a crowned roof, rounded edges and five tiny clear indicator dots. The front window separates IR transmit and receive paths. The screws enter from underneath, with a continuous perimeter seal and a recessed non-slip foot. There is no logo and no recess on the roof to collect water.

Assembled case Exploded assembly Battery and service loops

Dimensions and fit

The shell is 37 x 32 x 16.5 mm; its assembled envelope is 38 x 32 x 17 mm, including the USB cap and 0.5 mm of exposed foot. This uses 45% of rev 1's 54 x 50 mm footprint. Height exceeds the aspirational 16 mm by 1 mm to preserve the connector, battery and lead clearances. Plan corners are R3, edge blends R0.8. A 120 mm radius crown drains toward the front and rear. The roof is nominally 1 mm thick normal to its curve, with an approximately 0.8 mm local relief over J2. R3 corners make room for the relocated front-left screw within the same footprint.

The 30 x 22 x 1.6 mm board pitches 5 degrees nose-up. board_placement() preserves the supplied MP1 frame, rotates about X at Y=9 and places board-top centre at Z=11. The counter is Z=-0.5. The IR axis at board Y=-2.9, Z=1.2 is 13.733 mm above the counter. This height was reported to the board thread for the aim calculation. It is a geometric height, not a measured optical result.

board-source-review.json records the supplied placed board STEP hash and its X=-3..27, Y=-3..19 frame. board_source_placement() subtracts 1.6 mm from KiCad's bottom-Z=0 source before applying board_placement(). The STEP's FR4 solid is 1.51 mm thick, with additional copper solids; the nominal interface top remains Z=1.6. The full 509-solid placed source is used for interference checks. final_board.step stays small with a PCB and interface display bodies; the studio should use the board thread's full model for its hero. A changed source must be checked again.

The estimated assembled mass is 15.38 g. The conservative PCB-bottom to taped-pack gap is 3.585 mm, exceeding the required 1.3 mm; the 1.2 mm underside envelope retains 2.389 mm to the taped pack. The pin span is 24 x 16 mm.

Four cross-slotted D1.08 collets squeeze the existing D1.2 machine-pin shanks. They retain the rev 1 spring-collet principle and annular board ledges. A local relief beside MP1 clears the placed underside 0402. Their seats follow the underside pad plane 0.04 mm below the FR4 bottom, clearing the real copper without changing the optical frame. The smaller pack spans nearly the pin centres, so the collets are carried by outboard posts and bridges above the battery. Their bores are open at the bottom: the pin tips project into empty space and cannot bottom in a blind socket. The nearest rear pin tip has 0.659 mm clearance above the nominal battery envelope. Do not add adhesive under those tips. A printed coupon must establish the actual squeeze and retention.

Battery and wires

The Adafruit 1317 pack is 26.02 mm along X, 19.75 mm along Y and 3.8 mm high, at Z=1..4.8. It rests in its own floor pocket with short guide ribs clear of the sockets. The reconstruction uses nominal listing dimensions and includes cable tape within the available cavity; it does not claim manufacturer CAD or measured PCM details. Allow for the actual received pouch's seals and swelling. A damaged or swollen pack must be removed, rather than forced into the pocket.

Each insulated lead is modelled at 127.5 mm, with a two-turn service spiral below the board and a rear return into the PHR-2 plug. lead-route.json retains the sampled centre lines and nominal lengths. Wire OD 0.9 mm is provisional; verify the received pack and rerun fit with its actual insulation diameter. The leads occupy different heights and must follow the model rather than being stuffed beside J2. Bottom components are checked against a conservative 1.2 mm envelope and the actual placed STEP. The existing stack leaves over 1.3 mm between the PCB bottom and the pouch, so the taller parts do not increase the outer height. The plug enters J2 from the back. Circuit 1 is +, red; circuit 2 is -, black. Meter-check the pack before connection.

Sealing and service

The inner tongue is 0.65 mm wide. The outer TPU gasket is 0.8 mm free height and 0.6 mm closed height, for 25% nominal compression. The mating rigid seam provides the compression stop. Four M1.6 screws and heat-set inserts give repeatable clamping in a smaller footprint and tolerate service better than thin printed snaps. Underside screw heads have individual TPU sealing washers. Fit and torque are coupon-qualified; tighten evenly only until the rigid seam meets, without bowing the cover.

A collar around the USB opening and a stop behind the metal receptacle route plug insertion force into the cover. A tethered TPU stopper closes the port when not charging. Two integral sealing ribs have 0.075 mm nominal radial compression into the collar; the cap provides the insertion stop. Its contact surfaces need sealing grease compatible with the TPU and coating, and a retained anchor. Keep the device and port dry while charging. The cover's overhanging seam and tongue form a drip break; avoid a coating bridge across the seam.

The clear-resin IR insert fits a rebated front opening. Bond its full perimeter with compatible electronics-grade neutral-cure sealant. The opaque barrier runs from the PCB to the window between the transmitters and receivers. Add a black opaque stripe on the inside of the shared window over that barrier, and a small compliant opaque sealant bead where the barrier meets the insert, so light cannot bypass it through the clear material. Check isolation while pulsing TX before final sealing. Clear resin transmission at both 850 and 940 nm must be measured; visible clarity alone does not establish IR performance.

Each 1.5 mm pipe starts 0.2 mm above its LED, follows the board normal and ends flush with the crowned roof. Opaque wells isolate all five channels. The 1.48 mm pilot is a nominal 0.02 mm diametral press fit; the enlarged upper recess is the glue land. Print a coupon before committing to this tiny fit. Bond and seal the upper annulus. The pipe names are STATUS, 25, 50, 75 and 100. STATUS is at board (11, 7); the gauge is at X=11.3, 14.5, 17.7, 20.9 and Y=15.5, with 3.2 mm pitch. TX axes are at X=3.7 and 8.3, RX at 14.1 and 18.7, with the opaque barrier at X=10.6..11.8. USB-C follows Y=8; the battery plug mates at J2 (6, 12.2).

This is a splash-resistant prototype design, not an IP-rated or immersion-qualified enclosure. FDM walls and printed TPU can leak through pores; coat and leak-test an empty enclosure first. No waterproof certification, faucet compatibility, production retention or drop qualification is claimed. Ghost Hand is attended-use only: stop after 10 minutes, when lifted or tipped, or at low battery.

Materials, print and assembly

Part Material and starting process
Base and cover Opaque PETG, 0.2 mm nozzle for collets, 0.12 mm layers, at least 5 walls, 100% in thin features; dry filament. Base floor down; cover roof up with internal supports kept off optical and seal seats. Remove supports and inspect every collet slot. Sand and seal the exterior with a compatible coating tested on a coupon.
Gasket, screw seals and USB plug Hydrolysis-resistant polyether TPU 95A, 0.2 mm nozzle, 0.1 mm layers, 100% solid, dry filament, slow 15 to 20 mm/s. Print gasket at free height. Avoid seam blobs on sealing faces.
Foot TPU 85A or 95A, 100% solid, flat down. Bond only into its recessed seat with compatible flexible adhesive.
IR window and five pipes Clear engineering SLA resin, 0.025 to 0.05 mm layers. Wash and fully cure per the resin manufacturer. Sand/polish optical faces; leave glue lands matte. Print away from the optical faces and seal all bonded joints.
Screws and inserts Purchased metal hardware; supplied CAD is a simple envelope, not printable replacement hardware. See the priced mechanical BOM and exact dimensional constraints.
  1. Print fit coupons for pins, pipe pilots, insert holes and the gasket. Finish the shell and laser the empty parts using laser_engrave.svg and its face jigs.
  2. Install the 2.5 mm inserts from inside the cover with a depth-controlled tip: their final interval is Z=13..15.5, deliberately above the PCB edge. The 2.15 mm pilot continues from the boss underside at Z=7.5 to Z=15.5. Qualify this deep installation on a coupon before heating the finished cover, and do not distort the seal seats. Clean, coat and leak-test the empty shell; inspect the thin walls, screw wells and optical rebates.
  3. Bond and seal the window. Apply its barrier stripe. Press the five pipes into their own wells and bond the upper glue lands. Confirm each pipe aligns with its LED.
  4. Place the nominal pack in the pocket on a thin removable battery-safe adhesive film, without stacking tape under the pin tips. Dress the two service loops at their modelled heights. Do not bend, compress or puncture the pouch.
  5. Lower the board evenly onto all four ledges. Press the pin shanks into the split sockets using the board corners, never the components. Insert the battery plug from behind J2, red to circuit 1. Inspect every lead and bottom component for clearance.
  6. Fit the tether anchor and USB stopper. Place the free TPU gasket, screw washers and foot. Close evenly until the rigid stops meet. Verify all LED channels and IR isolation, then repeat a splash test with appropriate protection for the electronics.
  7. To service, remove all four underside screws and lift the cover. Unplug J2 by gripping its housing. Support the board and spread the accessible collet petals gently with a smooth plastic tool while lifting each corner in small increments. Never pull one pin out by bending the board or levering against the battery. Replace damaged collets, seals or a swollen pack.

Files and regeneration

Run python3 ghost_hand_case.py with CadQuery 2.8, NumPy, SciPy and Matplotlib. Regeneration requires the companion placed board STEP at design/glb/ghost-hand-board.step in the parent project; the mechanical ZIP retains only the small display copy, while the fit report records the complete source hash. The single script writes per-part STEP/STL, named coloured assembled and exploded STEP, the battery component STEP, engraving paths, source provenance and the pairwise interference report. All source coordinates are millimetres. STL files retain assembled coordinates; place each part on the correct print face in the slicer. Gasket STL uses its free height; STEP uses its compressed height. Purchased hardware STLs are reference envelopes only. Purchased batteries and their leads have STEP/GLB reference models, as in rev 1, with no printable STL.

Convert with the shared service using python3 convert_rev2.py. It calls step2glb convert for every STEP and step2glb thumbnail for the inspection renders. Inspect the images, not just process exit codes. Rebuild and recheck whenever the board STEP hash changes. The ZIP contains only the rev 2 release files, excluding frozen references and failed iteration logs.

mech_costs.json gives per-part material use, hardware prices, assumptions and exclusions. Mass is a solid-volume estimate with a 4.65 g complete battery and an estimated assembled PCB mass; the actual printed and populated device must be weighed. See interference.json for the current sum. CAD intersections below 0.008 mm3 are treated as numerical tolerance; designed press fits, insert displacement and thread engagement are itemised separately.

Original CAD, scripts and prose: MIT. Manufacturer reference assets retain their original rights.

The automatic watcher was restarted for an 8-hour window after the rev B update. The placed/routed source can also be checked with refresh_board_fit.py. Its isolated reports are under live-board-check/, with the latest pointer in latest-board-fit.json. It preserves reviewed exports and never publishes a failed fit. Run python3 refresh_board_fit.py --once for a later exact-board check. Every fit report is source-specific; rerun when the finished board replaces the placed export.