Long Distance Radio Communication (2+ Miles)

Hello,

I am working on a project to send an Arduino in a rocket at least 8000ft. I want to relay information back and forth during the flight from the rocket to the ground at my laptop. I have 2 standard Xbee Pros (standard antennas). They work great, but I lose communication after about 3000ft.

Is there some external antenna I can buy (how would I attach it?)? Is there a different radio I should use? Am I missing something obvious? I am merely a beginner at Ardunio still.

Thank you all for your help,

JT

XBPro runs at 900 mhz. higher frequency = less range and shorter antennas. I prefer 433 mhz radios.

it would help if we knew the bit rates and packet sizes of your data

Is there a different radio I should use?

check LoRa / LoraWan.

With a free line of sight (what seems to be given if you are talking about a "rocket") - some kilometers should be easily achievable.

Actually most all 434Mhz radios will cover a distance as short as 4km.

The record for ground to air range for LoRa at 868mHz is 766km;

And my own humble efforts in setting records for 2.4ghz LoRa are 89km;

The older SX127X LoRa devices will run at up to 37500bps, the newer SX126X series at 75000bps. The 2.4Ghz LoRa devices will run at 203000bps. As with most radio devices, the higher the frequency and data rate the lower the range.

LoRa has such long range that at a mere 4km you dont need to worry too much about antennas.

Thanks guys!

I'll check out LoRa!

I plan on sending all the data the device is reading (pressure, temp, height, gps coordinates, speed) and hoping to get 10 samples a second. I probably send around 30-40 characters. Thus, wouldn't that be around 3000bps give or take?

So I could get away with a lower frequency radio?

Anyway, the antenna is covered by the thin outside shell of the rocket (cardboard maybe? I can't remember). Will that have a considerable effect? Other than that, this should be a direct line-of-sight application.

-JT

"pressure, temp, height, gps coordinates, speed" can be sent way under 30 bytes
2+2+3+3+3+2=15 bytes - and there are ways to pack it even more.

regarding the antenna - it depends on the material - thin cardboard might not have a big effect. But why not use the top of the rocket for the antenna or a simple wire antenna outside the rocket?

jt_3232:
So I could get away with a lower frequency radio?

Depends what you mean by lower ?

One advantage of 433Mhz systems is that you can usually hear that a device is working by listening to the transmissions of the device on a cheap UHF handheld, such as a Baofeng.

In fact for the LoRa devices when used as GPS trackers I have made programs send out a series of tones to indicate that the GPS has a fix so your good to go. Recently for a bit of fun I wrote some code for the LoRa SX126x and SX127x devices that plays the start of the Star Wars march music.

If I am using floating numbers up to 2 or 3 decimals for each measurement of info, and they are comma separated, and if the first character is a ! and the last a #, how can I further compact it? Am I wrong saying 30 bytes?

I suppose we could run a wire to the top of the rocket. The issue is I'd have to change the standard little wire that comes on the Xbee module itself.

Lastly, where can we actually purchase one of these LoRa devices? What would you recommend for our setup? I'd need 2 whole setups, one in the rocket and one n the ground. I'm hoping it can easily connect to an arduino as well and that I can quickly program it to my needs.

Sidenote: very cool about the Star Wars!

There was a point to the tune playing, once you have worked out how to use the device to switch carrier fast enough, LoRa devices support FSK data also, you can use the same technique for generating FSK RTTY or Morse for instance, which is useful for some trackers.

LoRa devices will be found at just about any electonics supplier. Do remember they are 3.3V logic devices.

There is a worked example of a GPS tracker transmitter and receiver (with display) using LoRa here;

Adafruit makes a module that converts most but not all of the pins on an RF69 or RF96 to 5 volts

jt_3232:
If I am using floating numbers up to 2 or 3 decimals for each measurement of info, and they are comma separated, and if the first character is a ! and the last a #, how can I further compact it? Am I wrong saying 30 bytes?

You can implement a highly robust and efficient communication protocol by using the library SerialTransfer.h (installable through the Arduino IDE's Libraries Manager). The library allows users to easily and reliably transfer data in a packetized form between two Arduinos via serial.

Here are the library's features:

This library:

  • can be downloaded via the Arduino IDE's Libraries Manager (search "SerialTransfer.h")
  • works with "software-serial" libraries
  • is non blocking
  • uses packet delimiters
  • uses consistent overhead byte stuffing
  • uses CRC-8 (Polynomial 0x9B with lookup table)
  • allows the use of dynamically sized packets (packets can have payload lengths anywhere from 1 to 255 bytes)
  • can transfer bytes, ints, floats, and even structs!!

Example TX Arduino Sketch:

#include "SerialTransfer.h"

SerialTransfer myTransfer;

void setup()
{
  Serial.begin(115200);
  Serial1.begin(115200);
  myTransfer.begin(Serial1);
}

void loop()
{
  myTransfer.txBuff[0] = 'h';
  myTransfer.txBuff[1] = 'i';
  myTransfer.txBuff[2] = '\n';
  
  myTransfer.sendData(3);
  delay(100);
}

Example RX Arduino Sketch:

#include "SerialTransfer.h"

SerialTransfer myTransfer;

void setup()
{
  Serial.begin(115200);
  Serial1.begin(115200);
  myTransfer.begin(Serial1);
}

void loop()
{
  if(myTransfer.available())
  {
    Serial.println("New Data");
    for(byte i = 0; i < myTransfer.bytesRead; i++)
      Serial.write(myTransfer.rxBuff[i]);
    Serial.println();
  }
  else if(myTransfer.status < 0)
  {
    Serial.print("ERROR: ");
    Serial.println(myTransfer.status);
  }
}

jt_3232:
Lastly, where can we actually purchase one of these LoRa devices? What would you recommend for our setup? I'd need 2 whole setups, one in the rocket and one n the ground. I'm hoping it can easily connect to an arduino as well and that I can quickly program it to my needs.

if you need GPS anyway, you could use an all in one module:
TTGO T-Beam

if you are looking for a small footprint/low weight and if an atmega 328 is enough for you:
TTGO T-Deer - the 16MHz/3.3V is out of the spec, but up to now all my modules are working.

as base station I would use something based on an ESP8266 or ESP32. This module comes with a small OLED:
TTGO Lora32