
Spoke
FeruzTopalov/spoke
Standalone LoRa-based real-time off-grid relative GPS navigation for group of up to 5 people. Improved version of LRNS Eleph

GPS-based local relative navigation system for group of up to 6 members
Eleph is an open-source printed circuit board by FeruzTopalov, from the FeruzTopalov/eleph repository on GitHub, published under the GPL-3.0 licence. It is a 2-layer board of 36 × 100 mm with 56 parts on 69 nets, routed with 466 tracks and 164 vias.
It is built around the STM32F103C8T6, RFM9X and M24C64-WMN6P, with the TP4056, TPS73633DBV and AO3400 among its other parts. Its parts include 14 resistors, 13 capacitors, 9 crystals, 7 ICs and 6 switches. It belongs with the radio and wireless boards and the STM32 boards of this library.
Note Development of this device has been finished, only bug-fixes in the FW are possible There is an improved version of this device being under development, please see https://github.com/FeruzTopalov/spoke
Dedicated to my friend Alexander Sadaev, rock climber.
Eleph is a GPS-based Local Relative Navigation System (LRNS) for group of up to 6 members. It allows you to share your positional data in real-time among other Eleph-devices and navigate to each of them in a relative manner by providing Distance and Azimuth information - like RADAR does.
Before diving into the details, watch the demo on YouTube: https://youtu.be/EMacKdg9Z_0

As long as you stay under cell-coverage a navigation, either absolute or relative, is not a problem at all. You just use your phone with maps and messengers to find or share locations. Things change when you go off-grid. Hiking, skiing, sailing or whatever outdoor activity are a potential place to lose sight of your teammates. How to navigate in the group? Hopefully, there are couple of solutions available on the market:
unfortunately all of them are commercial. But not the Eleph!
Eleph is open-source/open-hardware device which contains all major features needed for group navigation, such as:
Due to open-source and simple and cheap hardware, Eleph is highly flexible solution that could be adapted to any use case you want:
Eleph is written in pure C and runs on STM32 microcontroller. It has GPS module to receive positional data and synchronization signal, radio transceiver to exchange with radio packets between other devices, graphical display to show information on it, EEPROM memory IC to store coordinates, tactile buttons to control the device, buzzer to notify about events and couple of LEDs.

GPS module provides NMEA-0183 stream at 9600 baud. Microcontroller process the stream using DMA and parse it. Fields being extracted are RMC, GGA, GSA, GSV. Those give us information about time, date, latitude, longitude, speed, course, altitude, satellites in view and in use, navigation mode and validness of data.
GPS module also provides time synchronization signal - PPS. It is used as a time reference for the transmitting and receiving radio packets inside a current group of devices. Each group operates at the specific frequency channel, the way like regular radios. Each device in a group has unique predefined number from 1 to 6, so there are 6 members in a group maximum. Eleph uses TDMA technique to give channel access for each group member, so the device number corresponds to the time-slot occupied by device. There are 125 ms timer which starts counting from the rise of the PPS pulse. First 125 ms time-slot is used to parse and prepare positional data of the device. Next six time-slots are used to exchange with the positional data between devices via radio. A device is in TX state when time-slot number is equal to the device number, and in RX state otherwise. Remaining time before next PPS is reserved for relative positions calculation and displaying the results.
Eleph uses FSK transceiver and operates in LPD 433 MHz band (please make sure you are allowed to use those frequencies in your region, change otherwise). Data rate is 2400 bps, deviation is 2400 Hz (mod index = 2), channel spacing is 25 kHz. Packet structure is shown below. It consist of 29 bytes total and takes ~97 ms to be transmitted over-the-air.

In order to calculate relative positions of other devices, Eleph uses two formulas. First one is Haversine formula which determines the distance between two points on a sphere. The second one is Loxodrome formula which determines bearing to a point on a sphere relative to true north. All calculations are performed with a highest possible, double precision, so the results are in a great agreement with my simulations on PC. Precision of the formulas is another matter. It is known that haversine formula is numerically better-conditioned for small distances, but on the other side it doesn't take into account ellipsoidness of the Earth and uses it's mean radius. Also it is known that loxodrome (or rhumb line) shows not-the-shortest way to reach point of interest (the shortest way is provided by orthodrome, or great circle route), but the constant bearing, which is more useful in practice. Anyway, my simulations using Google Earth Pro ruler leave me no concerns about accuracy of used formulas. According to them the error for both is less than 1% as long as the distance is smaller than 300 km (!).

(courtesy of ESRI)
| Qty | Value | Footprint | References |
|---|---|---|---|
| 8 | 100n | eleph:C0805 | C1, C6, C7, C8, C9, C10, C11, C12 |
| 6 | 100k | eleph:R0805 | R3, R4, R5, R6, R13, R14 |
| 5 | Pad_round | eleph:Pad_round | X3, X4, X6, X7, X8 |
| 3 | 1k | eleph:R0805 | R7, R8, R9 |
| 3 | DNP | eleph:R0805 | R10, R11, R12 |
| 2 | 10u | eleph:C_tantA | C5, C13 |
| 2 | 20p | eleph:C0805 | C2, C3 |
| 2 | 4.7k | eleph:R0805 | R1, R2 |
| 2 | Pad_oval | eleph:Pad_oval | X1, X2 |
| 1 | 0.96_OLED_SSD1306 | eleph:0.96_OLED_SSD1306_7pin | U7 |
| 1 | 10n | eleph:C0805 | C4 |
| 1 | AO3400 | eleph:SOT-23 | Q2 |
| 1 | AO3407A | eleph:SOT-23 | Q1 |
| 1 | Buzzer | eleph:Buzzer_pitch7.6mm | LS1 |
| 1 | Crystal_8MHz | eleph:HC49SM | XTAL1 |
| 1 | DN | eleph:6x6switch_smd | SW6 |
| 1 | ESC | eleph:6x6switch_smd | SW3 |
| 1 | GN-801 | eleph:GN-801 | U6 |
| 1 | LCK | eleph:6x6switch_smd | SW2 |
| 1 | LOGO | eleph:Logo | G*** |
| 1 | Led_green | eleph:D1206 | D1 |
| 1 | Led_red | eleph:D1206 | D2 |
| 1 | M24C64WMN | eleph:SOIC-8 | U2 |
| 1 | OK | eleph:6x6switch_smd | SW4 |
| 1 | PLS-1x6 | eleph:1x6header | X5 |
| 1 | Pad_oval | eleph:Antenna_terminal | X9 |
| 1 | Power On | eleph:52x52switch_smd_lowprofile | SW1 |
| 1 | RFM9X | eleph:RFM9X | U5 |
| 1 | STM32F103C8T6 | eleph:LQFP-48 | U4 |
| 1 | TP4056 | eleph:TP4056 | U1 |
| 1 | TPS73633DBV | eleph:SOT-23-5 | U3 |
| 1 | UP | eleph:6x6switch_smd | SW5 |

FeruzTopalov/spoke
Standalone LoRa-based real-time off-grid relative GPS navigation for group of up to 5 people. Improved version of LRNS Eleph


Autonomous-Motorsports-Purdue/AMP_PCBv2
Files relating to version 2 of the PCB for AMP kart

kaibader/rfm9x-sx127x-lora-breakout-board
LoRa Breakout Board for RFM95/RFM96 or SX1276/SX1278 Modules

OxfordAerospaceAndRocketrySociety/HighAltitudeBalloon
Please read Setup.md for instructions on installing the dependencies.



Simonhajd/Sticktility
Stick-Tility is a handheld device that powers and reads data from snap-on sensor modules. Once a sensor is connected, it can record data at set time intervals and graph the data on its screen.
It measures 36 × 100 mm and has 2 copper layers, 1.6 mm thick.
56 parts, built around the STM32F103C8T6, RFM9X, M24C64-WMN6P and TP4056. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
From the FeruzTopalov/eleph repository on GitHub, at the commit this page was made from: the board is Hardware/KiCad/eleph.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.
Its repository publishes it under the GPL-3.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).