0 голосов

Понадобился высотомер, у нас был собран на Барометр Тройка 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);
 
 
 
}

(11 баллов) 1 3 6

1 Ответ

0 голосов
А даташите что пишут, смотрели?
(589 баллов) 4 8 19
Добро пожаловать на Бредборд! Сайт вопросов и ответов на тему Arduino, Raspberry Pi и хоббийной электроники в целом. Цель Бредборда — быть максимально полезным. Поэтому мы строго следим за соблюдением правил, боремся с холиворами и оффтопиком.

    За этот месяц ещё никого.

    ...