pi5-runners
OpenSCAD · PETG · no supports

Three Raspberry Pi 5 runners in one printed tower

Three modules that clip together, one Pi 5 and one 40 mm Noctua each, built for CI jobs that hold every core at 100% for half an hour. Nothing is screwed together but the fans.

Free for personal use under CC BY-NC-SA 4.0. Every part prints without supports, in the orientation it downloads in.

≈ 9.7 Kcase air rise over the room, three NF-A4x10s, about 40 W
203%exhaust area against each fan's throat
3 × 1one fan per Pi, each powered from its own GPIO
6STL files, none needing support

Why this shape

CI runners hold 100% CPU for 30 to 50 minutes at a stretch, three boards at once. Every decision follows from sustained load, not from idle.

One fan per Pi

Each module is a complete unit: its own 40 mm Noctua, screwed in from the front and powered from its own Pi. That is 50% more air than the two-fan column an earlier version shared.

Front to back

Each fan draws through its dust filter, pushes over its own SoC and drive, and leaves through rearward louvres in the rear and sides. Never through the lid, which would drop dust on a board.

One way in for dust

The modules run at positive pressure with a single filtered intake, so dust can only enter where the filter is. The ports sit in clean solid wall, flush with the outside.

FansCase air riseMargin to the HAT's 50 °C, 25 °C room
3 × NF-A4x10 5V≈ 9.7 K≈ 15 K
3 × NF-A4x20 5V≈ 8.5 K≈ 16.5 K

ΔT = Q / (ρ · cp · V̇), for about 40 W of heat. The 20 mm fans buy about a kelvin, not a different class of cooling.

What it holds

Every module is the same part, sized for the tallest board, so any board fits any module. The boards are never connected to each other.

ModuleBoardStorageCooling
BottomPi 5M.2 HAT+ (2242 NVMe)Active Cooler
MiddlePi 5M.2 HAT+ Compact (2230 NVMe)Active Cooler, 16 mm standoffs
TopPi 5NoneActive Cooler

Parts

Pick the 40 mm Noctua you fit. It sets the length of the module and the lid. The tray and the filter are the same for both.

Module

print ×3

Floor down. One Pi 5 and its fan each. The modules stack and clip together.

115.9 × 68.0 × 61.3 mm

125.0 × 68.0 × 61.3 mm

Module 421 KB Module 421 KB

Tray

print ×3

Floor down. The Pi screws onto its four feet on the bench, then the tray clicks into the window in its module's floor.

67.6 × 58.6 × 13.9 mm

Tray 135 KB

Dust filter

print ×3

Face down. Glue filter fabric into the pocket on its back and clip it into a module's front.

50.3 × 53.8 × 4.0 mm

Lid

print ×1

Plate down. Clips onto the top module. Solid, so no dust falls on a board.

115.9 × 68.0 × 6.0 mm

125.0 × 68.0 × 6.0 mm

Lid 46 KB Lid 46 KB

A module, a tray, a filter and the lid for your fan, zipped. Print the first three ×3.

All parts · NF-A4x10 136 KB All parts · NF-A4x20 136 KB

Build it

What happens after the download, in the order it happens.

  1. Pi onto its tray

    On the bench. The HAT's M2.5 standoffs thread through the Pi into the tray's printed feet and cut their own thread. Snug, not tight. A bare Pi takes M2.5 × 6 screws.

  2. Fan into its module

    From the front, with the four self-tapping screws in the fan's own bag, not M3s. The heads sink below the filter recess.

  3. Tray into its module

    Hold it just over the floor and short of the rear wall, slide it back until the ports sit in their holes, then press it down until the four clips click. Plug the fan into that Pi's GPIO: 5 V on pin 2 or 4, ground on 6.

  4. Stack

    Tilt each module, hook its front clip in first, then press the rear down until the other three click. Click the lid onto the top one.

  5. Filters

    Glue fabric into the pocket on the back of each filter and click it into its recess, over the screw heads.

  6. You also need

    • 3 × Noctua 40 mm 5V fan, NF-A4x10 or NF-A4x20
    • M2.5 × 6 screws, 4 per Pi without a HAT
    • Filter fabric