# IP54 Weatherproofing Kit BOM — Issue #144
**Agent:** sl-mechanical | **Date:** 2026-03-01

IP54-rated enclosures and sensor housings for all-weather outdoor robot operation.

---

## A. Main Electronics Enclosure (`ip54_enclosure.scad`)

### Purchased Hardware

| # | Description | Spec | Qty | Source / Notes |
|---|-------------|------|-----|----------------|
| E1 | PG7 cable gland | IP68, nylon, Ø3–6 mm cable range | 4 | Lapp Skintop® or equivalent |
| E2 | PG9 cable gland | IP68, nylon, Ø4–8 mm cable range | 2 | Lapp Skintop® or equivalent |
| E3 | Silicone O-ring cord | Ø2 mm cord, silicone 70 Shore A | ~800 mm | Cut to lid perimeter length; butt-join with silicone sealant |
| E4 | 40 mm axial fan | 12 V DC, sleeve bearing, >10 CFM | 1 | Sunon MF40201VX or Noctua NF-A4x10 |
| E5 | Foam filter pad | 40×40×5 mm open-cell PPI 30 | 2 | Cut from foam sheet; replace when dirty |
| E6 | Al heat sink pad — Jetson | 60×40×2 mm, adhesive back | 1 | Bergquist GP3000 or Arctic Thermal Pad |
| E7 | Al heat sink pad — ESC | 50×30×2 mm, adhesive back | 1 | Same source as E6 |
| E8 | Thermal interface material | 1 mm silicone pad, Rth ≤ 1.0 °C·cm²/W | 2 | Between board and heat sink pad |
| E9 | Spring washer M10 | For quarter-turn latch preload | 4 | DIN 127, stainless |
| E10 | M3×8 SHCS | Stainless | 8 | Fan + duct mounting |
| E11 | M3×30 SHCS | Stainless | 4 | Quarter-turn latch knob bolt |
| E12 | M3×6 BHCS | Stainless | 16 | PCB standoff mounting (Jetson×4, FC×4, ESC×8) |
| E13 | M3 brass heat-set insert | M3×4 L, Ø5.1 OD | 16 | Press into standoffs with soldering iron |
| E14 | Silicone adhesive sealant | Clear, weatherproof, Dowsil 732 or equivalent | 1 tube | Seal cable gland threads + O-ring cord join |

### Printed Parts

| Part | File | Qty | Print | Mass est. |
|------|------|-----|-------|-----------|
| Enclosure body | `ip54_enclosure.scad` `body_stl` | 1 | PETG, 5 perims, 40% infill, 0.25 mm layer | ~320 g |
| Lid with fan mount | `ip54_enclosure.scad` `lid_stl` | 1 | PETG, 5 perims, 40% infill | ~185 g |
| Fan filter duct | `ip54_enclosure.scad` `fan_duct_stl` | 1 | PETG, 4 perims, 30% infill | ~28 g |
| Quarter-turn latch knob | `ip54_enclosure.scad` `latch_stl` | 4 | PETG, 5 perims, 60% infill | ~6 g each |

### Gasket DXF

| File | Description |
|------|-------------|
| `ip54_gasket.dxf` | O-ring groove outline for laser-cut 2 mm silicone sheet (alternative to cord) |

---

## B. IMX219 Camera Dome (`ip54_sensor_housings.scad`)

| # | Description | Spec | Qty (per camera) | Notes |
|---|-------------|------|-----------------|-------|
| C1 | Clear PC dome cylinder | Ø55×35 mm, 2 mm wall, clear polycarbonate | 1 | Vac-form custom OR source clear plastic sphere halves; DXF from `imx219_dome_2d` |
| C2 | Silicone O-ring | Ø55 mm ID, 2 mm cord | 1 | Seals dome to base ring |
| C3 | Silica gel sachet | 1 g, demountable | 1 | Anti-fog; replace yearly or when saturated |
| C4 | M2×6 SHCS | Stainless | 4 | PCB to standoffs |
| C5 | M3×10 BHCS | Stainless | 4 | Base ring to sensor rail bracket |
| C6 | Anti-fog spray | Rain-X interior or similar | — | Apply to dome inner face during assembly |

| Printed Part | Qty | Print | Mass est. |
|--------------|-----|-------|-----------|
| Dome base ring | 4 (1 per camera) | PETG, 5 perims, 60% infill | ~22 g |
| Retainer ring | 4 | PETG, 4 perims, 40% infill | ~8 g |

---

## C. D435i Sealed Housing (`ip54_sensor_housings.scad`)

| # | Description | Spec | Qty | Notes |
|---|-------------|------|-----|-------|
| D1 | IR-transparent PC window | 88×22×3 mm, >85% T at 850 nm | 1 | Evonik PLEXIGLAS IR 8N or Altuglas IR; export profile from `d435i_window_2d` |
| D2 | Silicone O-ring | 2 mm cord, approx 230 mm perimeter | 1 | Seals window frame to housing front face |
| D3 | Silicone O-ring | 2 mm cord, rear cap seal | 1 | |
| D4 | PG7 cable gland | Rear cap | 1 | For D435i USB-C cable |
| D5 | M2.5×10 SHCS | Window frame screws | 4 | |
| D6 | M3×6 SHCS | Housing-to-bracket top | 3 | |
| D7 | 1/4-20 UNC hex nut | Captured in bottom | 1 | For tripod/bracket mount |

| Printed Part | Qty | Print | Mass est. |
|--------------|-----|-------|-----------|
| D435i housing body | 1 | PETG, 5 perims, 40% infill | ~65 g |
| Window retention frame | 1 | PETG, 5 perims, 60% infill | ~18 g |
| Rear cap | 1 | PETG, 5 perims, 60% infill | ~20 g |

---

## D. RPLIDAR Spinning Dome (`ip54_sensor_housings.scad`)

| # | Description | Spec | Qty | Notes |
|---|-------------|------|-----|-------|
| R1 | Clear PC cylinder | Ø120 mm OD, 1.5–2 mm wall, 95 mm tall | 1 | Source: plastic cylinder tube or custom vac-form; spec from `rplidar_dome_2d` |
| R2 | Clear PC disc cap | Ø120 mm, 2 mm, clear PC | 1 | Seals dome top; laser-cut from `rplidar_dome_cap_2d` export |
| R3 | Silicone O-ring | Ø120 mm ID, 2 mm cord | 1 | Seals dome cylinder to base ring |
| R4 | M3×6 captive bolt | For dome retention clips | 3 | Press-fit into clip |
| R5 | M4×8 BHCS | Deck mounting | 4 | Base ring to deck plate |
| R6 | M3×8 SHCS | RPLIDAR to base ring | 4 | Standard RPLIDAR A1M8 M3 bolts |

| Printed Part | Qty | Print | Mass est. |
|--------------|-----|-------|-----------|
| RPLIDAR dome base ring | 1 | PETG, 5 perims, 60% infill | ~55 g |
| Dome retention clip | 3 | PETG, 5 perims, 60% infill | ~4 g each |

---

## Thermal Management Summary

| Component | Thermal strategy | Max junction | Enclosure budget |
|-----------|-----------------|-------------|-----------------|
| Jetson Orin NX | Al pad → lid → fan forced convection | 95 °C Tj | Target ≤ 60 °C case |
<<<<<<< HEAD
| FC (ESP32 BALANCE) | Passive; FC has own EMI shield | 85 °C | <60 °C ambient OK |
=======
| FC (ESP32-S3 BALANCE) | Passive; FC has own EMI shield | 85 °C | <60 °C ambient OK |
>>>>>>> 291dd68 (feat: remove all STM32/Mamba/BlackPill references — ESP32-S3 only)
| ESC × 2 | Al pad → lid | 100 °C Tj | Target ≤ 60 °C |
| D435i | Passive; housing vent gap on rear cap | 45 °C surface | — |

Fan spec: 40 mm, 12 V, ≥10 CFM at 0.1" H₂O static pressure.
Thermal analysis (simplified): ΔT = Q/(m_dot × Cp) where Q = 15 W (Jetson 10 W + ESC 5 W), airflow = 10 CFM = 4.7 L/s.
ΔT_air ≈ 15 / (4.7 × 1.2 × 1005) ≈ 2.7 °C rise over ambient. With conduction resistance (pad + wall): Tcase ≈ Tambient + 12 °C. At 40 °C ambient → 52 °C max. **Within 60 °C target. ✓**

---

## Mass Summary

| Assembly | Mass est. |
|----------|-----------|
| Enclosure (body + lid + duct + latches) | ~560 g |
| 4× IMX219 domes | ~120 g |
| D435i housing (body + frame + cap) | ~103 g |
| RPLIDAR dome assembly | ~67 g |
| Hardware + glands | ~80 g |
| **Total kit** | **~930 g** |

---

## IP54 Compliance Checklist

- [x] Box O-ring groove: 2 mm cord, 70% compression → IP54 ✓
- [x] Cable glands: PG7/PG9 IP68 rated — exceeds lid requirement ✓
- [x] Fan inlet: labyrinth duct prevents direct splash to fan bore ✓
- [x] Exhaust: double-baffle labyrinth on lid rear ✓
- [x] Camera domes: O-ring sealed to base ring ✓
- [x] D435i housing: O-ring on window frame + rear cap ✓
- [x] RPLIDAR dome: O-ring at dome-to-base seat ✓
- [ ] **⚠ Verify O-ring cord continuity** — no gaps at corners after cut-and-join
- [ ] **⚠ Test after print** — submerge base (static) in 200 mm water for 30 min (IP54 splash test)
- [ ] **⚠ D435i IR window** — confirm PC sheet IR transmission spec with supplier before ordering

---

## Export Commands

```bash
# Enclosure
openscad ip54_enclosure.scad -D 'RENDER="body_stl"'     -o ip54_body.stl
openscad ip54_enclosure.scad -D 'RENDER="lid_stl"'      -o ip54_lid.stl
openscad ip54_enclosure.scad -D 'RENDER="fan_duct_stl"' -o ip54_fan_duct.stl
openscad ip54_enclosure.scad -D 'RENDER="latch_stl"'    -o ip54_latch.stl
openscad ip54_enclosure.scad -D 'RENDER="gasket_2d"'    -o ip54_gasket.dxf

# Sensor housings
openscad ip54_sensor_housings.scad -D 'RENDER="imx219_dome_stl"'  -o imx219_dome.stl
openscad ip54_sensor_housings.scad -D 'RENDER="imx219_dome_2d"'   -o imx219_dome_disc.dxf
openscad ip54_sensor_housings.scad -D 'RENDER="d435i_body_stl"'   -o d435i_body.stl
openscad ip54_sensor_housings.scad -D 'RENDER="d435i_window_2d"'  -o d435i_window.dxf
openscad ip54_sensor_housings.scad -D 'RENDER="d435i_frame_stl"'  -o d435i_frame.stl
openscad ip54_sensor_housings.scad -D 'RENDER="rplidar_base_stl"' -o rplidar_dome_base.stl
openscad ip54_sensor_housings.scad -D 'RENDER="rplidar_dome_2d"'  -o rplidar_dome_spec.dxf
```
