Complete dimensional spec for the 3D-printed car enclosure housing a KrakenSDR and an official-cased Raspberry Pi 5, plus a 12 V power bay. Modelled parametrically in Fusion 360; every number here is a literal from the CONFIG block of build_carbox.py.

For Agents

The source of truth is /Users/levander/Documents/sdr/KrakenPi_CarBox/build_carbox.py, not this note. Edit its CONFIG block, re-run in Fusion, and it wipes the design, rebuilds, self-checks and re-exports. This note is the human-readable mirror. Input dimensions come from krakensdr-pi5-reference-dimensions.

This is v2 — a three-part split. The v1 one-piece design is kept as build_carbox_v1_onepiece.py; its exports moved to old_onepiece/. Anything describing a “box + lid” two-part design is v1 and superseded.

v2 at a Glance — What Changed From v1

v1 (one-piece)v2 (three-part)
Printed partsbox + lidfloor + frame + lid
WALL3.02.5
LID_T3.02.4
FLOOR3.03.0 (unchanged — structural)
Material384 cm³291.6 cm³ (−23 %)
Longest single print~15 h~2.5 h (floor) + frame + lid
LED opening24.4 × 6.5 rectangular windowØ6.6 bore + Ø14 × 4 collar
SOCKET_Y115108
RIB_Y09288
Back cable corridorblocked by ribs and mid postsclear — CABLE_Y = 131, rib notch, posts sunk into the wall
Self-checks158102 + a 1 260-point corridor line scan

Why split it

The printer has only a 0.4 mm hotend, so the one-piece box was a ~15 hour single print — one failure loses the whole thing. Splitting also parallelises assembly: the floor comes off the plate in ~2.5 h carrying every mount boss, so the KrakenSDR, the Pi and the wiring can be bolted in and wired while the frame is still printing.

Coordinate System

  • X = long axis, 0 … 312
  • Y = short axis, 0 … 145 (mount ears extend this to −14 … 159)
  • Z = up, 0 at the outside of the floor

Interior clear volume is X 2.5…309.5, Y 2.5…142.5, Z 3…47.

Overall

ItemValue
Outer envelope, assembled312 × 145 × 49.4 mm (BOX_H 47 + LID_T 2.4)
WALL (frame)2.5 mm
FLOOR (floor plate)3.0 mm
LID_T2.4 mm
Outer corner radius4.0 mm
With car-mount earsY span −14 … 159 (173 mm)
Total printed volume291.6 cm³

Why FLOOR stays at 3.0 while WALL and LID_T shrank

The floor is the structural member — it carries every mount boss and takes the whole load of the Kraken and Pi through the car-mount ears. It also has to be thick enough for the M3 button heads to recess into it (6.5 × 1.8 counterbores) so nothing protrudes below the box. The wall and lid carry only themselves; the LED and switch grip through collars and screws, not through panel thickness, so 2.5 mm is enough.

The Three Parts

PartFootprintHeightZ span as builtCarries
floor312 × 1453 mm plate, bosses to Z = 70 … 7all mount bosses, zip anchors, lightening grid, mount ears
frame312 × 14544 mm3 … 47walls, lid posts, socket ribs, LED collar, every panel cutout
lid312 × 1452.4 mm (4.4 with the lip)45 … 49.4grilles + register lip

The frame is its own body, not a split box

Build order matters

The frame is built as an independent block → fillet → shell, where the shell removes BOTH the top and the bottom face. It is not produced by slicing a shelled box in half.

frame = build(sk, 'frame_block', NEW, None, dist=BOX_H - FLOOR).bodies.item(0)
fillet_verticals(frame, CORNER_R)
shell(frame, [FLOOR, BOX_H], WALL)   # both Z faces removed

This decouples WALL from FLOOR. A shelled box forces one thickness on all six faces; here the floor can stay 3.0 mm while the walls drop to 2.5 mm, which is where most of the 23 % material saving comes from.

Floor ↔ frame joint — 10× M3

Bosses sit inside the frame; screws go up through the floor into them.

ItemValue
JOINT_BOSS10 × 8 × 7 mm (W × D × H), Z 3 … 10
Pilot in bossØ2.5 mm, 7 mm deep
Hole in floorØ3.4 through
Counterbore in floorØ6.5 × 1.8 mm from the bottom face — M3 button head sits flush

Positions (10):

RunCoordinates
Front (Y = 6.5)X 60, 120, 200, 270
Back (Y = 138.5)X 50, 110, 180, 260
Sides (Y = 72)X 6.5 and 305.5

Back bosses are placed around the cable corridor

The back bosses occupy Y 134.5 … 142.5, deliberately outboard of CABLE_Y ± 2. The build asserts this: chk('corridor clears the back joint bosses', CABLE_Y + 2.0 < BOX_W - WALL - JOINT_BOSS_D).

Internal Layout

Everything is laid out along X.

RegionXYStandoff
KrakenSDR13 … 190.313 … 126.54 mm (KRAKEN_LIFT)
Pi 5 (in its official case)201 … 299.513 … 83.33 mm (PI_LIFT)
12 V power bayremaining L-shaped region
Back cable corridorfull lengthcentreline CABLE_Y = 131
Front cable channelfull length2.5 … 13

The Back Cable Corridor

This is the thing v1 got wrong

Building the wiring mockup is what exposed it. In v1 the socket ribs walled off the back channel and the mid-span lid posts sat directly in it, so the Kraken’s PWR and DATA leads had no route to the adaptor or the Pi. The box would have printed, assembled, and then been unwireable.

CABLE_Y = 131.0 is now a named constant — the centreline of the back cable run, from the Kraken’s rear connector face to the power bay. Three coordinated changes clear it:

1. Lid posts sink 2 mm INTO the wall

_PC = WALL + POST_D / 2.0 - 2.0        # = 4.75

Posts are no longer tangent to the inside wall face — they are pulled 2 mm outboard, embedded in it.

Two independent reasons:

  1. Structural — once the box is split, the frame has no floor for a post to stand on. Merging the post into the wall gives it something to be attached to.
  2. Clearance — pulling the posts outboard is what keeps the back corridor open. The back mid post at X 141.5 now spans Y 136 … 144.5, so it starts exactly where the rib notch ends.

Post positions become (4.75, 4.75) · (141.5, 4.75) · (307.25, 4.75) · (4.75, 140.25) · (141.5, 140.25) · (307.25, 140.25).

2. The socket moved inboard

v1v2
SOCKET_Y115108 — Ø28 bore now spans Y 94 … 122
RIB_Y09288

That frees Y 122 … 136 behind the socket.

3. RIB_NOTCH — a slot through both ribs

RIB_NOTCH = (125.0, 136.0, 8.0, 32.0)   # y0, y1, z0, z1

A Y 125 … 136 × Z 8 … 32 notch cut through both socket ribs, straddling CABLE_Y = 131. It sits in the gap between the socket bore (ends Y 122) and the mid lid post (starts Y 136) — the corridor threads the needle between them.

Verified by line scan, not by spot-check

A spot check passed; the line scan is what would have caught it

The corridor is now scanned X 40 → 250 in 0.5 mm steps at three Y offsets (CABLE_Y − 2, CABLE_Y, CABLE_Y + 2) at the Kraken’s connector height, and the build fails if any point is solid:

for dy in (-2.0, 0.0, 2.0):
    x = 40.0
    while x <= 250.0:
        if not is_open(frame, x, CABLE_Y + dy, kz_probe):
            blocked.append((round(x, 1), CABLE_Y + dy))
        x += 0.5
chk('back cable corridor clear (%d blocked pts)' % len(blocked), not blocked)

Plus two geometric asserts: the corridor clears the Kraken body (CABLE_Y − 2 > 126.5) and clears the back joint bosses (CABLE_Y + 2 < 134.5).

Wiring Topology

The electrical intent the corridor exists to serve:

12V female inlet ──┬── POSITIVE ─────────────────────────► adaptor (+)
                   └── GROUND ──► switch ─────────────────► adaptor (−)
                                     │
                                     └── status LED (tapped BEFORE the adaptor,
                                         so it follows the switch)

adaptor ──► Pi 5 power (USB)
adaptor ──► KrakenSDR power (USB)
Pi 5 ◄────► KrakenSDR data (USB)
WireColour in the mockupRoute
12 V +, direct to adaptorredinlet → CABLE_Y → socket axis → adaptor in
12 V , inlet → switchblackinlet → Y 139 → switch
switch → adaptor GNDblackswitch → Y 137 → X 212 → adaptor in
LED + / LED red / black, Ø1.6tapped off the inlet and switch side
adaptor → Pi powerwhite, Ø3.6adaptor out → X 258 → Pi back face
adaptor → Kraken powerwhite, Ø3.6adaptor out → X 250 → CABLE_Y → X 117.45
Kraken ↔ Pi datablue, Ø3.6X 69.65 → CABLE_Y → X 266 → Pi back face

The status LED is tapped ahead of the adaptor

It is wired before the adaptor, on the switched side, so it indicates switch state rather than adaptor output. Wiring it after the adaptor would make it an adaptor-health light instead.

Component Fixing (all on the floor part)

KrakenSDR — 8× M3, heads flush

  • 8 bosses Ø9 mm, 4 mm tall (Z 3 → 7), at X 20.35 / 182.95 (162.6 pitch) × Y 25.35 / 46.90 / 92.60 / 114.15 (88.8 span)
  • Ø3.4 mm through-holes
  • Ø6.5 × 1.8 mm counterbore in the bottom face — M3 button head sits flush with the outside of the box, nothing protrudes to rock on a car floor

M3×16, not the stock M3×12

These holes reuse the Kraken’s own case-assembly screws. Adding a 3 mm enclosure floor means the stock M3×12 no longer reaches. Buy M3×16 button head before printing.

Raspberry Pi 5 — 4× M2.5, slotted

  • 4 bosses Ø8 mm, 3 mm tall (Z 3 → 6), at X 221.25 / 279.25 (58 pitch) × Y 23.65 / 72.65 (49 pitch)
  • Obround holes 2.8 × 6.8 mm — slotted ±2 mm along X
  • Head recess: stadium 6.0 × 10.0 × 1.8 mm in the bottom face
  • Fastener M2.5×8

Why slotted

The Pi 5 board’s 58 × 49 hole pattern is exact, but where that board sits inside the official case is not published. The ±2 mm slot absorbs the uncertainty without a second print. See Raspberry Pi 5 Board.

Power Bay

12 V socket cradle (on the frame)

  • Twin ribs at X 205 … 208.5 and X 223 … 226.5, each spanning Y 88 … 142.5, 39 mm tall (Z 3 … 42)
  • Each rib carries a Ø28 mm bore centred at Y 108, Z 22 → bore spans Y 94 … 122
  • Adaptor modelled as Ø28 × 40.5 mm, entering at X 205 and exiting at X 245.5
  • RIB_NOTCH cut through both ribs at Y 125 … 136, Z 8 … 32 — see the corridor section

Two ribs, not one

A single rib would let a cylindrical 12 V adaptor pivot in its bore. Two spaced bores constrain it in two planes with no extra hardware.

12 V wire entry

  • Stadium (obround) slot, 3.4 × 6.7 mm, vertical, in the back wall at X 197, Z 30
  • 3.2 mm finished + 0.2 mm print allowance

Bare wire first — a connector will not pass

The slot is deliberately sized for bare conductor only. Thread the wire through before crimping or fitting any connector. Getting this backwards means cutting the wire.

Switch cutout

  • 15.5 × 7.3 mm opening at X 240, Z 24
  • Two Ø1.9 mm screw holes, 18 mm apart (±9 from centre)

Weakest point of the whole print

The cutout half-width is 7.75 mm and each screw hole’s inner edge lands at 8.05 mm — leaving only a 0.3 mm web between the switch cutout and each screw hole. This is thinner than a typical extrusion width, and the wall is now 2.5 mm rather than 3 mm. Handle the back wall gently during post-processing; if it breaks, widen SWITCH_SCREW_PITCH in CONFIG and reprint rather than gluing.

The self-check explicitly asserts this web is solid (switch web L), so a CONFIG edit that eats it fails loudly.

Status LED — changed in v2

Value
BoreØ6.6 mm straight through the back wall, no step
CollarØ14 × 4 mm, round, on the inside face at Y 138.5 … 142.5
Total grip6.5 mm = 2.5 mm wall + 4 mm collar
PositionX 275, Z 24

v1 misread the LED datum — the 24.4 mm was not a panel dimension

v1 modelled a 24.4 × 6.5 mm rectangular window with a rectangular collar. That was wrong: the part is a singular pre-wired 12 V LED with a 6.5 mm sleeve, and 24.4 mm was its overall length including the leads, not anything that touches the panel.

The correct feature is a plain Ø6.6 mm bore (6.5 sleeve + 0.1 clearance) with a round Ø14 × 4 mm collar behind the wall to give the sleeve enough grip. If a future note or export mentions a 24.4 mm LED window, it is v1 and wrong.

Cable Exits

WallOpening
Front5× SMA slots, 14 mm wide × Z 10 … 30, at X 44.15 72.05 99.95 127.85 155.75 — the Kraken’s own 27.9 mm pitch, offset −1.7 mm from its body centre
Front2× Pi port slots: X 206 … 245 and X 252 … 294, Z 7 … 27
BackNOISE / aux slot, X 158 … 183, Z 10 … 30

Airflow and Lightening

No fans in the box beyond the Kraken’s own.

FeatureDetail
End-wall vents14 per end, 3 mm wide, 8 mm pitch, Z 10 … 34, Y 20 … 124
Back-wall vents14, same profile, X 20 … 130
Lid grilles6 mm slots at 10 mm pitch, 22 slots across three zones (below)
Floor lightening griddoubles as under-unit airflow, hidden by the devices from above (below)

Lid grilles — enlarged in v2

ZoneX spanY centresSlots
Over the Kraken fan30 … 17522, 32 … 11210
Over the Pi205 … 29518, 28 … 787
Over the power bay205 … 29592, 102 … 1325

v1 used 4 mm slots; v2 uses 6 mm (GRILLE_W). Wider slots remove more material and vent better — the lid gains nothing structurally from the extra plastic.

Floor lightening grid — new in v2

ZoneGeometry
Under the Kraken10 slots, 8 mm wide at 14 mm pitch, X 37 … 163, spanning Y 22 … 112
Under the Pi3 slots, 8 mm wide, X 205 … 295, at Y centres 32 / 44 / 56

Three jobs from one feature

The grid removes mass, admits airflow under both units, and is invisible in the finished build because it sits directly beneath the Kraken and the Pi. It also replaces v1’s separate “floor drains”.

Cable Management

Zip-tie anchors — paired 3 mm slots with a 4 mm bridge between them (so each anchor is a pair at x and x + 7), all in the floor:

RunY spanX positions
Back corridor130 … 14030, 60, 90, 120, 240, 270
Front channel4 … 1220, 168, 250, 285
Power bay88 … 98240, 270

The back run straddles CABLE_Y = 131, so the Kraken’s power and data leads tie down along the corridor they run in.

Lid

ItemValue
Thickness2.4 mm
Fasteners6× M3 self-tapping into Ø8.5 mm posts, 44 mm tall, Ø2.5 mm pilot
Post positions(4.75, 4.75) · (141.5, 4.75) · (307.25, 4.75) · (4.75, 140.25) · (141.5, 140.25) · (307.25, 140.25)
Lid holesØ3.4 through + Ø6.2 × 1.0 mm counterbore from the top face
Register lip2 mm tall, 2 mm wide, sitting 0.4 mm inboard of the interior wall

The register lip is four straight segments, not a loop

X 25 … 287  at  Y 2.9 … 4.9      (front)
X 25 … 287  at  Y 140.1 … 142.1  (back)
Y 25 … 120  at  X 2.9 … 4.9      (left)
Y 25 … 120  at  X 307.1 … 309.1  (right)

Two reasons the lip stops short

  1. A continuous loop would run into the corner lid posts.
  2. It would also collide with the frame’s interior fillet, where there is no flat wall to register against.

Where the lip crosses the two mid posts at X 141.5, a matching relief cut is taken out of the frame (a 2.4 mm-deep cut from Z 44.8) so the lip still seats.

Car Mount Ears (on the floor)

  • 2 pairs at X 60 and X 252, each 30 mm long × 14 mm out × 3 mm thick (EAR_H = FLOOR)
  • Stadium slots 5.5 × 12 mm in each ear, centred at Y −7 and Y 152

Print

Parts3floor, frame, lid, each printed flat with no supports
Hotend0.4 mm — the constraint that forced the split
Print orderfloor first (~2.5 h) so hardware can be bolted in and wired while frame prints
FitsBambu Lab H2S (340 × 320 × 340) with no diagonal trick — 312 < 340
MaterialASA, PETG or PC only
Volume291.6 cm³ total, down 23 % from v1’s 384 cm³

PLA will fail in a parked car

A dashboard or parcel shelf reaches 70–80 °C in the sun, at or above PLA’s glass transition. A PLA box will sag and drop the hardware. Use ASA, PETG or PC.

ASA and PC are the safer picks on heat; PETG’s HDT is the marginal one of the three. Note the drying constraint from bambu-h2s-material-reference: the AMS 2 Pro’s 65 °C ceiling cannot dry ASA or PC — only an AMS HT can.

Exports sit flat on Z = 0

The script moves each body onto the plate before exporting, then deletes the move features so the parametric model is untouched:

PartAs modelledAs exported
floorZ 0 … 7Z 0 … 7 (already flat)
frameZ 3 … 47translated −3 → Z 0 … 44
lidZ 45 … 49.4rotated 180° about X so the top face is on the plate → Z 0 … 4.4

Flipping the lid puts the grille slots and counterbores facing down and the flat inner face up, so the lip prints upward with no bridging.

Verification

The build script does not trust the render. 102 body.pointContainment() assertions, plus a dense line scan of the cable corridor:

  • every SMA slot open, and the wall between two of them still solid
  • 12 V wire slot, switch cutout, both switch screw holes open — and the 0.3 mm web solid
  • LED bore open through both the wall and the collar, and the collar material around it solid
  • both socket bores open, the rib notch open, and the rib between the bore and the notch still solid
  • the whole back cable corridor: X 40 → 250 in 0.5 mm steps at three Y offsets = 1 260 probes, all must be open
  • all 8 Kraken holes open with their boss bodies solid; all 4 Pi slots probed at x + 2 to prove they are really slotted
  • for each of the 10 joint screws: hole open in the floor, pilot open in the frame, boss material solid
  • for each of the 6 posts: pilot open, post body solid, lid screw hole open, counterbore floor solid
  • floor grid slot open and its rib solid; lid grille slot open and its rib solid; lip present at the front, absent mid-span

Result: 102 run, 0 failed.

Never verify an enclosure by looking at a screenshot

A render sees straight through an opening to the far wall, so a hole in the near wall and a hole in the far wall look identical, and a hole that is 2 mm off looks fine. Point containment and line scans are what actually caught the errors.

And a spot-check is not a scan. The v1 corridor collision passed spot-checks and was only found by building the wiring mockup and then re-verifying with a full line scan. See fusion360-mcp-scripting.