Bmp280 библиотека: Библиотека iarduino_Pressure_BMP для датчиков давления и температуры BMP180 / BMP280 для Arduino

Модуль GY-BMP280-3.3 датчик атмосферного давления и температуры

Модуль RKP-GY-BMP280-3.3 на микросхеме BMP280 это цифровой датчик атмосферного давления (барометр) и температуры для совместного использования с устройствами, использующими платформу ARDUINO (Ардуино).

  • В основе модуля GY-BMP280-3.3 заложен чип компании BOSH BMP280, использующий пьезорезистивный метод.

  • Модуль GY-BMP280-3.3 – это прецизионный датчик для измерения атмосферного давления с точностью ± 1 гПа и температуры с точностью ± 1 °C. Кроме этого с помощью преобразования данных о давлении можно определить высоту. Таким образом, цифровой модуль атмосферного давления и температуры RKP-GY-BMP280-3.3 может использоваться и как высотомер с точностью измерения ± 1 м.

  • Модуль цифрового барометра-термометра часто используется в полетных контроллерах (мультикоптерах, квадрокоптерах, воздушных шарах, зондах, дельтапланах). А так же в составе самостоятельного высотомера или вместе с прибором ГЛОНАСС, GPS для уточнения высоты и в приборах отслеживающих погоду.

  • Модуль GY-BMP280-3.3 имеет интерфейсы I2C и SPI, так что без проблем подключается к любой платформе из семейства Ардуино.

  • Каждая микросхема BMP280 проходит калибровку на заводе-изготовителе. В результате калибровочные коэффициенты записываются в ПЗУ.

  • Версия BMP280 является обновленной версией семейства микросхем BMP085/BMP180/BMP183. Микросхема BMP280 имеет низкое энергопотреблением, улучшенную температурную стабильность и разрешение АЦП до 20 бит для температуры и давления.

Посмотреть DataSheet микросхемы BMP280 (формат PDF размер 1.2 МБ)

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

BMP280 имеет три режима работы — Normal, Forced и Sleep.
В режиме Normal — в соответствии с настройками датчик периодически выполняет измерения. Значение пропускает через цифровой фильтр и Вам остается только считывать данные, когда Вам удобно.
В режиме Forced — датчик выполняет измерения один раз по команде. То есть, дали команду на измерение, подождали, считали значения, датчик перешел в спящий режим..
В режиме Sleep – режиме сна, датчик переходит в режим минимального потребления.

Характеристики GY-BMP280-3.3
Напряжение питания: 3.3 В
Потребляемый ток: 2.7 мкА при скорости опроса 1 Герц
Шум: 1.3 Па
Диапазон измерения давления: от 300 до 1100 гПа (от -500 от +9000 метров над уровнем моря)
Точность измерений при 25°С: ±0.12 гПа (что эквивалентно разности высот ±1 м)
Абсолютная точность: ±1 гПа
Диапазон измерения температуры: от -40 до +85 °C
Точность измерения температуры: ± 1 °C
Интерфейсы: I2C (до 3. 4 МГц) и SPI (3 и 4, до 10 МГц)
Размер: 11.5 х 15 мм

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

Разъем модуля RKP-GY-BMP280-3.3 представляет из себя шесть обычных штырьков пинов (тип папа) с шагом 2.54 мм. 4 контакта используются при подключения модуля через интерфейс I2C и все 6 контактов при подключения через интерфейс SPI. Вывод с меткой «GND» подключается к «земле», вывод с меткой «VCC» к питанию +3.3 В.

Схема подключения модуля BMP280 к Arduino Uno через интерфейс I2C

Вывод с меткой «SCL» –> интерфейс I2C A5
Вывод с меткой «SDA» –> интерфейс I2C A4

Схема подключения модуля BMP280 к Arduino Uno через интерфейс SPI

Вывод с меткой «SCL» –>подключается к SCK шины SPI (на схеме пин номер 13)
Вывод с меткой «SDO» –>подключается к MISO шины SPI (на схеме пин номер 12)
Вывод с меткой «SDA» –>подключается к MOSI шины SPI (на схеме пин номер 11)
Вывод с меткой «CSB» –>подключается к любому цифровому выходу (на схеме пин номер 10)

Для работы с модулем GY-BMP280-3. 3 понадобятся библиотеки:

Библиотека Adafruit BMP280 Library (архив zip 9.1 КБ) Скачать =>>

Библиотека Adafruit Sensor (архив zip 6.7 КБ) Скачать =>>

Per aspera ad astra, или как я строил ракету. Часть 2. Собираем альтиметр на STM32 и BMP280 / Хабр

Всем привет! 

В предыдущей части я остановился на том, что мои ракеты удачно взлетели и приземлились, а на одной даже был установлен альтиметр. В этой статье я и расскажу о том как сделать простой высотомер на основе STM32 Nucleo L031K6 и датчика давления BMP 280 , который к тому же хранит все данные во Flash памяти.


Основные требования к альтиметру:

  1. Высокая скорость считывания высоты, так как ракета в апогее находится не слишком долго, а я хотел узнать именно максимальную высоту;
  2. Низкое энергопотребление, чтобы не ставить большой аккумулятор;
  3. Небольшие размеры всей конструкции.


Исходя из них в качестве микроконтроллера взял STM32 Nucleo L031K6 (высокая скорость работы, низкое потребление тока, малый размер). Высоту решил измерять с помощью барометра BMP280 (те же резоны, что и у МК). Также добавил кнопку, при нажатии которой начиналась запись высоты. Ну и питала всю электронику батарейка CR2032, подключенная через адаптер. В итоге получилась такая схема:

Использованные модули

STM32 Nucleo L031K6

BMP280

Адаптер для CR2032


Код вы можете найти на моем гитхабе . Пины STM32 были сконфигурированы в CubeMX под IAR. Для работы с BMP280 использовал вот эту библиотеку, добавил в нее функцию расчета высоты над уровнем моря с помощью барометрической формулы и инициализацию датчика с нужными мне параметрами частоты считывания, фильтрации и тд. Так как я хотел измерить высоту полета относительно земли, мне нужно было сначала вычислить высоту над уровнем моря в моей местности, взять ее за «ноль» и относительно нее измерять высоту полета. Частота измерений равнялась 10 Гц.

Запись во Flash память происходила следующим образом так:

Организация памяти в STM32 L031K6

  • Для всех измерений выделил 8 Кбайт с 0x08006000 по 0x08007FFF адреса
  • На одно измерение выделил 2 байта
  • Во Flash записывал по 4 байта, то есть сразу два измерения
  • Максимальное количество измерений — 4096, этого хватало на запись примерно 7-ми минут полета
  • Высоту записывал в сантиметрах для большей точности


А происходила запись следующим образом:

  1. Если итератор записи четный, то в переменную с данными для записи во Flash сохраняем текущую высоту в младшую половину слова;
  2. Если итератор записи нечетный, то в переменную с данными для записи во Flash добавляем текущую высоту в старшую половину слова и сохраняем эту переменную в ячейку Flash


В итоге алгоритм работы программы следующий:

  1. После включения 5 секунд ждем нажатия кнопки для старта измерений высоты.
  2. Если кнопка не была нажата, то зажигаем встроенный светодиод и начинаем передачу по UART данных о высоте, записанных во Flash памяти
  3. Если кнопка была нажата, то два раза моргаем встроенным светодиодом и вычисляем высоту местности.
  4. После вычисления «нуля» два раза моргаем встроенным светодиодом и записываем во Flash-память высоту ракеты над землей.
  5. Когда выполнили передачу по UART или завершили измерения высоты, бесконечно моргаем встроенным светодиодом;
  6. Ждем пока нас найдут люди и выключат.


При питании STM’ки от CR2032 через пин 3.3V обнаружил, что код не работает. Проблема была в том, что при подаче питания через эту ногу необходимо было отпаять SB9(расположен рядом с выводами RX и TX на обратной стороне МК)  иначе плата постоянно перезагружалась.

Теперь необходимо было проверить точность работы альтиметра. Взяв рулетку, я стал поднимать альтиметр на разные высоты и смотреть, что он измеряет. Результаты тестов лежат в соответствующей папке на гитхабе. В текстовых файлах — сырые данные с STM’ки, а в Excel’евских таблицах находятся красивые графики всех тестов. Точность соответствовала заявленной — ± 10см. Следует помнить, что высоту я измерял в сантиметрах, поэтому в таблице такие большие числа. 


Так как во время приземления ракета может сильно ударится о землю, необходимо было хорошо зафиксировать всю электронику, чтобы при тряске не отваливались проводки, или, того хуже, сами модули. Альтиметр разместил в головном обтекателе (места там было достаточно, и стабильности за счет смещения центра тяжести к головному обтекателю прибавилось) в 3D-печатном креплении. STM’ка стояла вертикально, BMP280 контактами вверх и под крепление приклеил адаптер для CR2032. Из-за того, что он не помещался в корпус ракеты, пришлось немного сточить контакты минуса. Рядом с контактами в боковой стенке 3D-печатного крепления проточил вертикальную канавку, чтобы протянуть через нее минус от CR2032, а под плюсом просверлил отверстие и пустил провод через него. Думал крепить альтиметр к головному обтекателю с помощью самореза, поэтому в корпусе есть отверстие, но потом от этой идеи отказался.

Модель крепления, напечатанного на 3D-принтере

Собранный блок альтиметра

Вид сверху

Вид снизу


Кнопку приклеил рядом с BMP280, установил остальные модули в свои места, припаял все провода и

замотал все синей изолентой

залил для надежности термоклеем. 

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

Собранный альтиметр. Вид спереди  

Вид сзади. Видна резинка, соединяющая альтиметр с ракетой

Альтиметр был готов! Теперь предстояло его испытать, а это значит, что я снова отправился на полигон!


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

В итоге график получился таким:

По горизонтали — номер измерения. Каждые 10 измерений — 1 секунда. По вертикали — высота в сантиметрах

Ракета взлетела на 15м, затем устремилась в землю. После прохождения апогея через 1 секунду началась какая-то аномалия: после значения 12м почему-то показания упали до -8м. Это произошло в момент второго запуска двигателя (которого не должно было быть), так что не исключаю, что неисправный двигатель как-то повлиял на альтиметр. Во всех остальных тестах он работал отлично, так что это была проблема явно не в электронике. В общем, те испытания альтиметра были успешными лишь наполовину, так как во вторую половину полета произошла аномалия. Сам график вы можете найти на гитхабе, он называется rocket_flight_fall_test.

После ремонта ракеты я снова отправился на полигон и в этот раз испытания прошли успешно. Полет был отличным, показания альтиметра были стабильными и соответствовали полету. График полета получился вот такой:

По горизонтали — номер измерения. Каждые 10 измерений — 1 секунда. По вертикали — высота в сантиметрах

Ракета поднялась на 150м и успешно приземлилась. Таким образом это испытание было полностью успешным. Я удостоверился в том, что альтиметр работает и приступил к разработке новой бортовой аппаратуры.


В итоге, я полностью собрал компактный альтиметр, который помещается в небольшую модель ракеты. Испытания прошли успешно, электроника пережила взлет и посадку и измерила высоту полета. На этом проект разработки альтиметра я закончил, возможно в будущем использую его в одной из ракет, потому что знать высоту полета иногда очень полезно (например, если вы запускаете ракеты ради достижения максимальной или какой-нибудь определенной высоты). Сейчас, как я уже говорил, я занимаюсь разработкой бортовой камеры с радиопередатчиком, потому что ракету с такой серьезной электроникой я терять не намерен. 

Спасибо за внимание!

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

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

для датчиков BMP280.

Автор
Adafruit
Веб-сайт
https://github.com/adafruit/Adafruit_BMP280_Library
Категория
Датчики
Лицензия
Неизвестно
Тип библиотеки
Рекомендуемый
Архитектуры
Любой

Библиотека Arduino для датчиков давления и высоты BMP280.

Имя файла Дата выпуска Размер файла
Adafruit_BMP280_Library-2.6.6.zip 2022-10-03 463,46 КиБ
Adafruit_BMP280_Library-2. 6.5.zip 2022-08-31 463,47 КиБ
Adafruit_BMP280_Library-2.6.4.zip 2022-08-29 463,62 КиБ
Adafruit_BMP280_Library-2.6.3.zip 2022-07-01 462,86 КиБ
Adafruit_BMP280_Library-2.6.2.zip 2022-03-01 462,86 КиБ
Adafruit_BMP280_Library-2.6.1.zip 2022-01-18 462,87 КиБ
Adafruit_BMP280_Library-2.6.0.zip 2022-01-03 462,86 КиБ
Adafruit_BMP280_Library-2.5.0.zip 2021-11-30 461,38 КиБ
Adafruit_BMP280_Library-2.4.4.zip 2021-11-29 461,33 КиБ
Adafruit_BMP280_Library-2. 4.3.zip 2021-11-27 460,99 КиБ
Adafruit_BMP280_Library-2.4.2.zip 2021-09-14 461,09 КиБ
Adafruit_BMP280_Library-2.4.1.zip 2021-08-24 461,00 КиБ
Adafruit_BMP280_Library-2.4.0.zip 2021-07-31 460,97 КиБ
Adafruit_BMP280_Library-2.3.0.zip 2021-05-24 461,22 КиБ
Adafruit_BMP280_Library-2.2.0.zip 2021-05-17 461,21 КиБ
Adafruit_BMP280_Library-2.1.2.zip 2021-04-08 461,13 КиБ
Adafruit_BMP280_Library-2.1.1.zip 20.01.2021 461,03 КиБ
Adafruit_BMP280_Library-2. 1.0.zip 2020-09-21 461,03 КиБ
Adafruit_BMP280_Library-2.0.1.zip 2020-01-08 460,89 КиБ
Adafruit_BMP280_Library-2.0.0.zip 2019-12-29 460,89 КиБ
Adafruit_BMP280_Library-1.0.6.zip 2019-11-27 458,49 КиБ
Adafruit_BMP280_Library-1.0.5.zip 2019-09-13 458,49 КиБ
Adafruit_BMP280_Library-1.0.4.zip 2019-07-04 458,53 КиБ
Adafruit_BMP280_Library-1.0.3.zip 2019-05-15 458,16 КиБ
Adafruit_BMP280_Library-1.0.2.zip 22 января 2016 г. 6,70 КиБ
Adafruit_BMP280_Library-1.0.1.zip 2015-11-06 6,17 КиБ
Adafruit_BMP280_Library-1.0.0.zip 2015-08-21 6,10 КиБ

adafruit_bmp280 — Документация Adafruit BMP280 Library 1.0

Драйвер CircuitPython от датчика температуры и барометрического давления BMP280

  • Автор(ы): ladyada

Оборудование:

  • Adafruit от BMP280 Температурный и барометрический
    Датчик давления

Программное обеспечение и зависимости:

  • Прошивка Adafruit CircuitPython для поддерживаемых плат:
    https://github.com/adafruit/circuitpython/релизы

  • Библиотека устройств шины Adafruit: https://github.com/adafruit/Adafruit_CircuitPython_BusDevice

класс adafruit_bmp280. Adafruit_BMP280[источник]

Базовый объект БМП280. Используйте Adafruit_BMP280_I2C или Adafruit_BMP280_SPI
вместо этого. Это проверяет, что BMP280 был найден, считывает коэффициенты и
включает датчик для непрерывного считывания

Примечание

Рабочий диапазон BMP280 составляет 300-1100 гПа.
Измерения давления за пределами этого диапазона могут быть не такими точными.

свойство высота : поплавок

Высота на основе давления на уровне моря ( sea_level_pressure )
— который необходимо ввести заранее)

свойство iir_filter : int

Контролирует постоянную времени БИХ-фильтра
Допустимые значения устанавливаются в классе перечисления IIR_FILTER 9.0003

свойство Measurement_time_max : float

Максимальное время в миллисекундах, необходимое для завершения измерения в нормальном режиме

свойство измерение_время_типичное : число с плавающей запятой

Типичное время в миллисекундах, необходимое для завершения измерения в обычном режиме

свойство режим : int

Режим работы
Допустимые значения задаются в классе перечисления MODE

.

свойство overscan_pressure : int

Передискретизация давления
Допустимые значения устанавливаются в классе перечисления OVERSCAN

.

свойство overscan_temperature : int

Передискретизация температуры
Допустимые значения устанавливаются в классе перечисления OVERSCAN

.

свойство давление : поплавок | Нет

Компенсированное давление в гектопаскалях.
возвращает Нет , если измерение давления отключено

уровень моря_давление

Давление в гектопаскалях на уровне моря. Используется для калибровки высоты .

свойство standby_period : int

Управление периодом неактивности в нормальном режиме
Разрешенные периоды ожидания устанавливаются классом перечисления STANDBY 9.0003

свойство температура : число с плавающей запятой

Компенсированная температура в градусах Цельсия.

класс adafruit_bmp280.Adafruit_BMP280_I2C ( i2c: I2C , адрес : int = 119 ) [источник]

Драйвер для BMP280, подключенного по I2C.

Параметры:
  • i2c ( I2C ) — шина I2C, к которой подключен BMP280.

  • адрес ( int ) — адрес устройства I2C. По умолчанию 0x77 .
    но в качестве аргумента можно передать другой адрес

Краткое руководство: импорт и использование BMP280

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

.
импортировать adafruit_bmp280
 

Как только это будет сделано, вы можете определить свои board.I2C object и определите свой объект датчика

 i2c = board. I2C() # использует board.SCL и board.SDA
bmp280 = adafruit_bmp280.Adafruit_BMP280_I2C(i2c)
 

Необходимо настроить давление на уровне моря

 bmp280.sea_level_pressure = 1013.25
 

Теперь у вас есть доступ к температуре ,
давление и высота атрибуты

 температура = bmp280.temperature
давление = bmp280.давление
высота = bmp280.altitude
 
класс adafruit_bmp280.Adafruit_BMP280_SPI ( spi: SPI , cs: DigitalInOut , скорость передачи = 100000 ) [источник]

Драйвер для BMP280, подключенного по SPI.

Параметры:
  • spi ( SPI ) — устройство SPI

  • cs ( DigitalInOut ) – Выбор чипа

  • скорость передачи ( int ) – Тактовая частота, по умолчанию 100000. Можно изменить с помощью baudrate()

Краткое руководство: импорт и использование BMP280

Вот пример использования класса BMP280_SPI .

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *