Week 1 · computer-aided design

A $230 thermal-vacuum testbed

Update (week 4): I’ve switched my final project to a modular legged robot. I’m leaving this page up as my original week 1 work, along with the files that generated it. I’m returning the vacuum pot and magnets I bought for this version.

Part of my research looks at how groups of robots could survive a lunar night by huddling together to share heat. I'd mostly explored that in simulation, so my first final-project idea was to build a small thermal-vacuum experiment. I wanted to keep it affordable, starting with a stainless-steel vacuum pot rather than a custom chamber. The pot itself would stay as bought. I'd make an acrylic lid with the necessary ports, two 50 × 50 mm boards for heating and temperature measurements, a shutter between them, a rubber gasket and, eventually, a simple vacuum gauge. The shutter would be driven magnetically so I wouldn't need a rotating shaft seal through the chamber.

CAD render of the proposed stainless-pot thermal-vacuum chamber with acrylic lid and external stepper motor
The original chamber concept: a stainless-steel pot, an acrylic lid and a magnetically driven shutter.
CAD cutaway of the proposed thermal-vacuum chamber showing the internal deck, heater boards, shutter and coupling
Cutaway of the CAD assembly, including the internal experiment and the shaft that moves the shutter.
Simplified cross-section of the magnetic drive, showing the acrylic membrane separating the two magnet rotors
Schematic of the magnetic coupling. The 4 mm acrylic membrane separates the inner and outer rotors, leaving a 5 mm gap between magnet faces.
CAD detail showing two heater and temperature-sensing boards with a shutter in between
The internal experiment: two 50 × 50 mm boards, with a movable shutter between them.

Physics first

Before getting into CAD, I checked whether the experiment would be measurable with an inexpensive vacuum pump. In my model, the radiative heat transfer is about 0.8 W. There's also heat transfer through the remaining gas and the supports, but at the 10–50 Pa pressure range I'm targeting, those look small enough to account for. I'd still need measurements at different pressures and temperatures to separate the effects properly.

Logarithmic model plot of radiation, gas conduction and support conduction versus pressure
Thermal-budget estimate from the accompanying Python script. Radiation stays constant while the gas contribution falls as the pressure drops.
ChannelModelResult
Radiation, board to boardParallel plates, effective emissivity 1/(1/ε₁ + 1/ε₂ − 1)about 0.8 W, independent of pressure
Gas conductionSeries continuum + free-molecular, Λ = 1.2 W/m²/K/Paabout 20% of signal at 2 kPa, 10% at 1 Pa, 2% at 0.1 Pa
ConvectionRayleigh number scales with p², off below Ra = 1708dies at roughly 20 kPa, so irrelevant under any pump
Mounting posts1D conduction through 3 posts, 3 mm × 15 mm14 mW (2%) if PLA in the budget script; 3 mW (0.4%) for the nylon posts the CAD script checks. Negligible either way

Parametric CAD, with checks

I modelled the assembly in one parametric Python script, so changing a dimension also updates the parts and the checks. It calculates a 5 mm magnet gap, checks that the shutter doesn't hit the supports, and estimates heat conducted through the mounting posts at about 0.4% of the radiative signal. I went through five CAD versions. I originally considered a large acrylic tube, but the wall thickness needed for a comfortable safety margin pushed it beyond my budget. A metal pot looked like the more sensible starting point.

Exploded CAD render showing the lid, vessel, shutter, deck and internal test hardware
Exploded view of the proposed chamber. I generated the geometry parametrically so I could update it as the dimensions changed.
Top view of the acrylic chamber lid CAD showing openings and central magnetic-coupling recess
Top view of the acrylic lid, with the central magnetic coupling recess and feedthrough locations.

Reproduce it

The CAD and the thermal plot come from two Python scripts linked below. You'll need Python 3.11 or newer.

pip install "cadquery>=2.7" "numpy>=2.0" "matplotlib>=3.10"

python3 thermal_budget.py       # prints the budget table, writes thermal_budget.png
python3 testbed_pot_cad.py      # writes output/cad/*.step, output/cad/stl/*.stl,
                                # output/renders/*.png, parameters.json, design_checks.json
python3 testbed_pot_cad.py --cad-only       # skip the renders while iterating
python3 testbed_pot_cad.py --renders-only   # the opposite

The main dimensions are in the PARAMS dictionary at the top of testbed_pot_cad.py. The pot dimensions came from a product listing, so they would need to be checked against the actual pot before machining anything.

ParameterValueWhat it is
pot_inner_d / pot_height230 / 250 mmthe stainless stock pot, as listed
lid_d / lid_t280 / 20 mmcast acrylic lid; 20 mm so the port holes do not crack it
gasket_mean_d, gasket_w, gasket_depth238, 6, 2.5 mmcast silicone ring in a groove on the lid underside
membrane_pocket_d / membrane_t72 / 4 mmthe thin spot the magnets couple through
magnet_d / magnet_t8 / 3 mmN52 discs, 4 per rotor, 5 mm face gap
puck_size / puck_gap50 / 20 mmthe two heater boards and the distance between them
occluder_swing_deg90shutter sweep; the script errors out if a post is inside it
hot_support_post_d3 mmthree nylon posts, the parasitic path in the budget

After changing a parameter, check output/cad/design_checks.json. It reports the magnet gap, possible shutter collisions and estimated heat conduction through the supports. I added those checks because they’re easier to forget when adjusting the model by hand.

Files

testbed_pot_cad.pythe entire machine, parametric (CadQuery)
thermal_budget.pythe budget plot and table
parameters.jsonthe exact dimensions used for the renders
design_checks.jsonthe self-check output for those dimensions
requirements.txtpinned Python dependencies
coupling_schematic.pythe simplified magnetic-coupling cross-section

I used CadQuery for the CAD and matplotlib for the thermal plot. AI assistants helped with the two scripts, and I checked the physics calculations myself. The acrylic-tube idea was ruled out with an initial buckling calculation, which was a useful reminder to check the loads before getting attached to a design.