← Luke Schreiber

Solid Rocket Motor Static Test Stand

NASA Glenn student design challenge · Summer 2026

Build a stand that measures real thrust and exhaust temperature from commercial model rocket motors, then use the measured curves to size a staged vehicle for a defined mission. Published manufacturer thrust curves are the industry reference — we wanted to know how closely a low-cost instrumented stand could reproduce them, and where the error actually comes from.

Role

My role Electrical lead — instrumentation, control logic, firmware, data analysis
Team 5 interns across EE, ME, AE and CS
Timeline Summer 2026 · 10 weeks
Stack Arduino C++, HX711, Thermocouple, SD, SOLIDWORKS, Python

Why the design changed

Three revisions: a vertical 80/20 frame, a horizontal sled, and the final optical-table mounted stand.

The vertical stand loaded the motor along gravity, which was the physically cleaner arrangement — but once printed and assembled it weighed about 11 oz against a 4 oz target. That dead mass sat directly in the load path and swamped the thrust signal from the smaller motors. Rather than chase weight out of the structure, we rotated the whole design horizontal, which removes stand weight from the measurement entirely. Several 3D-printed parts from the vertical prototype carried straight over.

Arguments for vertical

  • Thrust axis aligned with gravity; reduces side loads and bending moments on the mounts
  • Black powder combustion behaves more like a real launch; hot gas doesn't pool to one side
  • Simpler alignment of the motor to the load path

Arguments against

  • Exhaust reflects back up into the wiring and printed parts
  • Stand mass sits in the measurement and has to be subtracted out
  • Engine install and wiring access are both worse; tipping, vibration and twisting all in play

Structural validation in SOLIDWORKS FEA: the top plate reaches a maximum stress of 1.04 × 10⁷ N/m² at a minimum factor of safety of 5.7, and the back base bracket 1.236 × 10⁷ N/m² at 4.9.

Instrumentation

Sample rate 80 Hz — load cell and thermocouple
Load cell 12.5 kg, HX711 amplifier
Ignition window 4 s, firmware-limited
Arm sequence 2-button, electrically isolated firing circuit

What I built

  • Arduino C++ firmware handling acquisition, display, logging and ignition in a single deterministic loop — load cell and thermocouple sampled, converted to thrust and temperature, written to SD as CSV
  • Dual-button arm/launch interlock: the stand cannot fire unless it is armed and the launch button is pressed. Red indicator flashes while armed, goes solid on fire
  • Firing circuit electrically isolated from the sensor circuit so ignition current cannot corrupt the thrust trace
  • Ignition signal hard-limited to 4 seconds, with logging continuing straight through the burn and a manual abort path from any state
  • LCD showing live thrust, temperature, elapsed time and arm/ready status for the operator at the stand
  • Soldered and assembled the wiring harnesses; documented the build and the calibration procedure

Firmware states: boot → standby → running/safe → armed → firing → post-launch.

10 Hz was enough to see the burn envelope but blurred the ignition spike, which is where the peak thrust lives. We moved to 80 Hz — enough resolution to catch the transient without outrunning the HX711 or the SD write.

Measured vs. published

Four Estes motor classes fired and logged. Raw CSV was cleaned and plotted through a small Python pipeline, then each measured curve was compared against the published ThrustCurve reference for that motor. Impulse is total impulse; Isp is specific impulse.

Motor Max thrust Impulse Isp Peak exhaust Δ thrust Δ impulse
Estes B6 9.22 N 5.00 N·s 62.03 s 241 °F 23.8% 16.3%
Estes D12 24.66 N 17.99 N·s 76.12 s 1420 °F 17.0% 7.1%
Estes E12 25.28 N 32.13 N·s 83.71 s 1421 °F 24.1% 18.1%
Estes F15 29.74 N 49.66 N·s 87.11 s 1425 °F 17.5% 0.1%

Impulse tracked the reference far better than peak thrust — the F15 came in at 0.1% on total impulse while still showing 17.5% on peak. Integrating over the burn averages out the transient error that a single peak sample carries.

  • Load cell hysteresis as thrust rises and falls across the burn — the dominant term, and the reason peak thrust deviates more than total impulse
  • Sensor non-linearity and quantization; uncertainty in the calibration weights themselves propagates into every reading
  • Sled friction in the horizontal configuration, plus possible heating of the load cell during longer burns
  • Component degradation across repeated firings

Mission application

Using the measured impulse rather than published values, the team sized a staged vehicle to reach the Hubble Space Telescope's orbit at 483 km. Vis-viva gives 7.626 km/s for the circular orbit; adding gravity and drag losses of 1.4 and 0.2 km/s puts the requirement at 9.226 km/s. Two staged D12 motors deliver 9.333 km/s across 963.9 g of propellant — enough margin to also cover a Hohmann transfer up to 600 km.

Stage Motor Mass before burn Mass after burn Stage Δv
Stage 1 Estes D12 1006.1 g 524.2 g 1.460 km/s
Stage 2 Estes D12 710.3 g 21.1 g 7.873 km/s
Total — — 963.9 g propellant 9.333 km/s

What went wrong, and what it taught me

  • Lost a full run. The load cell terminal block didn't make complete contact during the C6 test — no thrust data captured. The fix was mechanical, not electrical: strain relief, and a connection check added to the pre-fire checklist
  • Thin, short load cell leads made every reconnection a risk. On a rebuild I'd pigtail them to a proper terminal immediately rather than working the original wire
  • Intermittent LCD language changes pointed at a noisy or marginal data line — a reminder that a display glitch on a test stand is a signal integrity symptom, not a cosmetic one