Библиотека Adafruit BMP280

Библиотека Adafruit_BMP280 разработана специально для настройки и измерения  атмосферного давления и температуры модулем BMP280.

Как подключить стороннюю библиотеку ардуино можно почитать по ссылке.  Библиотеку Adafruit_BMP280.h можно скачать с сайта.

ZIP-архив с библиотекой версии 2.6.2.


Следующим шагом подготовки использования библиотеки, это объявление ее в начале скетча:

#include <Wire.h> // Библиотека для работы с шиной I2C 
#include <SPI.h> // Библиотека для работы с шиной SPI 
#include <Adafruit_BMP280.h> // Библиотека для работы с датчиком BMP280

Так же необходимо настроить подключение библиотеки для работы с датчиком через шину  SPI или I2C. Для этого нужно создать переменную класса для получения доступа к функциям библиотеки.  Создается экземпляр класса одним из трех способов, который зависит от того через какую шину подключается модуль:

  • Используйте данный код, если подключение было по шине I2C:
Adafruit_BMP280 bmp;
  • Следующий код создания экземпляра класса используется при подключении через аппаратный SPI (в таком случае указываем только пин выбора датчика CS):
#define PIN_CS 10 
Adafruit_BMP280 bmp(PIN_CS);
  • Если подключение датчика было через программный SPI, то необходимо указать все ножки SPI шины:
#define PIN_SCK  13
#define PIN_MISO 12
#define PIN_MOSI 11
#define PIN_CS   10
Adafruit_BMP280 bmp(PIN_CS, PIN_MOSI, PIN_MISO,  PIN_SCK);

После подключения и создания экземпляра класса, мы можем использовать функции класса для работы с датчиком. И первой функцией будет функция инициализации bmp.begin():

if(!bmp.begin()) 
{ // Если датчик BMP280 не найден
    Serial.println(“BMP280 SENSOR ERROR”); // Выводим сообщение об ошибке
    while(1); // Переходим в бесконечный цикл
}

В коде выше, мы инициализируем нашу библиотеку, если bmp.begin() возвращает 0, значит библиотека наш датчик не обнаружила. Необходимо проверить правильность подключения, а также проверить тем ли способом создали экземпляр класса.

Если библиотека нашла наш датчик, следующим шагом будет первоначальная настройка измерений датчика. Для этого предназначена функция setSampling.

bmp.setSampling(Adafruit_BMP280::MODE_NORMAL,     // Режим работы
                Adafruit_BMP280::SAMPLING_X2,     // Точность изм. температуры
                Adafruit_BMP280::SAMPLING_X16,    // Точность изм. давления
                Adafruit_BMP280::FILTER_X16,      // Уровень фильтрации
                Adafruit_BMP280::STANDBY_MS_500); // Период просыпания, мСек

Функция принимает следующие параметры:

Режим работы модуля

  • MODE_NORMAL – при данном режиме, во время настройки измерений 5-м параметром задается цикличность измерений модуля. Модуль просыпается в порядке установленного времени, производит измерения температуры и атмосферного давления. Сохранив результат измерения в свою память, засыпает.
  • MODE_FORCED – пользовательский режим измерения, запрос на измерение подает внешний сигнал от ардуино. После получения сигнала, модуль измеряет атмосферное давление и температуру и вновь уходит в сон.
  • MODE_SLEEP – режим минимального энергопотребления. В данном режиме модуль не производит измерений, но и потребления энергии самое маленькое из всех режимов.
  • MODE_SOFT_RESET_CODE – данный режим означает, что модуль будет настроен на заводских настройках.

Вторым и третьим параметром настройки модуля являются настройки для точности измерений температуры и атмосферного давления.

Точность измерения

  • SAMPLING_NONE – точность измерения не используется;
  • SAMPLING_X1 – точность измерения  АЦП 16 бит;
  • SAMPLING_X2 – точность измерения  АЦП 17 бит;
  • SAMPLING_X4 – точность измерения  АЦП 18 бит;
  • SAMPLING_X8 – точность измерения АЦП 19 бит;
  • SAMPLING_X16 – точность измерения АЦП 20 бит.

Внимание!


Данный датчик может реагировать на звуковые волны, поэтому для более точного измерения используйте настройку АЦП минимум _X4.

Четвертый параметр отвечает за применения фильтрации измеренных данных. Этот параметр используется в совокупности с 2 и 3 парметром.

Фильтрация

  • FILTER_OFF –  фильтрация отключена;
  • FILTER_X2 – уровень фильтрации X2;
  • FILTER_X4 – уровень фильтрации X4;
  • FILTER_X8 – уровень фильтрации X8;
  • FILTER_X16 –уровень фильтрации X16.

Пятый параметр устанавливает время циклической работы модуля в режиме MODE_NORMAL:

Время цикла

  • STANDBY_MS_1 – модуль просыпается каждую миллисекунду;
  • STANDBY_MS_63 – модуль просыпается каждые 63 миллисекунды;
  • STANDBY_MS_125 – модуль просыпается каждых 125 миллисекунд;
  • STANDBY_MS_250 – модуль просыпается каждых 250 миллисекунд;
  • STANDBY_MS_500 – модуль просыпается каждых 500 миллисекунд;
  • STANDBY_MS_1000 – модуль просыпается каждую секунду;
  • STANDBY_MS_2000 – модуль просыпается каждые 2 секунды;
  • STANDBY_MS_4000 – модуль просыпается каждых 4 секунды;

На этом этапе настройка модуля завершена. Теперь мы можем воспользоваться функциями измерения атмосферного давления.

void loop() {
  // Выводим значение температуры
  Serial.print(F("Temperature = "));
  Serial.print(bmp.readTemperature()); // Функция измерения температуры
  Serial.println(" *C");

  // Выводим значение атмосферного давления
  Serial.print(F("Pressure = "));
  Serial.print(bmp.readPressure());  // Функция измерения атм. давления
  Serial.println(" Pa");

  // Выводим значение высоты
  Serial.print(F("Approx altitude = "));
  Serial.print(bmp.readAltitude(1013.25)); // Функция измерения высоты
  Serial.println(" m");
}

Для измерения высоты используется константа 1013.25. Это значение атмосферного давления над уровнем моря, на территории, где находится датчик.

Использование библиотеки с шиной I2C

Для обмена данными через шину I2C необходимо знать уникальный адрес модуля, установленный  заводом изготовителем. Модуль BMP 280 имеет два адреса 0x77 или 0x76. По умолчанию Adafruit_BMP280.h настроена на адрес 0х77. По этому некоторые модули могут не работать, если на заводе установлен адрес 0x76. Данный адрес можно установить отредактировав файл Adafruit_BMP280.h. Необходимо найти строчку в коде и изменить адрес в скобках на 0x76:

#define BMP280_ADDRESS (0x77) /**< The default I2C address for the sensor. */
5 1 голос
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии