The mini GPS tracker
PTR LoRa Tracker #
This is my first real honest open-source project. It is my contribution to the KPPTR ecosystem, where we, rocketeers from the Polish rocketry organization (PTR), design open-source rocketry electronics.
I was inspired by successful designs where the main goal was simplicity. Through simplicity, we get increased reliability, lower cost and a better user experience thanks to an easy learning curve and shorter manuals.
The idea was to keep it simple and cheap. Nobody likes losing their rockets, and the ability to track them with a cheap and easy to use board will help the hobby grow. We don’t want to bring our laptops out in the cold, muddy and rainy range. We need a simple and easy to use device, that can be set up by the user with no tools, computers and time.
Context #
For a while the best solution that was found was a reprogrammed Vaisala RS41 radiosonde. These would spit out telemetry, which included coordinates and altitude, on a preset frequency using either APRS or some narrow SSB-like scheme. Somewhere during or after COVID, these stopped being used in Poland and Europe, getting replaced by the cheaper M20.
I acquired one of those, and to my knowledge and limited reverse engineering, I determined that the frequency of the transmitter could not be changed purely through software (the PLL could not operate on the EU 70cm HAM band without replacing some SMD components which I do not approve of, see the 2nd paragraph). This meant transmitting on government bands (some didn’t bother with the reprogramming and did the same with the RS41). DO NOT TRANSMIT ON GOVERNMENT BANDS.
Design #
Initially my idea was to use one of those UART-capable LoRa modules, and directly hook it up to a GNSS module. Simple and cheap, no microcontroller and code needed. Unfortunately, changing the frequency would be a nightmare, and the thing would need to be configured with a serial dongle - not user friendly, and not the solution to the problem.
I settled on a cheap STM32G031F6P6 microcontroller. Its small, not too powerful, but more than enough for this application. The GNSS module was also a cheap one I could get assembled by JLC, but I tested it beforehand. I also soldered different GNSS modules in its place to test if they work, in case a more precise or COCOM unlocked version was desired. Plus, the ability to just swap modules makes the thing hackable, and I like that.
Now the RF side, tis is where it gets interesting. I already had some knowledge of non-microwave RF. I designed successful implementations of GNSS systems, and had been a very active HAM for almost a year. So, initially the idea was to go with a module, but now, with the option of assembly becoming more realistic, I went with a custom sx1262 implementation. Transmit only, it would be cheaper than a module by around 1$. But then a friend also working on the project, suggested that I consider receive capability. This would allow the device to “listen before talk” and check for channel activity before transmitting. Spoiler alert, this turned out to be vital.
There was no resources for designing a frontend for the EU 443 band, so I simulated the one for the US868 and Chinese 470ish, and modified the values to get the same response characteristics from the matching network on the frequency range that I want. This worked perfectly, and I even managed to design the thing using RF inductors and capacitors from JLC’s basic
parts list, so big $$$ savings.
Receive capability meant that I could do some cheeky stuff. I wrote some code that enables the trackers to rebroadcast each others packets. This is useful if a rocket falls into an area where the signal cant get out. Another rocket launched at the same event for example, will pick up the signal and retransmit it while at a much higher altitude. The receiving station would then receive 2 packets. One from the rocket in flight, and one from the lost rocket.
For the “user interface”, I chose 3 dip switches. 2 of them allow switching thought the 4 pre-programmed channels (we set the channel number in binary), while the 3rd one is an auxiliary, and by default toggles the relay mode (because it basically makes the receiver work with a 100% duty cycle, current draw doubles from 30mA to almost 60).
The whole idea was to be able to use a lot of these things on one frequency. I knew these’d be used a lot on rocketry events, and keeping a clean spectrum is important. Thanks to the channel activity detection, it is possible to run many trackers on one frequency and receive each one.
To make this even easier, each tracker has a unique ID set during flashing of the microcontroller. I wrote the ID on the sticker on the GNSS module for ease of use. It’s possible to set up something like a filter, where only a specific ID is decoded.