Skip to content

About

Paragliding variometer: custom KiCad PCBs, ESP32 firmware, sensor fusion, e-ink UI, and desktop flight replay.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Repository files navigation

VariometerV2

A paragliding variometer built from custom KiCad PCBs, ESP32 firmware, sensor fusion, and an e-ink flight interface.

Variometer mounted on the harness during a paragliding flight

Flight-tested on my paragliding harness. Watch the flight video.

I started this project in 2021 as my Maturarbeit (Swiss high-school thesis), then continued developing it independently through 2024. I designed the custom PCBs and developed the firmware, sensor fusion pipeline, and e-ink rendering system, screens, and widgets. The enclosure/CAD work combines contributions from my brother and me.

Features

  • Three custom PCB revisions designed in KiCad.
  • ESP32 firmware in C on ESP-IDF and FreeRTOS.
  • BMI088 IMU, DPS310 barometer, and QMC5883L magnetometer; quaternion orientation estimation and a Kalman filter combining barometric altitude with acceleration.
  • GPS/NMEA input, IGC flight logging, airspace parsing, sound output, an experimental BLE module, and watchdog support.
  • E-ink UI with a custom rendering system, screens, and widgets.
  • Sensor mocks, a FreeRTOS host simulation, a Linux screen simulator, and recorded-sensor replay for analysis.

Hardware

Latest revision: 2.1

Front / top Back / mirrored bottom
Latest PCB, top Latest PCB, mirrored bottom

Latest PCB, angled KiCad 3D render

Schematic overview · Power · Sensors · Display · Peripherals

Revision history

Revision Design files PCB views Schematic
1.0 Hardware/Version 1.0 Top · bottom · 3D SVG
2.0 Hardware/Version 2.0 Top · bottom · 3D SVG
2.1 Hardware/Version 2.1 Top · bottom · 3D SVG overview

Case/ contains the enclosure designs and printing exports.

Firmware architecture

flowchart LR
    IMU["BMI088 IMU"] --> Drivers["Sensor drivers"]
    Baro["DPS310 barometer"] --> Drivers
    Mag["QMC5883L magnetometer"] --> Drivers
    Drivers --> Orientation["Quaternion orientation"]
    Orientation --> Acc["Vertical acceleration"]
    Drivers --> Kalman["Kalman altitude and climb rate"]
    Acc --> Kalman
    GPS["GPS / NMEA"] --> State["Flight state / device context"]
    Kalman --> State
    Airspace["Airspace parser"] --> State
    State --> UI["E-ink UI / screens / widgets"]
    State --> IGC["IGC logger"]
    State --> BLE["BLE module (experimental)"]
    State --> Sound["Sound"]
Loading

The sensor fusion pipeline runs across FreeRTOS tasks: the barometer task notifies the Kalman filter, while the acceleration task updates orientation and queues vertical acceleration. The filter combines these inputs into shared flight state, using queues, task notifications, and mutexes to coordinate the tasks.

Rendering and e-ink refresh run in separate tasks. GPS parsing, IGC logging, button input, battery management, sound, storage checks, and airspace parsing have their own task entry points.

Project structure

Directory Purpose
Hardware/, Case/ PCB revisions and enclosure designs
Software/variometer-software/ ESP32 firmware
Simulation/Main/ FreeRTOS host runner and sensor mocks
Screen_Simulator_Linux/, Screen_Simulator/ Desktop UI simulators
VariometerAnalysis/ Sensor-log analysis and offline replay

Simulation & replay

Sensor mocks replace hardware reads with recorded IMU, magnetometer, and pressure samples. A FreeRTOS simulation replays these recordings on a PC, allowing the firmware to run against recorded data.

The offline analysis tool runs the firmware’s quaternion and Kalman functions over the recorded sensor data:

Raw barometric data compared with an offline Kalman estimate

Barometric altitude and climb rate compared with the Kalman estimate. The recording has no timestamps, so replay uses an assumed sample interval; this plot is not a latency benchmark.

The Linux screen simulator exercises the custom UI independently of the device:

Flight layout Navigation layout Settings
Flight UI Navigation UI Settings UI

Replay and simulator instructions.

Build & flash

ESP32-S3 · ESP-IDF v5.1.4

See the developer guide for cloning, firmware build and flash commands, desktop simulation, and regenerating the visuals.

Flight footage

Short preview of the variometer during flight

Third-party code & license

The project builds on FreeRTOS, Waveshare’s e-ink driver and GUI, STMicroelectronics bitmap fonts, Neil Kolban’s BLE library, Freescale/NXPMotionSense sensor fusion, kalman-clib, and other credited libraries. Full credits and license details are in THIRD_PARTY_NOTICES.txt.

My original software is licensed under MIT. Third-party code retains its own licenses, including the FIFO’s GPL-3.0-or-later obligations; the combined tree is not uniformly MIT-licensed. Enclosure/CAD contributions and third-party assets are outside this software license unless separately stated.

About

Paragliding variometer: custom KiCad PCBs, ESP32 firmware, sensor fusion, e-ink UI, and desktop flight replay.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages