Engineering a 200+ MPH 3D Printed Rocket
by KristofH032 in Outside > Rockets
5564 Views, 64 Favorites, 0 Comments
Engineering a 200+ MPH 3D Printed Rocket
What happens when you take a model rocket… and design every part of it from scratch?
This project began as an experiment in engineering a high-performance rocket optimized for speed, efficiency, and data collection. Instead of using a commercial kit, every major component was designed from the ground up: a Von Kármán profile nose cone for low drag, true airfoil fins for aerodynamic efficiency, and a lightweight 3D-printed airframe optimized through simulation.
Using OpenRocket to model the vehicle, I iterated on the design to balance stability, weight, and performance. The final configuration weighs just 112 grams without the motor, yet simulations predict over 200 mph top speed and nearly 20 g of acceleration during launch on a standard D12-7 engine.
But the rocket itself is only part of the project.
The design also includes a compact telemetry payload built around an RP2040 microcontroller and a LoRa RFM95 radio, capable of transmitting flight data to a custom ground station at about 7 updates per second. The system streams altitude, acceleration, battery voltage, signal strength, and even full 3D attitude estimation, which is visualized in real time using a custom desktop application.
Of course, real engineering projects rarely work perfectly on the first attempt. The initial prototype revealed several important lessons about stability margins, parachute packing, and weight optimization, ultimately leading to a redesigned rocket that performed significantly better.
In this Instructable, I'll walk through the full engineering process:
- designing the aerodynamics
- optimizing the rocket with simulation
- building lightweight 3D-printed structures
- developing a real-time telemetry system
- and preparing the rocket for flight testing
Let’s build a rocket. 🚀
Supplies
This rocket came together from a mix of 3D‑printed parts, hardware-store components, Estes rocketry gear, and a few small tricks to keep everything light, strong, and heat‑resistant. Here’s everything that went into building the final 112‑gram Version 2:
Rocket:
- Eye bolt with two hex nuts — main shock‑cord anchor
- Cross pin (small screw + hex nut) — anti‑zipper anchor near the top of the airframe
- 500 lb Kevlar line — heat‑resistant lower shock cord
- Estes elastic shock cord — upper shock cord for gentle deceleration
- Estes 18" parachute
- Aluminum tape — thermal shielding inside the body tube
- Masking tape — insulating wrap around the motor
- Estes D12‑7 motor
- Estes recovery wadding
- Estes ignitor + plug
- Launch rod
- Launch controller
- PTFE Dry Lubricant — decrease rod drag
Telemetry Module:
- Adafruit Feather RP2040 RFM (915 MHz)
- Adafruit SD Card Reader Breakout Board + Card
- BNO085 Breakout Board
- Bosch BMP280 Breakout Board
- Small LiPo Battery (350 mAh)
- Some resistors
- M1.5 screws
- Wires
Fabrication Tools and Materials:
- 3D printer (I used Ender 3 Pro) + Filament (I used White Overture PLA Pro)
- Soldering Iron
- Basic hand tools (hex keys, screwdrivers, cutters) — assembly and hardware installation
- Sandpaper — preferably the spongy kind for smoothing prints
Software:
- OpenRocket — For simulation, optional
- Arduino IDE + Code
- Fusion 360 — Only if you want to redesign
- Slicer of choice (I used Ultimaker Cura)
Designing the Rocket
Before printing anything, the entire rocket was designed and simulated to balance performance, stability, payload space, and safe recovery. Every major dimension and feature came from a specific constraint or engineering decision.
Choosing the Motor
The rocket was designed around D-class motors, specifically the D12-7. I chose this motor partly because I happened to find a rare 3-pack locally, but it also provides an excellent balance of thrust and accessibility for mid-size model rockets.
Simulations predicted:
• ~20 g peak acceleration
• Over 200 mph top speed
• Significantly higher altitude after weight optimization
Designing around a fixed motor size meant the rest of the rocket could be optimized for maximum efficiency and minimum weight.
Payload-First Design
Unlike most rockets, this one was designed around the payload first.
The telemetry system uses an RP2040 microcontroller mounted to a removable electronics sled. Because the board has a fixed width, the internal diameter of the rocket was determined first, ensuring the sled could slide in and out of the nose cone easily.
Once the inner diameter was established, the outer diameter followed from the chosen wall thickness.
- Version 1 outer diameter: 31.5 mm (4 wall layers)
- Version 2 outer diameter: 30.7 mm (3 wall layers)
Reducing one wall layer saved a significant amount of weight and ultimately improved the predicted altitude by almost 70 meters.
The electronics sled is secured inside the nose cone using a threaded bulkhead. When tightened, the bulkhead presses the sled forward and locks it firmly in place. An eye bolt through the bulkhead anchors the shock cord and is secured with hex nuts on both sides to prevent movement.
Aerodynamic Design
Several aerodynamic features were included to minimize drag and maintain stable flight.
Von Kármán Nose Cone
The nose cone uses a Von Kármán profile, which is commonly used in rockets because it minimizes drag for subsonic and transonic flight.
Fusion 360 does not generate this profile directly, so I wrote a small Fusion add-in to generate a true Von Kármán spline and revolve it into the final nose cone geometry.
Airfoil Fins
The fins use a true airfoil cross-section instead of simple flat plates. This reduces drag and improves aerodynamic efficiency during high-speed flight.
I also avoided sweeping the fins backward. While swept fins are common, they tend to snap more easily during hard landings, so these fins are straight for improved durability.
Launch Lugs
Two launch lugs guide the rocket along the rail during liftoff. Both were filleted and chamfered into the body to smooth the airflow and reduce drag.
I also experimented with different inner diameters for the launch lugs to balance two competing factors:
- a tighter fit improves reduces wobble on the rail, but has more drag during liftoff
- a larger diameter reduces rail drag, but may wobble more
After testing several sizes, I selected 9.65mm, as it provided reliable guidance during launch while keeping the rod drag minimal. In addition, I sanded the rod down with 800 grit to ensure a smooth surface, and coated it in PTFE Dry Lubricant to ensure a clean liftoff.
Stability Tuning
Stability was carefully tuned using simulation.
The first design targeted a stability margin of about 2.2 calibers, which seemed conservative at the time. However, this turned out to be too stable, causing the rocket to weathercock into the wind during flight.
For the redesigned rocket, the stability margin was reduced to about 1.3 calibers, which is still safely stable while reducing weathercocking.
Recovery System Design
OpenRocket simulations also helped determine the recovery system.
By examining the predicted ground-impact velocity, I was able to choose an appropriately sized parachute. After evaluating several options, I selected an 18 inch parachute, which provided a safe descent rate while still packing into the limited space inside the airframe.
The shock cord uses a two-material design:
• Kevlar near the motor for heat resistance against the ejection charge
• Elastic further forward to absorb shock and reduce stress on the payload electronics
The Kevlar and elastic are connected with a double fisherman’s knot, and bowlines attach the cord to both the nose cone and the internal anchor point.
Inside the body tube, a cross-pin anchor secures the shock cord. This pin is actually a screw cut to the exact length and threaded into an embedded hex nut. A plastic spacer prevents the Kevlar from rubbing against the screw threads.
Motor Mount and Internal Structure
The motor enclosure was designed slightly oversized—about 1 mm larger on each side—to allow space for insulation and easy insertion.
A small retention lip above the motor prevents it from sliding forward and helps seal the ejection charge so pressure is directed upward to deploy the parachute.
The interior of the rocket transitions smoothly from the motor mount to the payload section using a revolved spline, which helps distribute ejection pressure more evenly throughout the airframe.
To protect the airframe:
• the interior is lined with aluminum tape to reflect heat
• the motor is wrapped with masking tape for retention and insulation
Pressure Sensing Improvements
The second version of the rocket includes breather holes in the nose cone. These allow outside air pressure to reach the onboard barometer so altitude measurements remain accurate during flight.
Version 1 did not include these holes, which would have prevented reliable pressure readings.
Minimizing Drag and Ensuring Clean Ejection
The entire exterior of the rocket was sanded smooth to reduce aerodynamic drag and hide printing imperfections.
To ensure reliable parachute deployment, the fit between the body tube and nose cone was carefully adjusted. I sanded the joint until I could blow the nose cone off using only air pressure from the back of the rocket, confirming that the ejection charge would easily separate the rocket during flight.
Making the Rocket
With the design finalized, it was time to turn the CAD model into a real rocket.
3D Printing the Airframe
All structural parts were printed on an Ender 3 Pro using Overture PLA Pro (white). PLA Pro provides a good balance between stiffness, printability, and impact resistance, making it well suited for lightweight airframes.
During early prints I ran into an issue where the Z-seam was not fully closing, leaving a visible gap along the height of the rocket. This was solved by slightly reducing the retraction distance and increasing the retraction speed, which allowed the seam to close properly and improved overall print quality.
After printing, the exterior of the rocket was sanded smooth to remove layer imperfections and reduce aerodynamic drag.
Discovering a Design Oversight
When I began packing the parachute, I discovered a major problem: the rocket was too short to fit the recovery system.
During the design phase I had unintentionally chosen a body length that matched my maximum usable build height rather than the actual space required by the parachute.
To fix this, I designed and printed a 75 mm extension tube that couples the body tube to the nose cone. This added just enough internal volume for the parachute while keeping the rest of the rocket unchanged.
Because of the printer height limit, this extension remained part of the design for Version 2 as well.
Finishing the Rockets
The first rocket (Version 1) was finished with matte gray spray paint and custom vinyl decals cut on a Cricut. A lot of time went into getting the graphics right, which made its later failure especially unfortunate.
Version 2 remains unpainted, primarily to save weight and simplify the rebuild.
Preparing the Interior
Before final assembly, the inside of the airframe was lined with aluminum tape to reflect heat from the motor’s ejection charge.
The motor fit was adjusted until it held securely using masking tape, which also provides insulation and retention.
The shock cord was then installed:
- Kevlar near the motor for heat resistance
- Elastic further forward to absorb the shock of parachute deployment
Both sections were connected using a double fisherman’s knot, with bowlines used to secure the cord to the nose cone and internal anchor point.
Packing the Recovery System
To prepare the rocket for flight:
- Recovery wadding was inserted above the motor to protect the parachute from the ejection charge.
- The Kevlar portion of the shock cord was coiled on top of the wadding.
- The elastic section was Z-folded above it to prevent tangling.
- The parachute was folded and inserted last.
Initially, I believed the parachute was packed correctly. However, shortly before the launch of V1 I decided to refold it after hearing that parachutes should ideally be packed as close to launch time as possible.
When I reopened the rocket, I discovered that the parachute lines had become tangled. I was unable to fully untangle them in time and assumed it would still deploy properly.
This assumption turned out to be wrong.
Simulating the Payload
Both rockets were flown without the telemetry module installed, since I wanted to verify that the vehicle itself was reliable before risking the electronics.
To maintain the correct mass and balance, I created a blank electronics sled with two screws attached, matching the weight of the real telemetry system.
This allowed the rocket to fly with the same center of mass as the final configuration while keeping the payload hardware safe during early testing.
Telemetry Payload
One of the main goals of this project was to turn the rocket into a data-collection platform, capable of transmitting live flight data to a ground station.
To accomplish this, I designed a compact telemetry module that measures the rocket’s motion and environment and transmits the data to the ground in real time using LoRa radio communication.
The payload is mounted on a removable electronics sled inside the nose cone so it can be easily inserted, removed, or replaced between flights.
Payload Hardware
The telemetry system consists of the following components:
- RP2040 RFM microcontroller (with built-in LoRa RFM95 radio)
- Bosch BMP280 barometer and thermometer
- BNO085 9-DOF IMU
- microSD card reader
- 350 mAh LiPo battery
I chose the RP2040 because it supports dual cores, which makes it ideal for handling multiple real-time tasks simultaneously. The board I used also includes an integrated RFM95 LoRa radio, enabling long-distance, reliable communication using spread-spectrum transmission.
The BMP280 provides altitude and temperature measurements. It’s a reliable sensor that I had used in previous projects and already trusted for pressure-based altitude estimation.
For motion tracking, I selected the BNO085 IMU, which provides 9 degrees of freedom and fast sensor fusion capabilities.
Finally, the SD card reader allows all telemetry data to be recorded onboard so the flight can be replayed and analyzed later. (The ground station replay feature is planned but not yet implemented.)
Electronics Sled
The payload electronics are mounted to a custom 3D-printed sled, which was one of the most meticulous parts of the rocket to assemble.
The sled consists of:
- a flat rectangular electronics plate
- a perpendicular circular mounting plate
The circular section fits into the nose cone and includes access holes that align with the USB-C port on the RP2040 and the SD card slot, allowing easy programming and data retrieval without removing the entire payload.
Component placement was carefully arranged to maximize space:
- The RP2040 sits on one side of the sled.
- The IMU and SD card reader are mounted on the opposite side.
- The BMP280 is stacked above the IMU.
- The 350 mAh battery fits neatly above the RP2040.
This compact layout allows several hours of runtime per charge, which is more than enough for multiple launch attempts.
Firmware Architecture
The telemetry firmware uses the RP2040’s two cores to split the workload.
Core 0 – Sensor Processing
- polls the IMU and barometer
- calculates derived values such as altitude and velocity
- updates shared variables used by the rest of the system
Core 1 – Communication and Logging
- writes telemetry data to the SD card
- sends packets over the LoRa radio
The IMU and barometer communicate using I²C, which I increased to 4 MHz in order to keep up with the IMU’s data output.
The system logs data to the SD card at 50 Hz, while transmitting telemetry to the ground station at about 7 updates per second.
To reduce transmission size and increase efficiency, packets are stored and transmitted as binary structs rather than text.
Each packet includes:
- barometric altitude
- acceleration
- velocity
- temperature
- battery voltage (measured through a voltage divider)
- signal-to-noise ratio from the radio
- rocket orientation as a quaternion
- sensor-fusion data from the IMU
The quaternion orientation is calculated using a custom fusion approach. This was necessary because the rocket may experience more than 20 g of acceleration, while the IMU saturates at ±16 g. By filtering and controlling the fusion process myself, I can prevent these extreme accelerations from corrupting the orientation data.
Ground Station Hardware
On the ground, a second LoRa radio receives the transmitted packets.
This receiver module consists of:
- an ESP32
- an RFM95 LoRa radio
- a reference BMP280 barometer
The ESP32 receives packets from the rocket, verifies them using a CRC16-CCITT checksum, and then forwards the decoded telemetry to the computer via serial connection.
The reference barometer provides ground-level pressure data, allowing altitude readings from the rocket to be compared against local conditions.
Ground Station Software
A custom WPF desktop application acts as the ground station interface.
When a packet is received:
- The data is timestamped using system time.
- Altitude and acceleration are plotted on live scrolling graphs.
- The rocket’s orientation is displayed using a real-time 3D rocket model driven by the quaternion data.
Additional telemetry such as battery voltage, signal strength, and temperature is displayed alongside the graphs.
Every received packet is also printed to a serial monitor window, allowing raw telemetry to be inspected during flight.
The ground station can optionally log incoming telemetry to a file, ensuring that even if the onboard SD card fails, flight data is still preserved at the ~7 Hz radio update rate.
Although the telemetry module has not yet flown, it was designed to fit perfectly within the rocket’s payload bay and operate autonomously during flight. Once installed, it will transform the rocket from a simple vehicle into a real-time flight data platform capable of capturing and visualizing the entire launch.
Prototype 1 - What Went Wrong
Engineering projects rarely succeed perfectly on the first attempt, and Prototype 1 of this rocket was no exception. The first flight revealed several problems—some mechanical, some environmental—that combined to produce a less-than-ideal outcome.
The rocket did launch successfully and flew under power as expected, but recovery did not go as planned. After deployment, the parachute failed to inflate properly and the rocket ultimately landed in a tree, where it still remains today.
Looking back at the flight, several factors contributed to the failure.
Tangled Parachute Lines
Shortly before launch, I repacked the parachute, since it is generally best to fold recovery systems as close to launch time as possible.
During repacking, I discovered that the parachute lines had become tangled. I wasn’t able to completely fix the issue in time and assumed the parachute would still deploy well enough to slow the rocket.
This turned out to be incorrect.
Although the parachute was successfully ejected during flight, the tangled lines prevented it from fully inflating, which drastically reduced its ability to slow the rocket.
High Winds
The launch took place in winds of roughly 11 mph, which is fairly strong for a lightweight model rocket.
While this was outside my control, it had a major impact on the flight profile.
Stronger winds increase the likelihood of weathercocking, where the rocket turns into the wind shortly after leaving the launch rail.
Excessive Stability
Prototype 1 was designed with a stability margin of about 2.2 calibers, which I initially believed would be a safe, conservative choice.
In practice, this made the rocket too stable.
Highly stable rockets tend to aggressively align themselves with the wind during ascent. Combined with the already strong winds, this caused the rocket to turn significantly into the wind, reducing its vertical climb and lowering its apogee.
Because the rocket reached a lower altitude than expected, the D12-7 delay charge fired several seconds after the rocket had already begun descending, making the deployment timing far from ideal.
Launch Rod Whip
For cost reasons I used a launch rod instead of a rail. Launch rods are typically 2–3 times cheaper, but they are also more flexible.
During liftoff the rod likely experienced rod whip, where the rod bends slightly under thrust and then snaps back as the rocket leaves the guide.
Shortly after clearing the rod the rocket began corkscrewing slightly, which is a common symptom of rod whip.
This effect was amplified by the rocket’s very low mass combined with the comparatively heavier payload, which created a small pendulum effect as the rocket accelerated.
Although this wasn’t the main cause of the failure, it likely contributed to the less stable ascent.
Launch Site Setup
The final issue was surprisingly simple: the launch area was not level.
Downwind of the launch pad there was nearly two kilometers of open field, which should have made recovery easy. However, because the launch pad was slightly tilted and the rocket weathercocked into the wind, the flight path shifted sideways instead.
Rather than landing in the open field, the rocket drifted left into a line of trees, where it became permanently stuck.
Lessons from Prototype 1
While losing the rocket wasn’t the intended outcome, the flight provided extremely valuable feedback:
• parachute packing must be done carefully and checked thoroughly
• high stability margins can cause excessive weathercocking
• strong winds significantly affect lightweight rockets
• launch rod flexibility can influence early flight behavior
• launch pad alignment matters more than expected
All of these lessons directly influenced the Version 2 redesign, which addressed many of these issues and improved the rocket’s performance.
The Redesign
After analyzing what went wrong with Prototype 1, I set out to redesign the rocket with a focus on reliability, efficiency, and improved flight performance. The second version keeps the same overall architecture but incorporates several key improvements that directly address the issues discovered during the first launch.
One of the most important additions was a set of three barometric vent holes in the nose cone section of the airframe. These allow outside air pressure to reach the onboard barometer so it can measure altitude accurately during flight. The holes were carefully positioned below the converging portion of the nose cone, where airflow remains relatively stable, preventing dynamic pressure effects from corrupting the sensor readings.
Weight reduction was another major improvement. By reducing the airframe from four wall layers to three, the rocket became more than 40 grams lighter while still maintaining sufficient structural strength. This change alone increased the predicted altitude by nearly 70 meters in simulation. The reduced mass also shifted the center of gravity slightly rearward, lowering the stability margin to 1.3 Cal and significantly reducing the likelihood of weathercocking in windy conditions.
The recovery system also benefited from lessons learned during the first launch. The body tube extension that was added late in the first design was intentionally incorporated into the second version to ensure adequate space for the parachute. During preparation, the parachute lines were carefully coiled and packed to prevent the tangling that caused the first recovery failure.
The redesign process also improved the manufacturing workflow. While the first rocket took nearly three months to design, iterate, and assemble, the second version was completed in just three days thanks to the experience gained during the initial build.
Although Version 2 lacks the paint and vinyl decals that made the first rocket visually striking, it represents a far more refined engineering solution: lighter, stronger, and optimized for speed and reliable flight.
Success!
After redesigning the rocket and addressing the issues discovered during the first launch, it was finally time to test Version 2.
This time, the launch conditions were far more favorable. Winds were extremely light—less than 2 mph—which significantly reduced the risk of weathercocking. I also took extra care setting up the launch pad. Because the ground at the launch site was slightly uneven, I placed padding under one leg of the stand and used a level to verify that the launch rod was perfectly vertical before ignition.
With everything prepared, the rocket lifted off cleanly.
The ascent was smooth and stable, with much less of the corkscrewing behavior seen during the first flight. The redesigned stability margin and lighter airframe allowed the rocket to climb almost perfectly vertical, reaching approximately the altitude predicted by simulation.
Just after apogee, the ejection charge fired and the parachute deployed almost exactly as intended. Unlike the first attempt, the parachute fully inflated and slowed the rocket to a gentle descent.
The rocket touched down less than 10 meters from the launch site, making recovery quick and easy. Inspection after landing showed no damage, confirming that the airframe, recovery system, and structural design all performed exactly as planned.
Seeing the redesigned rocket fly successfully was incredibly rewarding. The improvements made after the first prototype—reducing weight, lowering the stability margin, improving parachute packing, and launching in calmer conditions—made a dramatic difference in performance and reliability.
This project began as an experiment in designing a custom rocket from scratch, but it ultimately became a lesson in iteration, simulation, and learning from failure. The first prototype exposed weaknesses in the design, but those lessons directly informed the improvements that made Version 2 a success.
And while the rocket now flies reliably on its own, the next step is to install the telemetry payload and begin collecting real flight data.
After all, the best part of engineering isn’t just building something that works—
it’s building something that keeps getting better. 🚀