CanSat India Ground Station
High-frequency PyQt5 telemetry ground station with asynchronous serial packet framing, real-time trajectory plotting, and unbuffered flight logging for 2nd-place national CanSat team.
This was the first project where my software felt mission critical in a literal sense.
As the sole software engineer for Team Dyaus during the first edition of the CanSat India Competition in Ahmedabad, Gujarat, the ground station was the team's only window into our satellite during launch, apogee, and parachute descent. If the ground station lagged or crashed, the team had zero visibility into flight parameters and could not issue recovery commands.
We finished 2nd nationally, and the ground station performed flawlessly across the entire flight.
Ground station architecture and data pipeline
The ground station was built as a high-performance desktop application using Python, PyQt5, and PySerial, designed around three non-negotiable requirements:
1. Dedicated asynchronous serial reader
Serial communication over radio frequency links is inherently unpredictable: signal attenuation, packet collisions, and radio noise cause corrupted bytes and bursty arrival rates.
- The ingestion layer ran in a separate background
QThread, isolating hardware I/O completely from the GUI event loop. - Implemented packet framing with checksum verification: parsed incoming byte packets, validated headers and tail delimiters, and safely discarded malformed fragments without blocking.
- Used thread-safe PyQt signals and slots (
pyqtSignal) to pass clean telemetry structs across the thread boundary into the rendering pipeline.
2. Multi-panel mission dashboard
The PyQt5 interface presented a comprehensive telemetry flight deck:
- Real-time dynamic strip-charts plotting barometric pressure, altitude curves, descent velocity, internal temperature, and battery voltage.
- GPS tracking coordinates plotted in real time for recovery search teams.
- Digital gauges and artificial horizon indicators visualizing satellite orientation during descent.
- Bidirectional command dispatch panel for sending manual deploy triggers and sensor calibration sequences over the RF uplink.
3. Redundant flight logging
In aerospace competitions, post-flight verification determines the team's final score:
- Every packet was committed to disk twice: once as raw serial hex dumps for full replay debugging, and once as structured, timestamped CSV records for judge evaluation.
- Implemented unbuffered file flushes so no telemetry data was lost in the event of an unexpected power cut at the ground site.
Why it stayed
Placing 2nd nationally was an exciting milestone, but the technical takeaway was even more valuable. It taught me the importance of strict concurrency boundaries: separating I/O from rendering, designing defensive parsers for noisy network protocols, and building interfaces that remain responsive under intense mission conditions.