Здравствуйте! Я подключил IMU-сенсор: 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); } И получаю вот такой результат: Я нахожусь на тринадцатом этаже, такого просто быть не может. Что я не так сделал?
Чтобы узнать высоту над уровнем моря из текущего давления, надо знать давление на уровне моря на данный момент. Хотя бы один раз откалибровать, чтобы потом было с чем сравнивать. Теория.
Находите ближайший к себе аэропорт, смотрите текущий прогноз погоды в нем (например, METAR). Лучше всего брать приведенное давление (QNH), оно уже приведено к уровню моря, но можно взять давление QFE и внести поправку на превышение аэропорта.
Калибровка заключается в определении, какая высота над уровнем моря соответствует какому давлению в данном конкретном месте в данное конкретное время. Ведь атмосферное давление имеет дурную привычку меняться, причем в самых широких пределах. За основу можно принять текущие показания по давлению ближайшей метеостанции с учетом ее высоты над уровнем моря. upd. Применительно к библиотеке: у функции определения высоты есть второй параметр, который можно не указывать, поскольку для него задано значение давления в миллибарах по умолчанию (так называемое стандартное давление на уровне моря - 1013.25, оно же ~760 мм ртутного столба, оно же 29.9213 дюймов того же ртутного столба). Определение функции из класса библиотеки выглядит так: static float pressureToAltitudeMeters(float pressure_mbar, float altimeter_setting_mbar = 1013.25); Соответственно, надо пересчитать давление на метеостанции в давление на уровне моря исходя из формулы. данной по ссылке DrProg (формула там простая, обратить несложно).
Как перевести давление в миллиметрах ртутного столба в единицы, которые функция pressureToAltitudeMeters принимает вторым параметром?