3D-printable enclosure for a compact airborne / ground-station telemetry stack:
| Component | Notes |
|---|---|
| Raspberry Pi 4B | Bottom layer, M2.5 standoffs |
| RFD900A telemetry radio | Adhesive-mounted to left interior wall |
| Quectel EG25-G LTE module | 4× M3 wall-boss screws via Mini PCIe-to-USB adapter |
| Adafruit DS3231 RTC | Sits directly on Pi GPIO pins (no separate mount) |
External dimensions: 116 × 86 × 60.5 mm (L × W × H, body + lid)
Printable in PLA or PETG, no supports required except for I/O wall cutouts.
README.md ← you are here
telem-enclosure-components.pdf ← component datasheets / spec reference
cad/
params.py ← all dimensions as named constants
enclosure.py ← FreeCAD Python build script
render_gif.py ← turntable GIF renderer (needs tools/render-venv)
README.md ← detailed design notes, print settings, clearance table
exports/
enclosure_body.step / .stl
enclosure_lid.step / .stl
enclosure_preview.gif ← turntable animation (regenerate with render_gif.py)
telem_enclosure_assembly.FCStd (body + lid + reference bricks in FreeCAD)
tools/
freecad-mcp/ ← contextform/freecad-mcp bridge for Cursor MCP
render-venv/ ← gitignored Python venv for render_gif.py
FreeCAD.AppImage ← gitignored (download separately, see below)
squashfs-root/ ← gitignored (extracted AppImage runtime)
.cursor/
mcp.json ← FreeCAD MCP server config for Cursor
-
Get FreeCAD 1.0+ — either via apt or AppImage:
sudo apt install freecad # Ubuntu / Debian # or download the AppImage from https://freecad.org/downloads.php # and place it at tools/FreeCAD.AppImage
-
Run the build script:
freecadcmd cad/enclosure.py # or, using the local AppImage: echo 'exec(open("cad/enclosure.py").read())' | \ ./tools/squashfs-root/usr/bin/freecadcmd
This writes
exports/enclosure_body.{step,stl},exports/enclosure_lid.{step,stl},
andexports/telem_enclosure_assembly.FCStd, and prints a clearance report. -
Tweak dimensions in
cad/params.pyand re-run step 2.
See cad/README.md for full design notes, a component clearance
table, mounting hole specs, and print settings.
The repo ships a .cursor/mcp.json pointing to the bundled freecad-mcp bridge.
- Install the Python
mcppackage (already done if you cloned this repo with the venv):cd tools/freecad-mcp && python3 -m venv .venv && .venv/bin/pip install mcp
- In Cursor: Settings → MCP → reload — a
freecadserver should appear. - Launch FreeCAD GUI, then ask the agent to make changes; it drives FreeCAD live
over the Unix socket whilecad/params.pyremains the source of truth.
| Body | Lid | |
|---|---|---|
| Material | PETG (preferred) or PLA | PETG or PLA |
| Layer height | 0.2 mm | 0.2 mm |
| Infill | 20% gyroid | 20% gyroid |
| Walls | 3 perimeters | 3 perimeters |
| Supports | Tree — I/O cutouts only | None |
| Orientation | Open side up | Top face down |
Use M2.5 brass heat-set inserts in the Pi standoffs and lid-corner screw bosses
for reusability. M3 × 6 mm self-tappers secure the Quectel adapter to its posts.
