Общие сведения:
Trema-модуль датчик давления BMP280 - это цифровой модуль на базе чипа BMP280, подключаемый по шине I2C (адрес 0x77), позволяющий получить текущие значения атмосферного давления и температуры окружающей среды. Еще одним применением данного модуля является определений высоты, которая зависит от давления и рассчитывается по международной барометрической формуле. Точность Trema барометра позволяет фиксировать изменение высоты от 20 см.
Видео:
Спецификация BMP280:
- Напряжение питания модуля: 3,3 или 5 В постоянного тока (поддерживаются оба уровня).
- Потребляемый ток: до 2 мА во время измерений (зависит от режима точности).
- Потребляемый ток: до 0,2 мА в режиме ожидания.
- Измеряемое давление: от 30'000 до 110'000 Па (разрешение 0,16 Па)
- Измеряемая температура: от 0 до +65 °C (разрешение 0,01°C)
- Рабочая частота шины I2C: до 3,4 МГц.
- Адрес модуля на шине I2C: 0x77.
- Уровень логической «1» на шине I2C: от 0,7*Vcc до Vcc (где Vcc это напряжение питания модуля)
- Подготовка к первому запуску после подачи питания: не менее 2 мс.
- Рабочая температура: -40 … +85 °C
- Габариты: 30x30 мм.
Все модули линейки "Trema" выполнены в одном формате
Подключение:
Модуль подключается к аппаратной или программной шине I2C Arduino. Логические уровни шины I2C не должны превышать напряжение питания.
Модуль удобно подключать 3 способами, в зависимости от ситуации:
Способ - 1: Используя проводной шлейф и Piranha UNO
Используя провода «Папа — Мама», подключаем напрямую к контроллеру Piranha UNO.
Способ - 2: Используя Trema Set Shield
Модуль можно подключить к любому из I2C входов Trema Set Shield.
Способ - 3: Используя проводной шлейф и Shield
Используя 4-х проводной шлейф, к Trema Shield, Trema-Power Shield, Motor Shield, Trema Shield NANO и тд.
Способ - 4: Подключение к программной шине I2C
При использовании программной шины I2C, модуль можно подключить к любым выводам Arduino, но потребуется дополнительно установить библиотеку iarduino_I2C_Software.h, для создания программной шины I2C, указав номера выбранных вами выводов. О том как это сделать читайте ниже в разделе «Подключение библиотеки», а так же на странице Wiki - Расширенные возможности библиотек iarduino для шины I2C.
Питание:
Входное напряжение питания от 3,3 до 5,5 В постоянного тока, подаётся на выводы VIN и GND модуля.
Подробнее о модуле:
Trema-модуль датчик давления построен на базе чипа BMP280 (Bosch Module Pressure), оснащён преобразователем уровней на базе чипа PCA9306 и линейным стабилизатором на базе чипа RT9193. Чип BMP280 оснащён пьезорезистивным датчиком, термодатчиком, АЦП, памятью EEPROM и RAM, а так же микроконтроллером с поддержкой циклического вычисления измерений (при получении запроса, модуль сразу возвращает ответ, не тратя время на вычисления, как это делал чип BMP180). Чип PCA9306 позволяет передавать данные по шине I2C с уровнями от 3,3 до 5,5 В. Чип RT9193, позволяет подключать Trema-модуль к источнику питания от 3,3 до 5,5 В постоянного тока. Основной чип модуля, BMP280, имеет меньшие габариты и лучшие характеристики по сравнению со своими предшественниками BMP185 и BMP085.
Для работы с модулями на базе чипов BMP180 и BMP280, предлагаем воспользоваться разработанной нами библиотекой iarduino_Pressure_BMP, позволяющей получать температуру, давление и высоту.
У нашей библиотеки есть ряд преимуществ: она позволяет заменять датчики BMP180 / BMP280 без изменения скетча и схемы включения; она позволяет выбирать режим точности показаний (значение передискретизации) и единицы измерения выводимого давления (Па или мм.рт.ст.); для расчёта высоты, ей не нужно указывать давление над уровнем моря, а достаточно указать любую начальную высоту в качестве аргумента функции begin([высота]). Если вы указали 0 метров (значение по умолчанию), то подняв модуль на 10 метров - получите результат +10, а опустив на 10 метров - получите результат -10. Если в качестве аргумента функции brgin([высота]) указать высоту над уровнем моря, то все остальные значения высоты будут соответствовать действительной высоте над уровнем моря. Уменьшая точность измерений Вы ускорите процесс получения результата.
Подробнее про установку библиотеки читайте в нашей инструкции..
Примеры:
Вывод значений давления в мм.рт.ст. и в Па:
#include <Wire.h> // Подключаем библиотеку для работы с аппаратной шиной I2C, до подключения библиотеки iarduino_Pressure_BMP. #include <iarduino_Pressure_BMP.h> // Подключаем библиотеку для работы с датчиками BMP180 или BMP280 iarduino_Pressure_BMP sensor; // Создаём объект sensor для работы с датчиком адрес которого на шине I2C установлен по умолчанию. void setup(){ Serial.begin(9600); delay(1000); sensor.begin(&Wire); // Инициируем работу с датчиком, указав ссылку на объект для работы с шиной I2C на которой находится модуль (по умолчанию &Wire), без указания начальной высоты (по умолчанию = 0 метров). } void loop (){ // Читаем показания (давление возвращается в мм.рт.ст.) if(sensor.read(1)) {Serial.println((String)"CEHCOP BMP" + sensor.type + ": \t P = " + sensor.pressure + "\tMM.PT.CT, \t T = " + sensor.temperature + " *C, \t\t B = "+sensor.altitude+" M.");} else {Serial.println("HET OTBETA OT CEHCOPA");} // Читаем показания (давление возвращается в Па) if(sensor.read(2)) {Serial.println((String)"CEHCOP BMP" + sensor.type + ": \t P = " + sensor.pressure + "\tPa, \t\t T = " + sensor.temperature + " *C, \t\t B = "+sensor.altitude+" M.");} else {Serial.println("HET OTBETA OT CEHCOPA");} delay(3000); // Ждём 3 секунды (не обязательно) }
Описание основных функций библиотеки:
В данном разделе описаны функции библиотеки iarduino_Pressure_BMP для работы с датчиками давления на базе чипа BMP180 или BMP280.
Библиотека iarduino_Pressure_BMP может использовать как аппаратную, так и программную реализацию шины I2C. О том как выбрать тип шины I2C рассказано ниже в разделе «Подключение библиотеки», а так же на странице Wiki - расширенные возможности библиотек iarduino для шины I2C.
Подключение библиотеки:
- Если используется аппаратная шина I2C:
#include <Wire.h> // Подключаем библиотеку для работы с аппаратной шиной I2C, до подключения библиотеки iarduino_Pressure_BMP.h #include <iarduino_Pressure_BMP.h> // Подключаем библиотеку для работы с модулем. // iarduino_Pressure_BMP sensor; // Создаём объект sensor для работы с функциями и методами библиотеки iarduino_Pressure_BMP, адрес модуля по умолчанию 0x77. // iarduino_Pressure_BMP sensor(0x76); // Можно создать объект указав адрес модуля на шине I2C. // void setup(){ // ... // sensor.begin(&Wire); // Инициируем работу с модулем, указав ссылку на объект для работы с шиной I2C на которой находится модуль (по умолчанию &Wire). ... // Доступны объекты: &Wire, &Wire1, &Wire2... } //
- Если используется программная шина I2C:
#include <iarduino_I2C_Software.h> // Подключаем библиотеку для работы с программной шиной I2C, до подключения библиотеки iarduino_Pressure_BMP.h SoftTwoWire sWire(3,4); // Создаём объект программной шины I2C указав выводы которым будет назначена роль линий: SDA, SCL. // #include <iarduino_Pressure_BMP.h> // Подключаем библиотеку для работы с модулем. iarduino_Pressure_BMP sensor; // Создаём объект sensor для работы с функциями и методами библиотеки iarduino_Pressure_BMP, адрес модуля по умолчанию 0x77. // iarduino_Pressure_BMP sensor(0x76); // Можно создать объект указав адрес модуля на шине I2C. // void setup(){ // ... // sensor.begin(&sWire); // Инициируем работу с модулем, указав ссылку на объект для работы с шиной I2C на которой находится модуль (по умолчанию &Wire). ... // } //
- В обоих примерах сначала подключается библиотека для работы с шиной I2C. Для аппаратной шины библиотека
Wire.h
(предустановлена в Arduino IDE), а для программной шины библиотека iarduino_I2C_Software.h, с созданием объекта которому указываются выбранные вами выводы шины, в примере выводы(3-SDA, 4-SCL)
. - Далее подключается библиотека и создаётся объект для работы с модулем.
- В коде
Setup()
, при инициализации работы с модулем указывается ссылка на объект работы с выбранной шиной I2Cbegin(&ШИНА)
. Остальные строки кода одинаковы для любой шины I2C.
Функция begin();
- Назначение: Инициализация работы с датчиком.
- Синтаксис: begin( [ ВЫСОТА ] );
- Параметры:
- &ШИНА - Ссылка на объект для работы с шиной I2C на которой находится модуль.
- Для аппаратной шины: &Wire, &Wire1, &Wire2..., если подключена библиотека Wire.h
- Для программной шины: ссылка на объект библиотеки iarduino_I2C_Software.h.
- Параметр является не обязательным, по умолчанию используется ссылка &Wire.
- ВЫСОТА - начальная высота в метрах (например высота над уровнем моря).
- Возвращаемые значения: bool - результат инициализации (true или false).
- Примечание:
- Если вызвать функцию без параметра, то начальная высота будет равна 0 м.
- Функцию можно вызвать однократно (в коде setup), а можно и многократно (для корректировки или изменения начальной высоты).
- После вызова функции в переменные type и version будет сохранён тип и версия датчика.
- Пример:
sensor.begin(); // Инициируем работу датчика с начальной высотой модуля 0 метров. // Если после этого поднять модуль на 5 метров и вызвать функцию read(), то в переменной altitude будет значение 5 // Если после этого опустить модуль на 25 метров и вызвать функцию read(), то в переменной altitude будет значение -25
Функция read();
- Назначение: Чтение показаний датчика в переменные temperature, pressure и altitude.
- Синтаксис: read( [ ЦИФРА ] );
- Параметры:
- ЦИФРА - 1 или 2 (по умолчанию 1). Если 1 то давление рассчитывается в мм.рт.ст., если 2 то давление рассчитывается в Па
- Возвращаемые значения: bool - результат успешности чтения (true или false).
- Примечание:
- Если вызвать функцию без параметра, то атмосферное давление будет рассчитано в мм.рт.ст.
- После вызова данной функции в переменные temperature, pressure и altitude будут сохранены новые значения.
- Пример:
sensor.read(); // Читаем показания датчика и сохраняем их в переменные temperature, pressure и altitude.
Функция measurement();
- Назначение: Выбор точности измерений.
- Синтаксис: measurement( ЦИФРА );
- Параметры:
- ЦИФРА - положительное целочисленное значение от 0 (минимальная) до 3 (для bmp180) или 4 (для bmp280) включительно.
- Возвращаемые значения: bool - результат применения (true или false).
- Примечание:
- Увеличение точности показаний достигается снижением уровня шумов благодаря увеличению передискретизации при считывании показаний.
- Данная функция является необязательной, т.к. по умолчанию установлена максимальная точность.
- Если значение параметра будет выше допустимого, то установится максимальная точность.
- Уменьшение точности приведёт к уменьшению энергопотребления, а при работе с датчиком bmp180 еще и к ускорению чтения данных.
- Пример:
sensor.measurement(0); // Устанавливаем самый низкий уровень точности (передискретизации) при считывании данных.
Переменная temperature
- Значение: Содержит температуру окружающей среды в °С.
- Тип данных: float.
Переменная pressure
- Значение: Содержит атмосферное давление в мм.рт.ст. или Па.
- Тип данных: float.
Переменная altitude
- Значение: Содержит высоту относительно начальной в м.
- Тип данных: float.
Переменная type
- Значение: Содержит тип датчика (число 180 или 280)
- Тип данных: int.
Переменная version
- Значение: Содержит версию датчика
- Тип данных: int.
Применение:
- Получение данных для метеостанций
- Получение высоты для летательных аппаратов
- Получение глубины для подводных аппаратов (требуется поместить модуль в dодонепроницаемый пакет и пересчитывать глубину исходя из показаний давления, а не по данным высоты из библиотеки)
Обсуждение