(I try to link to the products I used so you can find them more easily. If you purchase them from these links I may receive compensation from affiliate programs. I am not employed or influenced by the manufacturers or distributors.)
One important goal for this project is to be able to make automated in-flight decisions and monitor flight progress. To accomplish this we need some kind of flight computer.
Something you may not know about me – I love Arduinos. With just a tiny amount of programming and wiring knowledge you can build almost anything. The Italian rapid prototyping board has dramatically changed the world of inventing and product design. The Arduino system has been used not only by hobbyists, but educators, NASA and even the Department of Defense have been known to employ the tiny prototyping boards in research and development projects.
If we’re planning to keep the body as small as possible, an obvious choice would be the Arduino Nano because of its size. You can even try the Seeeduino, an offbrand controller that claims to be the smallest arduino-based controller on the market.
I wanted more than just to launch a controller board into the air, though. I wanted to know what it was doing. Where is it going? How fast? How high?
To be able to answer these questions you need a few components. The first is called an IMU or Inertial Measurement Unit. IMU capabilities are measured in axes, and axes are grouped into 3’s based on what they measure. The three axes of any 3-dimensional system are X, Y and Z. Think of a 3-dimensional graph:
In order to understand how something moves in space you need to understand translation and rotation, which make up the first two types of sensor in an IMU. Translation is measured by an accelerometer, linear acceleration and deceleration (which is just negative acceleration) is quantified in g’s of force, which can be best explained as how strong the acceleration force is in comparison to gravity. One g is the same amount of force as you feel pulling you down at sea level, and 5g is five times that amount of force.
Rotation is measured by a gyrometer, which uses degrees per second (dps). 360dps on the z axis means you turn a full circle around that axis in one second. We sometimes refer to these motions by the Euler Angles – “pitch”, “roll” and “yaw” – when talking about flight. This is more difficult with rockets, since rocket bodies are typically symmetrical in two axes, so in rocketry we may describe the rocket as “rolling” if it is turning around the fuselage, but I am less likely to discuss “pitch” and will probably not use the term “yaw”.
Either way, here is a diagram from Wikipedia that more clearly explains how those terms are used in aircraft:
I mentioned that an IMU generally has three types of sensors, but so far I have only described two of them. The third one is called a magnetometer, and it is essentially a three dimensional compass. Magnetometers are essential because they can help tell us the absolute orientation, or attitude, of the rocket.
Now that we know how the IMU works, we need to figure out how to add one to the telemetry system. We could pick up one of the Arduino Nanos I mentioned earlier and connect it with an external IMU board, and there’s nothing wrong with this EXCEPT I want something smaller, and I love integrated components!
After some digging I found that I had started this project right on time, since Arduino had recently released the Arduino Nano 33 BLE Sense with integrated 9-axis IMU (and a lot of other goodies). This meant a simple plug-and-play solution that I could use to measure attitude and motion in flight, and it also meant access to an onboard thermometer, hygrometer and even a barometer, which I could use for measuring altitude.
I won’t go into the details of how to calculate altitude by using barometric pressure, but it is based on the principle that air pressure is generally higher the lower you are in altitude. As the rocket climbs, then, the air pressure should decrease, and some mathematical formulas allow us to use the change in pressure over time to estimate how what altitude we have reached, and we can use the rate of change to determine what stage of flight we are currently in.
Once the telemetry board (new designation) arrived I hooked it up to my computer and wrote a quick program that fed the signals back through the built in serial communications. I noticed that the data was a little noisy (the image below is of me shaking it around – not what I’m talking about) so I added some moving average logic to smooth out the values. Ultimately I took this logic out because I determined logging the raw values would result in the best data, and I could always do smoothing with the raw data at a later time.
In my next post I will discuss wireless telemetry, and the wonderful world of RF comms (Radio Frequency communications).