Watercolour is my NAR Level 1 certification built from designs provided by the RIT Launch Initiative, and painted with watercolour paints because someone said it wasn't possible. This rocket originally launched and completed a flight at URRG during RIT's fall launch date, but due to the insistance of the range safety officer a dumb ass little keychain was ziptied to the shock cord last minute to "help find it in the corn". This did not work at all, and got tangled in the parachute cord, which that same range safety officer then cited as a failed recovery (there is no inspection criteria for keychaings getting tangled in the cords) and refused certification. Due to Watercolour being perfectly intact and re-flyable, I decided to use this as an opportunity to develop a custom tracking and delemtry module to re-fly at the next URRG launch for certification
Typically RIT Launch Initiative will fly L1 rockets with Radiosonde transmitters that had been recovered from weatherballoon launches and re-programmed, but this tracker was awkwardly shaped and did not allow for any payload to be flown, and was lacking in some telemetry features. I wanted my tracker to have the same GPS, altimiter, and data transmission features as well as real-time temperature and G force logging to a local flash storage. For data transmission I wanted to use LoRa and have some level of bi-directional communication to send heartbeat signals to trigger different modes automatically when communication is lost and to manually activate modes and features. Due to the tight timeline to get all of this done before the next month's launch date I also wanted to primarily use consumer grade "Arduino compatible" modules which are readily available many places so I could get parts quickly, prototype on a breadboard, and then design a simple PCB to be manufactured and shipped while I worked on the bulk of the software and then the individual modules could be slotted in to the PCB and the tracker assembly attached to the nose cone of Watercolour using the same mount that the Radiosonde tracker used.
I initially chose components I had on hand to start prototyping parts of the system while newly ordered parts were in transit. I used a raspberry pi pico as the compute module, a BMI 160 IMU for orientation and G-Force calculation up to 16G, a microSD card breakout module for data storage, and small 3.7V batteries salvaged from old vapes. Parts I could get within 24-48 hours included a 3.3v buck/boost module and a charger module, BMP 388 pressure and temperature module, and an ESP32-C6 + LoRa module kit. With 3-4 day shipping from Adafruit I ordered a GPS breakout module and an ADXL375 IMU with much higher G limits in the event that the 16G sensor became saturated and for future proofing to fly this tracker in an L2 or L3 rocket later.
Starting with libraries and documentation for each of the consumer grade modules I implemented a 10 Hz data polling program for each of the sensors and used a simple ping/pong program on the pi pico transmitter and my ESP32 groundstation over LoRa. Range testing and configuration showed 450-500 meter bidirectional communication on the ground around my neighborhood, which seemed sufficient for a rocket that would would have line of sight for most of the flight and if it lost communication at apogee or after hitting the ground then communication would be re-established when moving closer to the last known location. I integrated all of the component tests into one program and verified that all were still working with no interference on SPI or IIC buses, then set to work on the PCB design.
The PCB design consists mainly of traces connecting the pins of the breakout modules to GPIO pins on the pi pico. This primarily allowed for more rapid development of the entire system and rapid movement from breadboard prototype to final assembly, but also allows for some level of future modularity as a module with the same power and data pin requirements could be inserted onto the board in place of the original module and the software re-configured around that. A more refined PCB with surface mount components would in general take longer to design and test, and may be less compatible with future changes.
The software for this tracker used the dual cores of the raspberry pi pico to use one core for polling sensors and storing data in a circular buffer, then the other core would read data from the buffer and store to the SD card then roughly once per second send a telemetry packet to the ground station. Dividing the workload this way ensured that any delays in writing to the SD card or sending telemetry would not cause any data polling intervals to be missed. Several failsafes were added via software including constant data-logging when powered on to capture the moment of ignition even if that is not detected properly, a heartbeat/confirmation response to data transmitted to allow the tracker to enter a different state for recovery if bi-directional communication is not confirmed, and manual and automatic activation of an oscillatory buzzer for if the rocket is difficult to find at the transmitted coordinates during recovery. A set of jumper pins on the tracker module also allow conditions to be checked at startup, which will automatically enable some failsafe features if those jumper pins are not installed when the system boots as that would indicate a loss of power as those pins would be jumpered when powering on the tracker to put in the rocket.