Понадобился высотомер, у нас был собран на Барометр Тройка V1.
код взят из примера библиотеки.
в летнее время и в помещении высота определяется вроде адекватно, хотя имеется сильный разброс до 2 - 3м.
Но при попытке использовать зимой на улице (-12 ... -16 гр.С) показания уходят в -90, -45 -70 и тп.
Может ли кто подсказать что может быть не так?
#include <SPI.h>// библиотека для работы шины SPI
#include <SD.h>// библиотека для работы SDcard
#include <Wire.h>// библиотека для работы I2C
#include <TroykaIMU.h>// библиотека для работы с модулями IMU
//Создаем объект для работы с барометром
Barometer barometer;
//Создаем объект для записи данных на SDcard
File myFile;
//объявляем переменные alt1 и pressure в которые будем писать
// значение высоты и давления
float alt1;
float pressure;
void setup()
{
Serial.begin(9600);// открываем последовательный порт для связи с ПК
//Раскоментируйте следующие 4 строки если вы работаете
//на Arduino Leonardo или Arduino Micro и хотите вывести данные
// в серийный порт из раздела Void setup()
// while (!Serial)
//{
// ;
//}
// выводим в монитор порта ПК сообщение о начале инициализации SDcard
Serial.print("Initializing SD card...");
//Укажем к какому пину Ардуино подключен пин CS SDcard
//10 для ArduinoMicro,
//4 для ArduinoUno, 10 - Leonardo(Micro),
//53 для ArduinoMega
if (!SD.begin(4))
{
//еслии что то не так то выводим сообщение об ошибка инициализации
Serial.println("initialization failed!");
return; //завершаем работу
}
Serial.println("initialization SD done.");//если инициализация прошла успешно
barometer.begin();
// выводим сообщение об удачной инициализации
Serial.println("Barometr Initialization completed");
//Присваиваем переменной "давление"
//значение для рассчета высоты
pressure = barometer.readPressureMillibars();
//рассчитываем и записываем значение высоты в переменную alt1
alt1 = barometer.pressureToAltitudeMeters(pressure);
}
void loop()
{
// создаём переменную и присваиваем ей значения абсолютного давления
pressure = barometer.readPressureMillibars();
// создаём переменную и присваиваем ей значения высоты над уровнем море
float altitude = barometer.pressureToAltitudeMeters(pressure);
delay(200); //фиксируем данные с частотой 5 раз в секунду
Serial.print("h: ");// Выводим на экран обнуленное знаение высоты
Serial.print(altitude - alt1);//этим выражением высота обнуляется
Serial.print(" m \t");
//delay(50);
//открываем или создаем на карте текстовый файл с названием "Altitude.txt"
//FILE_WRITE - этот параметр сделает файл открытым для редактирования
//если ни чего не указать, то файл бкдет доступен только для чтения
myFile = SD.open("Altitude.txt", FILE_WRITE);
if (myFile) //если файл создан или уже был на карте,
{
//myFile.print("H--: \t");// то дописываем в него строчки, если раскоментировать эту строку,
//то перед значением будет выводиться буква Н--:
myFile.println(altitude - alt1);// этой строкой дописываем в файл высоту от точки старта
//myFile.println("");// это создаст пустую строку
myFile.close();// закрываем файл
Serial.println("Success!"); // выводим в монитор ПК сообщение о записи в файл Успешно!
} else
{
// выводим ошибку если не удалось открыть файл
Serial.println("error opening file");
}
//delay(100);
}