IMU: барометр не правильно вычисляет уровень над уровнем моря

Тема в разделе "Arduino & Shields", создана пользователем egordorichev, 10 сен 2015.

  1. egordorichev

    egordorichev Гик

    Здравствуйте! Я подключил IMU-сенсор:

    [​IMG]

    G -> GND
    V -> 5V
    D -> A4
    C -> A5

    Загрузил скетч:

    Код (Text):

    #include <Wire.h>
    #include <troyka-imu.h>

    Barometer barometer;

    void setup(){
      Serial.begin(9600);
      barometer.begin();
    }

    void loop(){
      Serial.print("Высота над уровнем моря: ");
      Serial.print(barometer.pressureToAltitudeMeters(barometer.readPressureMillibars()));
      Serial.print("<br/>Давление: ");
      Serial.print(barometer.readPressureMillibars());
      Serial.print("<br/>Температура: ");
      Serial.println(barometer.readTemperatureC());

      delay(300);
    }
     
    И получаю вот такой результат:

    [​IMG]

    Я нахожусь на тринадцатом этаже, такого просто быть не может. Что я не так сделал?
     
    Последнее редактирование: 2 окт 2015
  2. DrProg

    DrProg Вечный нерд

    Чтобы узнать высоту над уровнем моря из текущего давления, надо знать давление на уровне моря на данный момент. Хотя бы один раз откалибровать, чтобы потом было с чем сравнивать. Теория.
     
  3. egordorichev

    egordorichev Гик

    A есть ли какая-та функция для этого? Я вы исходниках не нашел. Или как его откалибровать?
     
    Последнее редактирование: 11 сен 2015
  4. monsieur_cher

    monsieur_cher Нерд

    Находите ближайший к себе аэропорт, смотрите текущий прогноз погоды в нем (например, METAR). Лучше всего брать приведенное давление (QNH), оно уже приведено к уровню моря, но можно взять давление QFE и внести поправку на превышение аэропорта.
     
  5. geher

    geher Гуру

    Калибровка заключается в определении, какая высота над уровнем моря соответствует какому давлению в данном конкретном месте в данное конкретное время. Ведь атмосферное давление имеет дурную привычку меняться, причем в самых широких пределах.
    За основу можно принять текущие показания по давлению ближайшей метеостанции с учетом ее высоты над уровнем моря.

    upd.
    Применительно к библиотеке: у функции определения высоты есть второй параметр, который можно не указывать, поскольку для него задано значение давления в миллибарах по умолчанию (так называемое стандартное давление на уровне моря - 1013.25, оно же ~760 мм ртутного столба, оно же 29.9213 дюймов того же ртутного столба).
    Определение функции из класса библиотеки выглядит так:
    static float pressureToAltitudeMeters(float pressure_mbar, float altimeter_setting_mbar = 1013.25);
    Соответственно, надо пересчитать давление на метеостанции в давление на уровне моря исходя из формулы. данной по ссылке DrProg (формула там простая, обратить несложно).
     
    Последнее редактирование: 12 сен 2015
    egordorichev и Dixi нравится это.
  6. egordorichev

    egordorichev Гик

    Как перевести давление в миллиметрах ртутного столба в единицы, которые функция pressureToAltitudeMeters принимает вторым параметром?
     
  7. geher

    geher Гуру

    Умножить миллиметры на 1.33322.
     
  8. egordorichev

    egordorichev Гик

    Спасибо!