VariYo is an open source project (both hardware and software) of a compact vario for paragliding (or other forms of freeflight). With hardware being more or less frozen, software is still being updated to include more and more features and hopefully this page will be updated as well.
Hardware platform is single PCB with:
- Barometer
- Gyroscope/accelerometer/magnetometer
- Temperature and humidity sensor
- GNSS reviever (GPS/GLONASS/Galileo/Beidou)
- Bluetooth
- SD card
- Card reader chip for connecting with PC
- ARM M0+ microcontroller
- Battery charging IC (via USB)
- E-paper driving circuitry
- 5-way joystick button (as I hate some non-intuitive button interface and it can be used even in not superthick gloves)
- EEPROM (not needed anymore, using uC flash)
- SRAM (not needed yet, still enough in uC)
and connected:
- Piezo buzzer
- 200x200 1.54'' e-paper display (updated twice a second)
- Li-po battery (I am using 1200mAh, giving around 24h battery life with GPS and roughly 40h without)
As I have access to Altium designer at work, it's done in it so to modify with any free software would require some export. But gerber data for manufacturing are available as well, design is in compliance with JLCPCB design rules. Board is two layer, 50*70mm.
Components were chosen to be as much hand-solderable as possible. However there are limited options for such devices, so some not so simple packages are there as well
- One 0.4mm pitch DFN package with exposed pad
- Multiple 0.5mm pitch QFN packages
So hot air soldering is probably a must.
frontside | backside |
---|---|
Enclosure is designed to be 3d-printable and consists of two parts. STL file in repo. There is silicon rubber cap for the 5-way button which might be harder to DIY, I casted it in a mould made on lathe, but 3d printing it might be possible.
Implemented vario-related fucntionality so far is:
- Two varios with user definable averaging period (fusing batometer and accelerometer for instant response)
- Altitude (user adujstable sea level pressure)
- Pressure altitude (using std pressure)
- Altitude above ground level (90m mesh)
- Altitude above take-off
- Ground speed
- Heading (movement direction)
- Magnetic heading
- Temperature
- Humidity
- Flight time
- Lift to Drag aka glide ratio
- Wind speed (approximation)
- Wind direction
- Saving tracklog in .gpx format
- Piezo buzzer (adjustable volume, rise and sink trhreshold)
- After-flight summary (take-off, landing, min and max altitude; max rise and sink (10s avg), flight time)
Then obviously system stuff such as time, monitoring battery charge status
And some not so standard fetures for paragliding vario:
- Magnetic compass
- Temperature and humidity logger (every minute, hour or day)
- Chess for parawaiting and stuff (no UI tho, only PvP)
- Since the .gpx tracklog contains many additional data originally for debugging, my friend did a python script to convert the tracklog into .srt format to use as a subtitles to actioncam footage (containing vario, alt, speed,...).
User interface is almost fully adjustable, so whatever from the mentioned fucntionality can be turned on or off, places wherever on the screen, with three different font sizes, display units and so on.
Programming can be done via USB if SAM-BA bootloader is present in the microcontroller. To burn the bootloader, microcontroller programmer is however required (or getting somewhere preprogrammed chip, i know they are on Arduino Zero)
Probably no need to write more, but for those who dont know: https://www.arduino.cc/
Library for controlling the e-paper display. Developed by ZinggJM, who can be found on arduino forum in a crazy long thread and his GitHub page is here.
GxEPD2 library uses some features of AdafruitGFX library.
Minimalistic GPS library by SlashDevin.
From those guys, i used Madgwick AHRS library
Algorythm to fit circle on bunch of points. However much I'm looking i can't find the webpage I downloaded it from and there is no header in the source code, so can't give you guys credit, sorry :-(
C port of this MATLAB library
The core of it all. This guy did kalman filter IMU/barometer vario, with source codes also on GitHub and some really good documentation on his webpage. So naturally i used his Kalman filter code.
For the fuel gauge, there is a library from Awot Ghirmai and Ole Dreessen.