BME280, Датчик влажности, температуры и давления с интерфейсом SPI и I2C

Модуль датчика BME280 позволяет измерять не только значение атмосферного давления, но и температуру и влажность. Датчик характеризуется высокой точностью измерения, высоким быстродействием интерфейса и сверхмалым потреблением. Является емкостным датчиком и главным отличием от датчика BMP280 является наличие гигрометра, что позволяет измерять относительную влажность воздуха и создать на его основе маленькую метеостанцию.

Для подключения используется I2C-интерфейс. Адрес датчика можно изменить с помощью пропайки перемычек на плате.

Пример

image

Даташит Скачать библиотеку Adafruit_Sensor Скачать библиотеку Adafruit_BME280

  • Главная
  • Каталог
  • Датчики
  • Датчики и преобразователи
  • Датчики давления
  • BME280

image Артикул: BME280 Код товара: 395876 Дата обновления: 01.07.2021 22:10 Цена от: 331,86 руб.

Технические параметры

  • Корпус LGA8
  • Нормоупаковка 1 шт.
  • Вес брутто 1.9 г.

Описание BME280

Датчик влажности, температуры и давления с интерфейсом SPI и I2C

Нужны оптовые поставки или большая партия? Отправить заявку —> Необходимо авторизоваться на сайте Зарегистрироваться Я забыл пароль

Данный товар имеет ограничение по заказу в связи с наличием классификационного номера экспортного контроля (ECCN) у выбранного склада.

Для оформления закза таких товаров с данного склада требуется один раз заполнить анкету (Civilian)

Заполнить?

Данный товар имеет ограничения по продаже в связи с Control Classification Number (ECCN). Оформления заказа таких товаров c данного склада для физических лиц недоступно.

Сфера применения Сообщите мне о поступлении товара

Подключение датчика атмосферного давления BMP280 к Arduino

BMP280 — это цифровой датчик от Bosch Sensortec позволяющий получить текущие значения атмосферного давления и температуры окружающей среды. Этот датчик специально разработан для мобильных приложений, где малый размер и низкое энергопотребление очень важны. В данной статьи увидим, как подключить датчик атмосферного давления BMP280 к Arduino по I2C и SPI, какие библиотеки установить и приведём несколько примеров скетчей.

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

BMP280 может использоваться в различных приложениях, таких как улучшение систем навигации GPS, внутренняя навигация, таких как обнаружение пола и обнаружение лифта, наружная навигация, спортивные приложения, прогноз погоды и т. д. Еще одним применением данного модуля является определений высоты, которая зависит от давления и рассчитывается по международной барометрической формуле.

Установка библиотек

Для работы с датчиком BMP280 существуют различные библиотеки, упрощающие работу. К ним относятся BMP280_DEV, Adafruit_BMP280_Library. Для датчика BMP280 будет используется библиотека от Adafruit.

Adafruit Unified Sensor Driver — общий драйвер

Библиотека Arduino для датчиков BMP280

Чтобы начать считывать данные с датчиков, вам необходимо установить библиотеку Adafruit_BMP280 (код в репозитории github). Она доступна в менеджере библиотек Arduino, поэтому рекомендуется его использовать.

Подключение BMP280 к Arduino по I2C/TWI

Так как датчик может работать по I2C и SPI, подключение можно реализовать двумя методами. При подключении по I2C нужно соединить контакты SDA и SCL.

Схема подключения BMP280 к Arduino

Для подключения понадобятся сам датчик BMP280, плата Ардуино, соединительные провода. Схема подключения показана на рисунке ниже.

Землю с Ардуино нужно соединить с землей на датчике, напряжение 3.3 В — на 3.3 В, SDA — к пину А4, SCL — к А5. Контакты А4 и А5 выбираются с учетом их поддержки интерфейса I2C.

Существуют несколько модулей с этим датчиком. Первый вариант — это модуль для работы в 3.3 В логике, данные модули будут подешевле; второй вариант — для работы в 5.0 В логике, на нём присутствуют: линейный стабилизатор напряжения на 3.3 В и преобразователи уровней 3.3/5.0 В на линиях SCK/SCL и SDI(MOSI)/SDA. Первый подойдёт для ардуин работающих от 3.3 В и Raspberry Pi / Orange Pi / Banana Pi и т.д., а второй — для обычных ардуин на 5.0 В.

Подключение BMP280 с встроенными стабилизатором напряжения на 3.3 В и преобразователями уровней 3.3/5.0 В на линиях SCK/SCL и SDI(MOSI)/SDA к Arduino.

Arduino Mega Arduino Uno/Nano/Pro Mini BMP280 модуль Цвет проводов на фото
GND GND GND Черный
5V 5V Vin Красный
20 (SDA) A4 SDA/SDI Зелёный
21 (SCL) A5 SCL/SCK Жёлтый

Подключение BMP280 без встроенного стабилизатора напряжения на 3.3 В к Arduino. В данном случае нужно использовать внешний преобразователь уровней на линиях SCK/SCL и SDI(MOSI)/SDA.

Arduino Mega Arduino Uno/Nano/Pro Mini BMP280 модуль Цвет проводов на фото
GND GND GND Черный
3.3V 3.3V VCC/3.3V Красный
20 (SDA) A4 SDA/SDI Зелёный
21 (SCL) A5 SCL/SCK Жёлтый

Примеры скетча

После запуска вы можете инициализировать датчик с помощью:

Источник

BME280 — датчик атмосферного давления, влажности и температуры

Автор: Сергей · Опубликовано 23.05.2019 · Обновлено 13.04.2020

Читайте также:  Как подключить mirascreen к телефону

Сегодня расскажу о датчике BME280 с помощью которого можно получить показания влажности, температуры, атмосферного давления и высоту (расчетную). Данный датчик прост, предварительно откалиброван и для подключения не требуется дополнительных компонентов.

Технические параметры

Общие сведения

Рассмотрим модуль поближе, в правой части расположен датчик BME280 фирмы Bosch (это приемник таких датчиков, как BMP180, BMP085). Данный датчик измеряет влажность, температуру и давление с помощью данных показаний осуществляется расчет высоты, но эти показания не точные, подробно о датчике можно посмотреть в документации. На обратной стороне установлен стабилизатор напряжения LM6206 на 3.3 В и преобразователь уровней I2C, поэтому можно подключить модуль к микроконтроллерам с 3.3 В или 5 В логикой, не боясь.

Назначение контактов: ► VCC, GND — питание модуля 3.3 В или 5 В ► SCL — линия тактирования (Serial CLock) ► SDA — линия данных (Serial Data)

Данный модуль работает по двухпроводному интерфейсу I2C, адрес по умолчанию 0x76, но есть возможность изменить на адрес 0x77. Если присмотреться на модуль, рядом с датчиком расположены контакты, по умолчанию левый и средний контакт замкнуты проводником. Необходимо острым предметом перерезать проводник и установить припоем перемычку между центральный и правым контактом,тем самым установив адрес 0x77. При необходимости можно вернуть адрес 0x76.

Подключение датчика давления BME280 к Arduino

Необходимые детали: ► BME280 — датчик атмосферного давления, влажности и температуры x 1 шт. ► Arduino UNO R3 (DCCduino, CH340G)x 1 шт. ► Провод DuPont 10x, 2,54 мм, 20 см, F-F (Female — Female) x 1 шт.

Программа: Для датчика BME280 разработана библиотека «Adafruit BME280 Library» с помощью которой можно упростить работу с датчиком. Так же, для работы датчика необходима дополнительная библиотека «Adafruit Unified Sensor«. Скачать библиотеки можно в конце статьи или можно скачать через «Менеджер библиотек» в среде разработки IDE Arduino.

Источник

Датчик атмосферного давления BMP280

Товары

Модуль представляет из себя высокоточный цифровой измеритель атмосферного давления на базе микро-чипа BMP280 от фирмы BOSH. После изготовления каждый датчик проходит индивидуальную калибровку в заводских условиях. Его малые размеры, низкое энергопотребление и высокая измерительная способность позволили завоевать популярность среди множества разработчиков Arduino-проектов. Модуль BMP280 был разработан фирмой как более технологичная модель своего предшественника BMP180. Данная модификация, в отличие от своего младшего брата, предоставляет пользователю целых 2 последовательных интерфейса обмена данными (SPI и I2C), а также 3 режима работы:

NORMAL – в данном режиме модуль просыпается с определённой периодичностью, выполняет необходимые измерения и снова засыпает. Частота измерений задаётся программным путём, а результат считывается при необходимости.

SLEEP – режим максимально пониженного энергопотребления.

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

Читайте также:  Как подключить прицеп к легковому автомобилю схема пошаговое фото

Помимо способности измерять показания атмосферного давления, разработчик наделил BMP280 возможностью определять температуру окружающей среды. Все производимые вычисления могут быть отфильтрованы настраиваемым программным фильтром. На рисунке №1 показан внешний вид модуля и его электрическая схема.

Как видно из вышеприведенной схемы на модуле предусмотрены конденсаторы для фильтрации по питанию и подтягивающие резисторы интерфейсов ввода/вывода.

Технические характеристики BMP280

К основным техническим характеристикам можно отнести следующие:

Напряжение питания: 1.71V – 3.6V;

Интерфейс обмена данными: I2C или SPI;

Ток потребления в рабочем режиме: 2.7uA при частоте опроса 1 Гц;

Максимальная частота работы интерфейса I2C: 3.4MHz;

Максимальная частота работы интерфейса SPI: 10 МГц;

Размер модуля: 21 х 18 мм;

Подключение BMP280 к плате Arduino

Вышеприведенная схема подключения составлена согласно расположению аппаратного интерфейса SPI на платах Arduino UNO, Nano, Mini и.т.п. Исключением является вывод CSB модуля BMP280. В данной схеме он подключен к 10-му пину Arduino, но может быть соединён с любым цифровым выводом, указанным при составлении программы.

Как правило, для BMP280 в Интернете можно найти с десяток библиотек, упрощающих работу с ним. Библиотека Adafruit_BMP280.h позволяет максимально сократить время на освоение данного модуля, не урезая его функционал. Методы библиотеки дают возможность пользователю выбрать способ подключения, а также настроить периодичность и точность измерений в зависимости от режимов работы. Ниже будут рассмотрены некоторые приёмы работы с данной библиотекой.

Итак, для того чтобы начать работу с BMP280 необходимо установить вышеуказанную библиотеку, подключить сам заголовочный файл Adafruit_BMP280.h, а также ещё два файла Wire.h и SPI.h, для доступа к необходимым интерфейсам.

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

Следует помнить, что при составлении программы должен быть указан только один из трёх возможных вариантов, иначе будет работать самый последний.

Теперь через объект bmp мы имеем возможность работать с функциями библиотеки, но изначально необходимо инициализировать модуль. Делать это целесообразно внутри функции setup() перед основным циклом:

Таким образом при выводе сообщения об ошибке следует проверить правильность подключения и соответствие его используемому интерфейсу. При успешной инициализации можно переходить к настройке самой микросхемы BMP280. Для этих целей в библиотеке предусмотрена функция setSampling(. ), с помощью которой задаётся режим работы модуля, точность измерения атмосферного давления и температуры окружающей среды, степень фильтрации и период активности датчика. Ниже приведён пример настроек, заданных по умолчанию.

Рассмотрим подробнее данную функцию. Её первый параметр отвечает за режим работы датчика. Всего доступно 4 варианта, а именно:

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

MODE_FORCED – в этом режиме датчик проводит измерения при получении команды от Arduino, после чего возвращается в состояние сна.

MODE_SLEEP – режим сна или пониженного энергопотребления.

Читайте также:  Sony mdr zx220bt как подключить к компьютеру

MODE_SOFT_RESET_CODE – сброс на заводские настройки.

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

SAMPLING_X1 – точность АЦП 16 бит;

SAMPLING_X2 – точность АЦП 17 бит;

SAMPLING_X4 – точность АЦП 18 бит;

SAMPLING_X8 – точность АЦП 19 бит;

SAMPLING_X16 – точность АЦП 20 бит.

Четвёртый параметр отвечает за уровень фильтрации измеренных данных. Значения этого параметра могут быть следующие:

FILTER_OFF – фильтр выключен;

FILTER_X2 – минимальный уровень фильтрации;

FILTER_X16 – максимальный уровень фильтрации.

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

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 секунды;

На этом стадию настройки параметров датчика BMP280 можно считать завершённой. Библиотека Adafruit_BMP280 предоставляет пользователю три функции, с помощью которых можно считать показания температуры, атмосферного давления и высоты над уровнем моря. Ниже приведён фрагмент программного кода, с помощью которого эти данные выводятся в окно терминала. Считывание происходит в основном цикле loop().

Следует пару слов сказать о функции bmp.readAltitude(1013.25) и откуда берётся число 1013.25. Это значение давления над уровнем моря конкретной локации, где находится в данный момент датчик. Параметр задаётся в сотнях Ра. Он уникален для каждой местности и по своей сути является отправной точкой или калибровочной константой для корректного измерения высоты. Такой подход обусловлен специфическим алгоритмом вычисления, который построен на принципе фиксации уменьшения атмосферного давления с ростом высоты и наоборот. В любом случае данную константу можно подсмотреть в Интернете на одном из профильных сайтов. Результат вывода значений в терминал показан на рисунке №4.

Как видно из рисунка, давление выводится в Паскалях, что для восприятия не очень удобно. Гораздо привычнее получать значения в миллиметрах ртутного столба. Как известно 1Ра = 0,00750062 мм. рт. ст., следовательно необходимо полученное с помощью функции readPressure() значение умножить на 0,00750062.

ОБРАТИТЕ ВНИМАНИЕ. Может возникнуть такая ситуация, при которой модуль не будет определяться при подключении его по шине I2C. Дело в том, что каждое устройство на этой шине должно иметь свой уникальный адрес. Данная серия модулей в зависимости от модификации может иметь адреса 0x77 или 0x76. Библиотека Adafruit_BMP280.h использует по умолчанию адрес 0х77. Чтобы изменить его на 0х76 необходимо открыть файл Adafruit_BMP280.h установленной библиотеки любым текстовым редактором и найти там нижеследующую строку:

#define BMP280_ADDRESS (0x77) /**

FAQ. Часто задаваемые вопросы

1. Подключаю датчик по шине I2C, заливаю тестовый скетч из библиотеки Adafruit_BMP280.h, но датчик не обнаруживается. В чём может быть причина?

Большинство датчиков BMP280 имеют адрес 0х76, а библиотека Adafruit_BMP280.h по умолчанию работает с адресом 0х77. Чтобы это исправить необходимо открыть файл Adafruit_BMP280.h любым текстовым редактором, найти строку вида:

Источник

Модуль представляет из себя высокоточный цифровой измеритель атмосферного давления на базе микро-чипа BMP280 от фирмы BOSH. После изготовления каждый датчик проходит индивидуальную калибровку в заводских условиях. Его малые размеры, низкое энергопотребление и высокая измерительная способность позволили завоевать популярность среди множества разработчиков Arduino-проектов. Модуль BMP280 был разработан фирмой как более технологичная модель своего предшественника BMP180. Данная модификация, в отличие от своего младшего брата, предоставляет пользователю целых 2 последовательных интерфейса обмена данными (SPI и I2C), а также 3 режима работы:

  • NORMAL – в данном режиме модуль просыпается с определённой периодичностью, выполняет необходимые измерения и снова засыпает. Частота измерений задаётся программным путём, а результат считывается при необходимости.
  • SLEEP – режим максимально пониженного энергопотребления.
  • FORCED – этот режим позволяет будить модуль подачей внешнего управляющего сигнала. После выполнения измерений, модуль автоматически переходит в режим пониженного энергопотребления.

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

Внешний вид модуля и его электрическая схема.

Технические характеристики BMP280

  • Напряжение питания: 1.71V – 3.6V;
  • Интерфейс обмена данными: I2C или SPI;
  • Ток потребления в рабочем режиме: 2.7uA при частоте опроса 1 Гц;
  • Диапазон измерения атмосферного давления: 300hPa – 1100hPa (±0.12hPa), что эквивалентно диапазону от -500 до 9000 м над уровнем моря;
  • Диапазон измерения температуры: -40°С … +85°С (±0.01°С);
  • Максимальная частота работы интерфейса I2C: 3.4MHz;
  • Максимальная частота работы интерфейса SPI: 10 МГц;
  • ​Размер модуля: 21 х 18 мм;

Подключение BMP280 к плате Arduino

Модуль BMP280 может быть подключен к плате Arduino посредствам двух интерфейсов I2C или SPI. Какой выбрать — каждый решает сам исходя из возможностей используемого микроконтроллера и специфики проекта.

Вариант подключения датчика к плате Arduino Nano по I2C.

Как известно, аппаратный интерфейс I2C у Arduino UNO, Nano, Mini и.т.п. расположен на пинах A4 (SDA) и A5 (SCL). Следовательно, в таком режиме обмена данными понадобиться всего 4 провода, два из которых используются для питания модуля, а два других — непосредственно как информационная шина. Для работы по SPI требуется немного больше проводов — целых 6 штук и подключать их необходимо согласно схемы

Вышеприведенная схема подключения составлена согласно расположению аппаратного интерфейса SPI на платах Arduino UNO, Nano, Mini и.т.п. Исключением является вывод CSB модуля BMP280. В данной схеме он подключен к 10-му пину Arduino, но может быть соединён с любым цифровым выводом, указанным при составлении программы.

Как правило, для BMP280 в Интернете можно найти с десяток библиотек, упрощающих работу с ним. Библиотека Adafruit_BMP280.h позволяет максимально сократить время на освоение данного модуля, не урезая его функционал. Методы библиотеки дают возможность пользователю выбрать способ подключения, а также настроить периодичность и точность измерений в зависимости от режимов работы. Ниже будут рассмотрены некоторые приёмы работы с данной библиотекой.

Итак, для того чтобы начать работу с BMP280 необходимо установить вышеуказанную библиотеку, подключить сам заголовочный файл Adafruit_BMP280.h, а также ещё два файла Wire.h и SPI.h, для доступа к необходимым интерфейсам.  

 #include  // Библиотека для работы с шиной I2C  #include  // Библиотека для работы с шиной SPI  #include  // Библиотека для работы с датчиком BMP280   
 // Для подключения по шине I2C  Adafruit_BMP280 bmp;  // Для подключения по аппаратному SPI (указываем только номер пина CS)  #define PIN_CS 10  Adafruit_BMP280 bmp(PIN_CS);  // Для подключения по программному 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);   

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

Следует помнить, что при составлении программы должен быть указан только один из трёх возможных вариантов, иначе будет работать самый последний.

Теперь через объект bmp мы имеем возможность работать с функциями библиотеки, но изначально необходимо инициализировать модуль. Делать это целесообразно внутри функции setup() перед основным циклом:  

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

Таким образом при выводе сообщения об ошибке следует проверить правильность подключения и соответствие его используемому интерфейсу. При успешной инициализации можно переходить к настройке самой микросхемы BMP280. Для этих целей в библиотеке предусмотрена функция setSampling(…), с помощью которой задаётся режим работы модуля, точность измерения атмосферного давления и температуры окружающей среды, степень фильтрации и период активности датчика. Ниже приведён пример настроек, заданных по умолчанию.  

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

Рассмотрим подробнее данную функцию. Её первый параметр отвечает за режим работы датчика. Всего доступно 4 варианта, а именно:

  • MODE_NORMAL – в данном режиме модуль циклически выходит из режима сна через установленный интервал времени. В активном состоянии он проводит измерения, сохраняет их в своей памяти и заново уходит в сон.
  • MODE_FORCED – в этом режиме датчик проводит измерения при получении команды от Arduino, после чего возвращается в состояние сна.
  • MODE_SLEEP – режим сна или пониженного энергопотребления.
  • MODE_SOFT_RESET_CODE – сброс на заводские настройки.

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

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

Четвёртый параметр отвечает за уровень фильтрации измеренных данных. Значения этого параметра могут быть следующие:

  • FILTER_OFF – фильтр выключен;
  • FILTER_X2 – минимальный уровень фильтрации;
  • FILTER_X4;
  • FILTER_X8;
  • FILTER_X16 – максимальный уровень фильтрации.

Последний, пятый параметр функции setSampling(…) отвечает за период перехода модуля в активное состояние с целью выполнения измерений. Параметр может принимать следующие значения:

  • 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 секунды;

На этом стадию настройки параметров датчика BMP280 можно считать завершённой. Библиотека Adafruit_BMP280 предоставляет пользователю три функции, с помощью которых можно считать показания температуры, атмосферного давления и высоты над уровнем моря. Ниже приведён фрагмент программного кода, с помощью которого эти данные выводятся в окно терминала. Считывание происходит в основном цикле loop().  

 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");  }   

Теперь о функции bmp.readAltitude(1013.25) и откуда берётся число 1013.25. Это значение давления над уровнем моря конкретной локации, где находится в данный момент датчик. Параметр задаётся в сотнях Ра. Он уникален для каждой местности и по своей сути является отправной точкой или калибровочной константой для корректного измерения высоты. Такой подход обусловлен специфическим алгоритмом вычисления, который построен на принципе фиксации уменьшения атмосферного давления с ростом высоты и наоборот. В любом случае данную константу можно подсмотреть в Интернете на одном из профильных сайтов.

Результат вывода значений в терминал

Давление выводится в Паскалях, что для восприятия не очень удобно. Гораздо привычнее получать значения в миллиметрах ртутного столба. Как известно 1Ра = 0,00750062 мм. рт. ст., следовательно необходимо полученное с помощью функции readPressure() значение умножить на 0,00750062.

ОБРАТИТЕ ВНИМАНИЕ!!! Может возникнуть такая ситуация, при которой модуль не будет определяться при подключении его по шине I2C. Дело в том, что каждое устройство на этой шине должно иметь свой уникальный адрес. Данная серия модулей в зависимости от модификации может иметь адреса 0x77 или 0x76. Библиотека Adafruit_BMP280.h использует по умолчанию адрес 0х77. Чтобы изменить его на 0х76 необходимо открыть файл Adafruit_BMP280.h установленной библиотеки любым текстовым редактором и найти там нижеследующую строку:

#define BMP280_ADDRESS (0x77) /**< The default I2C address for the sensor. */

Меняем адрес в скобках на 0х76, сохраняем файл и перекомпилируем программу. После данных манипуляций проблема должна исчезнуть.

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

Существует несколько направлений применения модулей BMP280. Кто-то использует их в составе полётных контроллеров для определения высоты или в качестве глубиномера, например при погружении в шахту. Но основным направлением является сбор данных для метеостанций. Для более тесного знакомства с модулем, создадим свой проект домашней метеостанции с выводом погодной информации на графический ЖКИ-дисплей от NOKIA 5110. Чтобы сделать проект интереснее, внизу будет выводится график изменения атмосферного давления. Такой подход позволит спрогнозировать приближение дождя по резкому падению давления или хорошую погоду по его динамическому возрастанию. Управлять всем этим будет плата Arduino Nano.

Схема проекта домашней метеостанции.

В схеме для запитывания экрана и его подсветки использован модуль линейного стабилизатора напряжения AMS1117-3V3. Это позволит уберечь Arduino Nano от перегрузок. Также потребуется скачать две дополнительные библиотеки для работы с дисплеем, а именно:

  • Adafruit-PCD8544-Nokia-5110-LCD-library

  • Adafruit-GFX-Library

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

 // Подключаем библиотеки для работы с дисплеем NOKIA 5110  #include   #include   #include   // Номера выводов Arduino для подключения дисплея  #define PIN_5110_SCLK 3  #define PIN_5110_DIN  4  #define PIN_5110_DC   5  #define PIN_5110_CS   6  #define PIN_5110_RST  7  Adafruit_PCD8544 display = Adafruit_PCD8544(PIN_5110_SCLK, PIN_5110_DIN, PIN_5110_DC, PIN_5110_CS, PIN_5110_RST);  // Подключаем библиотеки для работы с датчиком BMP280  #include   #include   Adafruit_BMP280 bmp;  uint8_t pp[84]; // Массив значений атм. давления для вывода графика  uint8_t index = 0; // Текущий индекс (точка на графике)  void setup() {  display.begin(); // Инициализация дисплея  display.setContrast(45); // Настройка контрастности  display.display(); // Подготовка к выводу изображения  delay(2000);  display.clearDisplay(); // Очистка дисплея  bmp.begin(); // Инициализация датчика BMP280  // Настройка режима работы датчика BMP280  bmp.setSampling(Adafruit_BMP280::MODE_NORMAL,  Adafruit_BMP280::SAMPLING_X2,  Adafruit_BMP280::SAMPLING_X16,  Adafruit_BMP280::FILTER_X16,  Adafruit_BMP280::STANDBY_MS_500);  for(uint8_t i = 0; i < 84; i++) pp[i] = 0; // Обнуляем массив  }  void loop() {  // Считываем и выводим показания температуры  float t = bmp.readTemperature();  display.setTextSize(1); display.setCursor(0, 0);  display.print("t="); display.print(t); display.println("oC");  // Считываем и выводим показания высоты  float a = bmp.readAltitude(1005);  display.setCursor(0, 8);  display.print("h="); display.print(a); display.println("m");  // Считываем и выводим показания атмосферного давления  float p = bmp.readPressure();  p = p * 0.00750062; // Преобразуем Паскали в мм.рт.ст.  display.setCursor(0, 16);  display.print("p="); display.print(p); display.println("mmGh");   // Преобразуем показания для построения графика  pp[index] = map(p, 730, 760, 0, 24);  // Строим график  index++;  if(index > 83) {  for(uint8_t i = 0; i < 84; i++) pp[i] = 0;  index = 0;  }  display.fillRoundRect(0, 24, 84, 24, 0, WHITE);  for(uint8_t i = 0; i < 84; i++)  display.drawLine(i, 48, i, 48 - pp[i], BLACK);  display.display();  delay(60000); // График будет обновляться 1 раз в минуту  display.clearDisplay();  }    

результат работы программы

Каждая линия графика визуально обозначает значение уровня атмосферного давления в текущую минуту. Учитывая то, что разрешение дисплея по горизонтали составляет 84 пикселя, мы можем наблюдать отрезок измерения, равный 84 минутам соответственно. Вот таким нехитрым способом, за короткий промежуток времени, можно создать очень полезное устройство.

Большинство датчиков BMP280 имеют адрес 0х76, а библиотека Adafruit_BMP280.h по умолчанию работает с адресом 0х77. Чтобы это исправить необходимо открыть файл Adafruit_BMP280.h любым текстовым редактором, найти строку вида:

 #define BMP280_ADDRESS (0x77) /**< The default I2C address for the sensor. */   

После этого нужно заменить значение в скобках, сохранить изменения и перекомпилировать проект.

Чем отличается датчик BMP280 от аналогичного BMЕ280?

В датчике BMЕ280 дополнительно есть функция измерения влажности.

От чего зависти точность определения высоты?

Точность определения высоты напрямую зависит от знания текущего атмосферного давления над уровнем моря для той местности, где используется датчик. Это значение изо дня в день может меняться ввиду различных погодных условий. За вычисление высоты отвечает функция readAltitude(….), параметром которой как раз и является искомое число. Датчики

Общие сведения:

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
  • Габариты: 30×30 мм.

Все модули линейки «Trema» выполнены в одном формате

image

Способ — 2 :  Используя Trema Set Shield

Модуль можно подключить к любому из I2C входов Trema Set Shield.

image

Способ — 3 :  Используя проводной шлейф и Shield

Используя 4-х проводной шлейф, к  Trema Shield, Trema-Power Shield, Motor Shield, Trema Shield NANO и тд.

image

При подключении датчика давления BMP280 к другим платам, например, WEMOS D1 mini или WEMOS D1 mini Pro на базе микроконтроллера ESP8266, и т.д. То перед подключением библиотеки iarduino_Pressure_BMP, нужно подключить библиотеку Wire, как это описано в разделе 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([высота]) указать высоту над уровнем моря, то все остальные значения высоты будут соответствовать действительной высоте над уровнем моря. Уменьшая точность измерений Вы ускорите процесс получения результата.

Подробнее про установку библиотеки читайте в нашей инструкции..

Примеры:

Вывод значений давления в мм.рт.ст. и в Па:

Описание основных функций библиотеки:

Данная библиотека может использовать как аппаратную, так и программную реализацию шины I2C. О том как выбрать тип шины I2C рассказано в статье Wiki — расширенные возможности библиотек iarduino для шины I2C.

Подключение библиотеки:

Функция begin();

  • Назначение: Инициализация работы с датчиком.
  • Синтаксис: begin( [ ВЫСОТА ] );
  • Параметры:
    • ВЫСОТА — начальная высота в метрах (например высота над уровнем моря).
  • Возвращаемые значения: bool — результат инициализации (true или false).
  • Примечание:
    • Если вызвать функцию без параметра, то начальная высота будет равна 0 м.
    • Функцию можно вызвать однократно (в коде setup), а можно и многократно (для корректировки или изменения начальной высоты).
    • После вызова функции в переменные type и version будет сохранён тип и версия датчика.
  • Пример:

Функция read();

  • Назначение: Чтение показаний датчика в переменные temperature, pressure и altitude.
  • Синтаксис: read( [ ЦИФРА ] );
  • Параметры:
    • ЦИФРА — 1 или 2 (по умолчанию 1). Если 1 то давление рассчитывается в мм.рт.ст., если 2 то давление рассчитывается в Па
  • Возвращаемые значения: bool — результат успешности чтения (true или false).
  • Примечание:
    • Если вызвать функцию без параметра, то атмосферное давление будет рассчитано в мм.рт.ст.
    • После вызова данной функции в переменные temperature, pressure и altitude будут сохранены новые значения.
  • Пример:

Функция measurement();

  • Назначение: Выбор точности измерений.
  • Синтаксис: measurement( ЦИФРА );
  • Параметры:
    • ЦИФРА — положительное целочисленное значение от 0 (минимальная) до 3 (для bmp180) или 4 (для bmp280) включительно.
  • Возвращаемые значения: bool — результат применения (true или false).
  • Примечание:
    • Увеличение точности показаний достигается снижением уровня шумов благодаря увеличению передискретизации при считывании показаний.
    • Данная функция является необязательной, т.к. по умолчанию установлена максимальная точность.
    • Если значение параметра будет выше допустимого, то установится максимальная точность.
    • Уменьшение точности приведёт к уменьшению энергопотребления, а при работе с датчиком bmp180 еще и к ускорению чтения данных.
  • Пример:

Переменная temperature

  • Значение: Содержит температуру окружающей среды в °С.
  • Тип данных: float.

Переменная pressure

  • Значение: Содержит атмосферное давление в мм.рт.ст. или Па.
  • Тип данных: float.

Переменная altitude

  • Значение: Содержит высоту относительно начальной в м.
  • Тип данных: float.

Переменная type

  • Значение: Содержит тип датчика (число 180 или 280)
  • Тип данных: int.

Переменная version

  • Значение: Содержит версию датчика
  • Тип данных: int.

Применение:

  • Получение данных для метеостанций
  • Получение высоты для летательных аппаратов
  • Получение глубины для подводных аппаратов (требуется поместить модуль в dодонепроницаемый пакет и пересчитывать глубину исходя из показаний давления, а не по данным высоты из библиотеки)

Ссылки:

  • Датчик давления BMP280 (Trema-модуль).
  • Датчик давления BMP180 (Trema-модуль)
  • Библиотека iarduino_Pressure_BMP.
  • Расширенные возможности библиотек iarduino для шины I2C.
  • Wiki — Установка библиотек в Arduino IDE.

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
А как считаете Вы?
Напишите в комментариях, что вы думаете – согласны
ли со статьей или есть что добавить?
Добавить комментарий