I’ve found RF1276 Transceiver to deliver

the most outstanding performance in terms of signal range and quality. Upon my first flight I was able to reach 56km distance at -70dB signal level with small quarter wavelength antennas.

Step 1: BOM (Bill of Materials)



2. Ublox NEO-6M GPS module

3. BMP-085 barometric pressure sensor

4. SD Card adapter

5. 3Watt LED

6. 2x 18650 2600mAh batteries

7. DC-DC buck voltage converter

8. 2x RF1276 Tranceivers from appconwireless.com


- BMP085 sensor is connected to A4 (SDA) and A5 (SCL)

- SD Card is connected to 10(SS), 11(MISO), 12(MOSI), 13(SCK)

- GPS is connected to 6(TX), 7(RX) – software serial

- RF1276 is connected to TX->RX, RX->TX – hardware serial

- Battery voltage monitor is connected to A0 via voltage divider

- LED ON/OFF control is done through N-FET (IRLZ44N), which is connected to pin 9 via pull-down resistor.

- Pin 8 is connected to RST (for a remote microcontroller reset)

- Battery is connected to DC/DC buck converted, which is regulated for 5V output


I’ve found that dipole antenna on the

Transmitting end and wire whip antenna on the receiving end gives the best results

Step 4: RADIO Configuration

To go for the maximum range, one has to

understand the basic physics behind the radio communication.

- Increasing the bandwidth reduces the sensitivity (and vice-versa)

- Increasing antenna gain reduces the transmit power required

- Line-of-sight is a must

Based on above rules, I’ve chosen the following parameters for RF tool:

- SF: 2048

- BW: 125kHz

- TX Power: 7 (max.)

- UART speed: 9600bps

Above settings will only give 293bps, but will enable -135dB receive sensitivity. That means that you can transmit small packets (i.e. latitude or longitude) approx. every 2 seconds. If you also want to remotely control your electronics, you must leave i.e. 1 second for listening to the ground commands. So the data can be transmitted every 3 seconds.


The firmware requires both the GPS module

and RF1276 to be configured for 9600bps UART. GPS configuration can be made with u-blox U-Center software.

View->Messages->UBX->CFG->PRT->Baudrate->9600. Then,

Receiver->Action->Save configuration.

RF1276 configuration can be made with RF1276 Tool.


Firmware will:

- Monitor atmospheric pressure and temperature

- Monitor battery voltage

- Capture variety of GPS values

- Log all data to SD card

- Transmit all data

Firmware enables the following remote control options:

- reset the module

- turn the led ON/OFF

- update internal counter after receiving ping packet from ground

Both SD card reader and BMP pressure sensor is programmed for fault-tolerant operation. Failure of one of those will not crash the module.


I’ve hooked up the payload to the balloon.

The payload weight is slightly above 300g. The balloon is heavier – approx. 1kg. I’ve filled it with 2 cubic meters of helium thus giving 700g of free-lift. I’ve inflated it to burst at 1.5km (85% of volume).


The balloon has reached 4.6km altitude and

distance of 56km. It was traveling at 40kmph over a huge city and has landed somewhere in a swamp. It has only burst at 4.6 km, so its tensile strength was 3 times better than I’ve initially estimated.

I did not recover the payload since I couldn’t drive and focus on monitoring the real-time telemetry alone.

I’ve captured the last packets when the balloon was at approx. 1km altitude. This is when it went beyond the horizon.


I’ve collected many more parameters, but

those extra-ones are GPS mainly. Reconstructed flight path is provided in the image above, and here’s the internal sensor data.


RF1276 is definitely an outstanding

transceiver. I haven’t tested any better than this-one. Flying above huge city (high interference condition) in heavy winds with unstable antenna position it was able to deliver -70dB signal level at 56km distance being 1km above ground, thus leaving -65dB link budget! (its configured sensitivity limit was -135dB). If only it didn’t went behind the horizon (or if I was higher – i.e. on some hill or telco tower) I could have captured it’s landing location. Or, alternatively, if balloon didn’t burst, I could have reached twice or trice the distance!

Step 11:

Step 12:



    • Oil Contest

      Oil Contest
    • Clocks Contest

      Clocks Contest
    • Water Contest

      Water Contest

    10 Discussions

    Could you please share the Arduino code?

    Hi all,there is a good board for the LoRa project,you can view http://wiki.dragino.com/index.php?title=Lora/GPS_HAT to get more info.

    Hello, I am working with 2 LoRa1278's and 2 arduino uno's. I would like to make them communicate with eachother but I still didn't managed to do it. Does somebody has experience with this type of transceiver? Thanks in advance!

    Hi there! Congratulations on your experiment and thanks for sharing.

    One question, though, if you may: How is the Arduino Pro Mini powered? The UART on the RF1276 is 3.3V, so you'd either need a DC-DC buck for the 3.3V Arduino, or a level shifter for the 5V Arduino.

    If you could clarify, this would be much appreciated.


    I received your code from Appcon Wireless and I have ran into a issue running the code.

    Here is the error message:

    In file included from C:\Users\WSLLC\Documents\Arduino\libraries\SdFat/utility/bufstream.h:27:0,
    from C:\Users\WSLLC\Documents\Arduino\libraries\SdFat/utility/ArduinoStream.h:29,
    from C:\Users\WSLLC\Documents\Arduino\libraries\SdFat/utility/FatLib.h:23,
    from C:\Users\WSLLC\Documents\Arduino\libraries\SdFat/SdFat.h:27,
    from sky_module_firmware.ino:11:
    C:\Users\WSLLC\Documents\Arduino\libraries\SdFat/utility/iostream.h: In function 'ostream& endl(ostream&)':
    C:\Users\WSLLC\Documents\Arduino\libraries\SdFat/utility/iostream.h:40:33: error: 'ostream& endl(ostream&)' redeclared as different kind of symbol
    inline ostream& endl(ostream& os) {
    In file included from sky_module_firmware.ino:8:0:
    C:\Users\WSLLC\Documents\Arduino\libraries\Streaming/Streaming.h:100:21: error: previous declaration of '_EndLineCode endl'
    enum _EndLineCode { endl };
    In file included from sky_module_firmware.ino:15:0:
    DEVICES.h: In function 'void debug(char, char, uint8_t)':
    DEVICES.h:62: error: 'endnl' was not declared in this scope
    CONS_UART << strb << endnl;
    DEVICES.h: In function 'void info(char*, int, int)':
    DEVICES.h:78: error: 'endnl' was not declared in this scope
    CONS_UART << strb << endnl;
    DEVICES.h: In function 'void BMP_Init()':
    DEVICES.h:158: error: 'class BMP085' has no member named 'begin'
    DEVICES.h: In function 'void BMP_Read()':
    DEVICES.h:169: error: 'class BMP085' has no member named 'readTemperature'
    SYS.BAR_t = BMP.readTemperature();
    DEVICES.h:170: error: 'class BMP085' has no member named 'readPressure'
    SYS.BAR_p = BMP.readPressure();
    DEVICES.h:171: error: 'class BMP085' has no member named 'readAltitude'
    SYS.BAR_m = BMP.readAltitude(SYS.BAR_p);
    In file included from sky_module_firmware.ino:17:0:
    OUT.h: In function 'void txData()':
    OUT.h:79: error: 'endnl' was not declared in this scope
    CONS_UART << dataBuff_b << endnl;
    'endnl' was not declared in this scope

    I'm not sure what I'm dong wrong and was hoping you might be able to help.


    Where are you from? In Europe, 868MHz band is free of license. In USA, 915MHz is a good choose. There is available free-license frequency existed in your country in the sub-G hz band.

    Yes, It is legal. We use for collect the data of air. It is HAB.

    Its very well established in radio that the antennas should be in the same orientation for optimum results so a dipole on both ends or a vertical on both ends but not a mix . You were not testing properly if you think otherwise.

    Bravo, although perhaps mention radio horizon from altitude
    will of course be still the limiting range factor. LoRa™ performance
    however is indeed near magical, & my diverse trials with Dorji &
    HopeRF 433 MHz modules confirm ranges an order of magnitude (x10) greaterthan similar UHF gear under the same conditions. My own instructable may assist folks after LoRa™ insights - see => https://www.instructables.com/id/Introducing-LoRa-/