From Openmoko

Jump to: navigation, search
Wishes warning! This article or section documents one or more OpenMoko Wish List items, the features described here may or may not be implemented in the future.



The variometer signal is simply the derivative of the barometer signal. It gives a much more accurate vertical speed signal than is possible with GPS.This kind of measurement is used by the free flying community (hanggliding, paragliding, ballooning). A device that allows teams of pilots to share position and speed (with accurate vertical speed) data would be lots of fun. Variometer Reference


It could be best to filter and differentiate the analog pressure signal and then digitize. Another possibility is to differentiate the height in software. A robust solution is to compute a linear regression of a sliding window of height samples. The height samples can be computed using integer arithmetic by a pressure->altitude lookup table followed by interpolation. Maybe it's even possible to add detail based on the accelerometers.

References to applicable transducers:

Hardware solution

Signal Conditioning

The absolute pressure signal needs to be:

  1. Differentiated
  2. Filtered
  • Operational amplifiers in the following configuration:

See the signal conditioning example in this Application Note
It might be best to use a single chip solution if we can find the right fit e.g.: Max1464

The software solution can simply be done in the variometer application with some very simple math.


We would need two A/D channels:

  1. Absolute Pressure - 12 bit minimum (assuming a operating range of 0 - 12000 meter 12 bits would give resolution of 2.9304 m)
  2. Differential Pressure - 10 bit minimum (assuming a range of +-20m/s 10 bits would give a resolution of 0.0391 m/s)

Extending 8 bit sampling to a usable range for pressure sensing

Driver Code

The driver code samples the input channels and converts the input values from pressure to altitude:

The relationship between static pressure and pressure altitude is defined in terms of the properties of the International Standard Atmosphere. Up to 36,090 ft this can be expressed as:

<math> z =\left (1-\left(\frac{P_{ind}}{101.325}\right)^{0.190263} \right ) \times \frac{87.828}{0.00198122} </math>


  • z = pressure altitude (meter)
  • <math>P_{ind}</math> = static pressure (kPa)

These values are provided to listeners in multiple applications. The sample rate should be application adjustable to conserve power.

Application code

Applications can use the altitude data or combine the data with GPS and accelerometer data. Commonly Kalman filter/observer techniques are used to combine data from multiple sensor types into a robust(with respect to sensor noise), high accuracy estimate of position and speed in 3 axis.


Variometer Code

Combine measurements as described above. Apply knowledge about the aircraft dynamics to increase accuracy:

  • Total Energy compensation
  • Relative Netto Compensation - use accelerometer data to sense when glider is turning in a thermal

User Interface

  • Display speed data in ergonomic manner.
  • Display speed for pilots in group.
  • Visual and audible guidance to pilot with best climb rate (given reasonable proximity)
  • Possible integration with mapping application

Server Based Services

Auto discovery service

  • Pilots with Openmoko based variometers can choose to publish their status on a central service.
  • Based on location - the system will notify pilots of the presence of others that can participate in group flying.


Maybe it is possible to do that on the Freerunner ?

Connection :

  • SPI or I2C (or through the debug board connector ?)
  • HID device (ex: Oak USB Sensor Atmospheric Pressure [])

The page I2C_Pressure_Sensor describes how to add a pressure sensor connected to the I2C bus.

Personal tools