Introduction: Using the Intel Edison on a Cold Gas Reaction Control System for a Sounding Rocket

What's the purpose of making a reaction control system?

Conventional attitude control systems for amateur rockets used attached fins, which offer passive stability control. To perform active stabilization and maneuvers, servo-motor controlled fins are used in lower atmosphere.

Due to low air density in upper atmosphere, conventional rocket fins of any kind have little affect on rocket attitude over 30 Kilometers above the Earth's surface. This is where a cold gas reaction control system becomes a necessity if you want to control roll and point the rocket accurately.

Cold gas reaction control systems can retail for more than $500,000 usd (roll-action only); However, this assembly can be built for under $10,000 if all of the custom parts were contracted out, or well under $2,000 if the machining can be done in-house.

Step 1: Background

This year our mechanical engineering capstone team from the Maseeh College of Engineering and Computer Science at Portland State, decided to take on the challenge of building a cold gas reaction control system (RCS). The RCS was built for the Portland State Aerospace Society, a crowdfunded and open-source amateur space program / citizen science project. The RCS module will be flown on sounding rockets for high altitude launch missions. The hope is for PSAS to eventually launch a cube-sat payload into orbit, and with this device we are one step closer.

Luckily, instructables.com and Intel donated the Intel Edison board, making testing easier, safer, and hands free.

note: This system is able to use custom 3D printed de Laval nozzles to generate over 2.5 lbf (11 N) of thrust from 100psi of Nitrogen for roll and pitch maneuvers. A high resolution 3D printer (32-micron or under) is necessary to avoid viscous losses from rough surface finish.


What does this instructable offer?

This instructable is mostly open source, and all of the CAD files and some of the controller code can be found on our github account. We use 3D printed nozzles, that can be modular and optimized for specific missions; The Matlab nozzle optimization code is included. The Matlab program to determine gains for the controller, and the roll-control programs for Python and Arduino are both given. We are also including our parts list for both commercial off-the-shelf and custom parts.

What this instructable does not offer:

The purpose of this instructable is to explain a broad overview of how to build the system for amateur rocketry projects. We will not give a step-by-step guide of how to do everything. We will also not include pitch/yaw action control programs, because I don't need a guilty conscious.

Be aware that even with this guide, this is still a relatively difficult project; it should not be treated as DIY potato gun or blue tooth speaker. With that being said, it is still crazy fun to build and play with.

Disclaimer: We are mechanical engineering students. We are definitely not responsible for anyone else's safety. This a difficult project in almost every aspect of engineering that it involves. Also, due to the 4500 psi tank of nitrogen on the high pressure side of the system, it is extremely dangerous! Please use common sense. If you are uncomfortable with any part of the mechanical setup, STOP and consult a professional.

Step 2: Components

This RCS design is meant to be housed in a 36in long x 6in I.D. carbon fiber tube, making the complete module.

Nozzle rings and attachments are specifically manufactured to mate with custom designed mounting rings secured to the housing tube. Feel free to scale the design to your projects specific need; take the solid model files found in the Github repository and modify them for your own project :)

All CAD files are in SolidWorks, and all SW assemblies can be found in the PSAS reaction control repo

1 x Nozzle Ring out of Machined aluminum 8x8x2 1/2" 6061 - solid-works part

1 x Motor retention ring - out of Machined aluminum 6061 - solid-works part

2 x Roll-Yaw nozzle set - solid-works part

2 x Pitch nozzle set - solid-works part

1 x housing 30" x 6" I.D. tube 3/10" wall thickness -- acrylic for show model / carbon fiber for flight model

1 x 100' roll of 3/8" 210 psi polyethylene semi-rigid tubing - 5181K25

6 x 3-way Humphrey solenoid valve 320-24DC

2 x Wye push-to-connect fittings 5225K858

20 x push-to-connect fittings C2-425-0628

1 x 6-way manifold

1 x pressure regulator - kpr1gwf425c20000

1 x 4' - 1/4" steel tubing - 89895K411

1 x 118ci carbon fiber 4500psi tank - Guppy version

1 x Intel Edison Arduino board

3 x 3 cell Li-Po batteries

1 x MOSFET Arduino shield 3V in - 24V out - Board and schematic files

1 x Arduino mezzanine shield

1 x MPU 6050 breakout board

1 x tank adapter

1 x ball valve

4 x 1/4" NPT to 1/4" straight tube fittings

1 x 1/8" NPT to 1/4" straight tube fitting

1 x Schrader Nitrogen Charging valve

1 x rubber hydraulic fill hose

1 x 1/4" NPT needle valve to regulate fill rate

1 x pressure gauge

all mounting screws used are flat-head 4-40 screws. Lengths are 1/2" for mounting metal to metal and 1/4" for mounting plastic to metal

Step 3: Manufacture

Each one of these list items could have there own manufacture instuctables, but for the sake of brevity we'll give a modest overview and tools needed. If you do not have the means or know-how to machine the parts, consider outsourcing to the professionals.

Machining Parts

  • Spider Ring
  1. CNC machined out of a half inch plate of 6061 Aluminum
  2. we used a 1/2" end-mill with 1/8"radius to machine this part
  • Nozzle Ring
  1. CNC machined out of 8"x8"x2-1/2" thick plate of 6061
  2. we used a 1/2" end-mill and a 1/8" ball end-mill to cut out the ring shape
  3. we used a CNC rotary indexer to make all of the radial holes around the ring
  • 6-way Manifold
  1. Machine lathed out of 6061 aluminum 3" round stock
  2. we used a manual rotary indexer to make the initial radial holes
  3. we used a 2-axis CNC with a pivoting head to drill and thread the ports
  • Tank Adapter
  1. Machine lathed out of 6061 aluminum 1-1/2" round stock
  2. we used a dye nut to cut the threads for the screw in shaft
  3. we used an end-mill to drill the initial holes and tapped the holes with a traditional plug tap and bottoming pipe tap
  • Solenoid Brackets
  1. CNC machined out of 6061 aluminum 063 sheet
  2. bent to desired shape on a sheet metal bender
  • Modifying Solenoids for fit (due to the size constraints of the system, the solenoids needed to be modified)
  1. we used an end-mill to cut one edge of each solenoid at a 60 deg. angle

3D printing

  • All the nozzle were printed by 3D fixtures with poly-jet printers. Resolution of the the print must be less than 32 microns for the appropriate surface finish
  • Print material is Visijet Crystal

Tube bending


PCB Manufacture

  • MOSFET shield for Arduino

We made this board in-house using CNC circuit routing and a plating tank. The schematic from the Github repo has all of the part numbers for diodes, transistors, resistors and capacitors used.

Step 4: Sizing the Nozzles

This system is the first of its kind to use 3D printed nozzles for two functional reasons.

First, the 3D printed nozzles used in this system are modular, and can be replaced for more ideal geometries based on their flight path. Large rockets are expensive, and are usually flown on several missions before retiring. Each flight of the rocket could be a different mission with new altitudes and trajectories. Because a nozzle size is fixed for the duration of each launch, its dimensions must be optimized to the best nozzle shape of the entire flight.

Second, manufacturing the changing complex internal geometries needed, could (realistically) only be done by additive manufacturing. To reach maximum performance of each nozzle, the most efficient shape must be used. A converging-diverging nozzle works by gradually constricting the fluid flow until reaching a speed of mach 1 in the smallest area of the nozzle, the throat. Once the fluid has reached its maximum velocity, the nozzle diverges an causing the fluid speed to increase, and go into a supersonic regime. The most efficient form of the converging-diverging nozzle, is the de Laval nozzle. The de Laval nozzle utilizes parabolic geometries to increase speed of the fluid making most the efficient flow. This provides the most amount of thrust per gas used.

The nozzle flow rate was tested using Schlieren photography to prove supersonic flow. From the video in this step, you can see the shock cells formed out of the business end of the nozzle. These mach diamonds indicate supersonic flow, and the most efficient flow rate for our thrusters.

To model the nozzles for different atmospheric conditions, use the nozzle modeling files to get the best throat size and internal curvature, and then change the appropriate parameters in the SolidWorks nozzle files.

We apologize that we could not use more open source programs for modeling the system. However, these seem to be the best tools for the job at a low cost to college students

Step 5: Control the Roll

Control theory is tedious, and long, and borderline torture; however, it is extremely satisfying once you write and implement a working controller.

Attached to this step is an image of the simulated impulse response verses the actual impulse we obtained.

This instructable will lightly go over some of the controls parameters and results from this specific project. If you want a more in depth controls tutorial there are some amazing walkthroughs out there.

When designing a controller for this system, there are several immediate factors that must be taken into account.

First, this is a digital system, and should not be modeled as continuous.

Second, the actuator PWM time is 200ms (5Hz). Because consumer grade solenoids are being used (over custom aerospace grade solenoids) a trade off was made between actuator response time and the solenoid flow rate coefficient; we settled with a 20ms open lag in the solenoid.

Third, there is a limited supply of Nitrogen for the 20(+) second flight. Ultimately a Linear Quadratic Regulator will be used weight to the cost of fuel usage.

Fourth, the solenoids are ON / OFF, and do not vary like proportional solenoids. To obtain a gradient in thrust, the control software changed duty cycle to match the impulse needed per rate of rotation.

The digital control algorithm used was only with a proportional controller; however, it was sized using bode analysis to have 60 deg of phase margin and -6dB of Gain margin. These bode margins allow for system functionality with up to a 50% variability in environmental parameters (e.g. weight change, altitude change, wind speed, unexpected drag).

Step 6: Programming the Edison to Control the System

To control the RCS we used an Intel Edison for actuating the cold gas solenoids, and an MPU-6050 to determine roll rate.

At first, we wrote controls to use the Edison as just an Arduino Uno, and in all reality the code is simple enough that we could have used just that. However when we wanted remote functionality through wifi, we switched to the Ubilinux OS that can be installed on the Edison through this tutorial.

After implementing Ubilinux, we were able to ssh into the Edison with any computer on the same network to call different control algorithms or maneuvers. To control hardware with the Edison while in Ubilinux, all of the control programs were written in python

Step 7: Slow Your Roll

3D Printing Contest

Participated in the
3D Printing Contest