Skip to main content

3D Enclosure Design

Parametric handheld console enclosure designed in OpenSCAD, optimized for 3D printing.

Design Overview

The enclosure follows a landscape form factor inspired by the Game Boy Advance and Nintendo Switch Lite, with ergonomic grip areas on both sides.

Dimensions: 170 × 85 × 25 mm

Source files

The OpenSCAD project files are in hardware/enclosure/. Open with OpenSCAD 2021.01+.

To render all views:

make render-enclosure

Interactive 3D Viewer

tip

Open the interactive 3D viewer to inspect the enclosure from any angle. Switch between assembly and exploded views, toggle wireframe mode, and zoom into details.

Rendered Views

Front (Display Side)

Front View

Back (Battery Side)

Back View

Top (Shoulder Buttons)

Top View

Exploded View

Exploded View

Cross-Section (XZ plane)

Cross-Section View

Fit Check (bottom shell + PCB + battery)

Fit Check View

Features

Front Panel

  • 3.95" display viewport — centered, with 2mm raised bezel
  • D-pad — cross-shaped cutout on left side
  • A/B/X/Y buttons — diamond layout on right side (SNES style)
  • Start/Select — pill-shaped cutouts below the D-pad

Back Panel

  • L/R shoulder buttons — pill-shaped cutouts near top edge (28 × 10mm)
  • Speaker grille — array of 1.5mm holes in circular pattern (left side)

Bottom Edge

  • USB-C port — 9.0 × 3.2mm cutout (centered), Z-aligned with PCB connector
  • SD card slot — 12 × 2.5mm cutout (right side), Z-aligned with PCB module
  • Power switch — 8 × 4mm cutout (left of USB-C)

Internal

  • Battery compartment — 70 × 55 × 9.5mm cavity with 1.5mm raised border wall and retainer clips (fits 65×55×9.5mm LiPo)
  • Screw bosses — 4 corner mounting points with M3 countersunk clearance holes
  • PCB model — 160 × 75mm PCB at shell split line (Z=15mm)
  • Button caps — retention flange (3mm wider than cutout) prevents fallthrough, actuator stem presses PCB tactile switch
  • Wire channel — routing path for battery connector cable

Physical Layout

FRONT (display side):
┌─────────────────────────────────────────────────────────┐
│ │
│ ┌───────────────────┐ │
│ │ │ │
│ ┌─┐ │ 3.95" Display │ [X] │
│ ┌─┤ ├─┐ │ 320 x 480 │ [Y] [A] │
│ └─┤ ├─┘ │ ILI9488 │ [B] │
│ └─┘ │ │ │
│ D-pad └───────────────────┘ │
│ [Sel] [Sta] │
│ │
│ ┌──USB-C──┐ ┌──SD Card──┐ │
└──┴─────────┴───────────────────────────┴───────────┴────┘

BACK (battery side):
┌─────────────────────────────────────────────────────────┐
│ [L] [R] │
│ │
│ │
│ (( Speaker )) │
│ │
│ │
│ │
│ │
│ │
└─────────────────────────────────────────────────────────┘

Dimensions Reference

ElementDimensionNotes
Overall body170 × 85 × 25 mmLandscape orientation
Wall thickness2.0 mmAll walls
Corner radius8 mmRounded for ergonomics
Display cutout86.4 × 64.8 mmActive display area
D-pad cutout24 × 24 mm cross5mm arm width
Face button holes8 mm diameterA/B/X/Y, 10mm spacing (matches KiCad)
Start/Select10 × 4 mm pillsBelow D-pad, 20mm apart
Menu button10 × 4 mm pillBelow ABXY
Shoulder buttons28 × 10 mmBack panel, Y=35mm from center
USB-C port9.0 × 3.2 mmCentered, Z=13.5mm (PCB-aligned)
SD card slot12 × 2.5 mmX=60mm, Z=13.5mm (PCB-aligned)
Power switch8 × 4 mmX=-40mm, Z=13mm (PCB-aligned)
Battery bay70 × 55 × 9.5 mm65×55mm LiPo + 5mm tolerance
Battery border1.5mm wallRaised edge around bay perimeter
Screw bosses6mm OD / 2.5mm ID4 corners, M3 countersunk

3D Printing Recommendations

ParameterValue
MaterialPLA or PETG
Layer height0.2 mm
Infill15-20%
SupportsYes (for button cutouts and port overhangs)
Print orientationShell face-down (flat bottom on bed)
Nozzle0.4 mm standard
Estimated print time~4-6 hours per shell
Estimated filament~50g per shell
Post-processing

Light sanding on the button holes improves button feel. For a premium finish, apply thin primer + spray paint.

Customization

All dimensions are parameterized in enclosure.scad. Key parameters to adjust:

body_w = 170;        // Overall width
body_h = 85; // Overall height
body_d = 25; // Overall depth
wall = 2.0; // Wall thickness
corner_r = 8; // Corner radius

disp_w = 86.4; // Display viewport width
disp_h = 64.8; // Display viewport height

dpad_x = -62; // D-pad horizontal position
abxy_x = 62; // ABXY horizontal position
abxy_spacing = 10; // Button center-to-center (matches KiCad PCB)

bat_w = 65; // Battery width
bat_h = 55; // Battery height
bat_d = 9.5; // Battery thickness

Rendering Different Views

Use the -D flag to select which part to render:

# Full assembly
openscad -o assembly.png -D 'part="assembly"' enclosure.scad

# Top shell only (for printing)
openscad -o top.stl -D 'part="top"' enclosure.scad

# Bottom shell only (for printing)
openscad -o bottom.stl -D 'part="bottom"' enclosure.scad

# Exploded view
openscad -o exploded.png -D 'part="exploded"' enclosure.scad

Modular Design

The OpenSCAD project is split into modules for maintainability:

FileContents
enclosure.scadMain assembly, shell definitions, render control
modules/buttons.scadD-pad, face buttons, Start/Select, shoulder button cutouts
modules/display.scadDisplay viewport cutout, bezel, mounting shelf
modules/ports.scadUSB-C, SD card slot, speaker grille, ventilation
modules/battery.scadBattery compartment cavity, retainer clips, wire channel