Советы по развитию

Модуль барометра BMP280

Корректировка высоты

В приведенном примере датчик вроде бы вычисляет высоту над уровнем моря. Однако, в качестве базового значения давления на уровне моря в функцию readAltitude передается число 1013.25.

В действительности, давление на уровне моря зависит от погодных условий. Сегодня может быть 950 гПа, а завтра 1050 гПа, как в таких условиях определить верную высоту? Решить проблему можно с помощью периодической коррекции давления на уровне моря.

Предположим, что нужно запустить беспилотник, который будет летать всего 20-25 минут. За такое время давление вряд ли изменится и мы можем скорректировать его только при включении контроллера, прямо в функции setup.

float base; // в этой переменной будет храниться давление на уровне моря
void setup() {
    Serial.begin(9600);
  
    if (!bmp.begin()) { // инициализация датчика
        Serial.println("Error!");
        while (1);
    }

    // считываем текущее значения давления и переводим из Па в гПа
    base = bmp.readPressure() / 100.0F;
}

Теперь переменную base можно передавать в функцию readAltitude для вычисления адекватной высоты над уровнем моря.

Тонкая настройка

Датчик BMP280 имеет ряд настроек, которые позволяют адаптировать его под разные задачи: мониторинг погоды, определение высоты полета на улице либо в помещении, использование в составе умных устройств с низким энергопотреблением, и т.п.

Можно настроить:

  • режим работы — один из трёх режимов: нормальный, принудительный, сон;
  • oversampling (OS) — избыточность измерений, которая увеличивать точность;
  • рекурсивный фильтр (IIR) — фильтр, снижающий уровень шумов измерения;
  • время ожидания — время между измерениями в нормальном режиме.

Сон — это обычное состояние датчика (как и некоторых людей), в которое он переходит после подачи питания. Контроллер может перевести датчик в нормальный или принудительный режим.

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

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

Режим, oversampling и фильтрация влияют на точность, потребляемую энергию и скорость опроса. Вот к примеру, таблица зависимости времени опроса. Потребление рассчитано для принудительного режима с опросом каждую секунду.

oversamplingразрядность / точностьвремя опросапотребление
116 бит / 2,62 Па5,5 мс2,74 — 4,16
217 бит / 1,31 Па7,5 мс4,17 — 6,27
418 бит / 0,66 Па11,5 мс7,02 — 10,5
819 бит / 0,33 Па19,5 мс12,7 — 18,95
1620 бит / 0,16 Па37,5 мс24,8 — 36,85

По-умолчанию, в библиотеке Adafruit_BMP280 датчик запускается в нормальном режиме с максимальными настройками OS, с выключенным фильтром и с временем ожидания 1 мс.

Для изменения параметров в библиотеке предусмотрена функция setSampling:

setSampling(sensor_mode mode, s_sampling t_sampling, sensor_sampling p_sampling, sensor_filter filter, standby_duration duration)

Пример использования:

 void setup() {
    Serial.begin(9600);
  
    // инициализация датчика
    if (!bmp.begin()) {
        Serial.println("Error!");
        while (1);
    }

    bmp.setSampling(Adafruit_BMP280::MODE_NORMAL, // нормальный режим
                  Adafruit_BMP280::SAMPLING_X1, // OS температуры
                  Adafruit_BMP280::SAMPLING_X4, // OS давления
                  Adafruit_BMP280::FILTER_OFF, // фильтрация
                  Adafruit_BMP280::STANDBY_MS_500 // таймаут сна
    );
}

Константы MODE_, SAMPLING_ и прочее, можно найти в исходном коде библиотеки, в файле .h (ссылка в конце урока)

Вот так. Если нужен датчик для погодной станции — делаем минимальное потребление уменьшая точность и применяя принудительный режим с опросом раз в час. Для квадрокоптера подойдет нормальный режим и стандартный OS с какой-то фильтрацией. Для мобильных устройств, например, игровых манипуляторов — максимальный OS и фильтрация.

Полезные ссылки

Спецификация производителя

Исходный код Adafruit_BMP280

Принципиальная схема платы BME280 от RobotClass

RobotClass BMP280. Принципиальная схема

Изменено:

Модуль барометра BMP280: Один комментарий

  1. Сделал корректировку высоты , а в результатах не отображается высота (Approx altitude = inf m), в чем может быть проблема ?

Добавить комментарий

Ваш адрес email не будет опубликован.