homeblogartgithub
rss

© 2026 MIT Licensed

I’m Touched: The Screen Enclosure

July 2, 2026

Each of the video sphere’s twelve screens lives in a snap-fit case that I mostly didn’t model. I described it. The case is built on YAPPgenerator_v3, a 6,164-line OpenSCAD file you include and then configure: you declare your PCB’s dimensions, its standoffs, and arrays of cutouts per face, and YAPP generates a base and lid with walls, ridges, and snap joins. My entire enclosure (case, lid, a glue-in stem port, and a printable BOOT-button plunger) is one file just shy of 400 lines that reads more like a config than like CAD.

This post is the YAPP reference I wanted when I started: a real enclosure with real constraints.

The setup

  1. git clone https://github.com/mrWheel/YAPP_Box
  2. Copy YAPPgenerator_v3.scad next to your enclosure file (or add the YAPP_Box directory to OPENSCADPATH).
  3. include <YAPPgenerator_v3.scad> at the top, set variables, F5 to preview, F6 to render, export.

Describing the board

The screen module is an LCDWIKI ES3C28P, an ESP32-S3 with a 2.8″ ILI9341 display on an 86 × 50 × 1.6 mm PCB. YAPP wants the board described, not drawn:

pcbLength            = 86.0;     // long axis (X)
pcbWidth             = 50.0;     // short axis (Y)
pcbThickness         = 1.6;
standoffHeight       = 13.5;
standoffDiameter     = 5.6;      // matches the 5.60 mm pad on the spec
standoffPinDiameter  = 2.7;      // M3 self-tap

pcbStands = [
    [ 4.0,  4.0, yappBoth, yappPin],
    [82.0,  4.0, yappBoth, yappPin],
    [ 4.0, 46.0, yappBoth, yappPin],
    [82.0, 46.0, yappBoth, yappPin],
];

Four M3 mount holes, inset 4 mm from each PCB edge. All of these numbers came from the module’s datasheet, except the ones that couldn’t be (like where the BOOT button actually sits).

Centering a screen that isn’t centered

The LCD sits asymmetrically on the PCB: the bezel is wider on the USB-C end. Left alone, the visible screen would sit off-center in the case, which would read as an error twelve times over on the finished sphere. The fix is a matched pair of asymmetries. The lid cutout is trimmed 6 mm on the USB-C side to hide the wide bezel, and the case padding on the opposite side is extended by the same 6 mm (paddingBack = 9.0 vs 3.0 everywhere else). Net effect: the visible screen, the case interior, and the stem-port pocket all share the same center at PCB X = 40. It took two rounds of nudging to land. The case looks symmetric precisely because the numbers aren’t.

YAPP as a tool

YAPP comes down to a declarative DSL with one escape hatch. Learn where each array’s origin sits, keep YAPP’s own inputs literal, put everything custom in the hooks, and an enclosure becomes a table of holes with a PCB in the middle.

Part 2 of the video-sphere series
PreviousThe Icosahedron HubNextThe Printed Parts