Radio Telemetry – Choosing the right wireless transceiver (4)

(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.)

Enough about imaginary fuselages and prototyping boards with everything built in, LET’S BUILD SOMETHING!

In my last post we proved that the Arduino Nano 33 BLE Sense had all of the skills necessary to track attitude and some movement, but how do we get this information to the computer for analysis?

There’s a great video from that includes a segment about all kinds of ways to transmit and save telemetry data, and I definitely should have watched this before my first flight. It boils down to two different options – onboard storage and wireless transmission.

With onboard storage you can use an SD card writer such as the ADA254 or a flash module such as this one from Amazon. The basic idea is that the builtin memory on the Arduino Nano erases itself every time the system is rebooted to make room for the new data the program will have to process. If we want to store the data more permanently then we would have to add that capability ourselves.

Both of these add-ons use the I2C communication built into the Arduino platform, so we can add as many as we would like, but there are benefits and drawbacks to each. An SD card writer would allow us to write the data to a removable card that we can plug into just about any smartphone or read with an SD card reader on almost any computer. The downside is this storage can sometimes be a little slower to write or read, and because the card is mechanically connected to the pins on the writer with pressure from the bracket, it might not withstand the stresses of rocket flight well, potentially resulting in data loss or a lost SD card.

The flash memory add-on is a great option because it can be faster to write to, and doesn’t have the mechanical weaknesses of the SD card, but the major drawback is that you can only retrieve the data by plugging the flight computer into the USB port on your main computer to download the data.

Both of these are inconvenient as primary data transmission methods because neither provide realtime data monitoring. Also, if the rocket flight ends in rapid unscheduled disassembly or a vertically premature arboreal landing, the data is gone for good. More on what I’ll call RUD and VPAL later.

All of these systems are small and lightweight, so we don’t have to worry about payload limits, but I’d really only be interested in onboard storage as a backup, in case wireless telemetry cut out mid-flight. My primary telemetry option needs to be wireless.

In order to achieve wireless communications you typically want to use Radio Frequency communications, which simply means that it’s sending the signal using Electromagnetic waves. One alternative would be light, like the infrared diode and sensor used for television remotes. This isn’t very effective on bright sunny days, though, and can be interrupted by visually opaque interference, such as rocket exhaust.

Another RF alternative would be sound, but the frequency is too low to be able to fit a reasonable amount of data in the signal, and it travels through the air too slowly (our rocket could reach 0.8x the speed of sound). Also rocket launches are audibly noisy, which makes for an all around poor environment for audio communications.

Luckily there are quite a few available RF options for the Arduino. The Arduino Nano 33 BLE Sense even has a built in Bluetooth LE SoC (System on a Chip). Bluetooth LE is a great technology for close-range wireless communications, and it would offer some cool smartphone integrations, but at 100m max range it’s just not strong enough for a rocket that’s built for 1km flight. This limitation also rules out any WiFi options.

The main reason why WiFi and BLE are poor options is because they use higher frequencies to transmit more data at a time. The tradeoff with higher frequencies is that it requires more input power to generate the same amplitude of electromagnetic wave. Since our telemetry system will just be powered by a typical 9v battery, we need a lower frequency radio to be able to transmit further without requiring more power than the battery can supply.

Another design consideration in the US is which frequencies we are legally able to transmit on. Luckily most of the devices that we can purchase online are pre-approved by the FCC and don’t require licenses to operate, but you always want to be careful and make sure you choose a frequency that won’t interfere with important uses such as emergency services, aircraft operation, or life-sustaining medical devices.

US Radio Spectrum Frequency Allocation Chart

The massive chart above shows all of the frequency allocations in the US. Needless to say it’s probably just easier to google search the frequencies you would like to use and read what people are posting about them than to try to figure out licensing from a chart like this.

Installing the HC-12 RF Transciever on the Arduino Nano

I started out building with the HC-12 RF chip, which uses the 433MHz band. These chips are great because they’re tiny, cheap, low power and the low frequency gives them a longer range for less power input. The (massive) downside is that transmitting legally on the 433MHz band requires a HAM (amateur radio operator) license. I don’t have one of these, I don’t want fines, and it will take me a few weeks at least to study and take the test.

I was able to find an alternative 2.4Ghz chip that is somewhat larger with a more limited range, but since my first flights will not be very high power, I probably don’t need the full 1Km range yet anyway.

When you’re prototyping electronics you’re going to need to plug and unplug wires quite frequently, so you don’t really want to be soldering every connection every time (although even when I solder I quite frequently have to undo and redo my wiring). There are a few things that you will need, like resistors, a solderless breadboard, and some connectors. To make this easier I just picked up an electronics project kit that included every component I could possibly ever need. I also have a separate connector kit that I can either use on solderless breadboards, or to make more precise runs on a soldered circuit board.

Prototyping the HC-12 using a solderless breadboard

Another great thing about the kit is that it comes with a knockoff Arduino Uno. I wired this up to another RF module with the same configuration as the onboard system, and it’s ready to rock!

In my next post I’ll discuss exactly how you wire the transceivers to the Arduinos, and the code that is required to run them.

Basic Telemetry – What is the rocket doing? (3)

(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:

The three axes,

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:

The Euler Angles as they apply to an 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.

Arduino Nano 33 Ble Sense –

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).

Arduino IMU data plotted in “Data Monitor”, sketch showing data smoothing