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 памяти.
Основные требования к альтиметру:
- Высокая скорость считывания высоты, так как ракета в апогее находится не слишком долго, а я хотел узнать именно максимальную высоту;
- Низкое энергопотребление, чтобы не ставить большой аккумулятор;
- Небольшие размеры всей конструкции.
Исходя из них в качестве микроконтроллера взял 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-ми минут полета
- Высоту записывал в сантиметрах для большей точности
А происходила запись следующим образом:
- Если итератор записи четный, то в переменную с данными для записи во Flash сохраняем текущую высоту в младшую половину слова;
- Если итератор записи нечетный, то в переменную с данными для записи во Flash добавляем текущую высоту в старшую половину слова и сохраняем эту переменную в ячейку Flash
В итоге алгоритм работы программы следующий:
- После включения 5 секунд ждем нажатия кнопки для старта измерений высоты.
- Если кнопка не была нажата, то зажигаем встроенный светодиод и начинаем передачу по UART данных о высоте, записанных во Flash памяти
- Если кнопка была нажата, то два раза моргаем встроенным светодиодом и вычисляем высоту местности.
- После вычисления «нуля» два раза моргаем встроенным светодиодом и записываем во Flash-память высоту ракеты над землей.
- Когда выполнили передачу по UART или завершили измерения высоты, бесконечно моргаем встроенным светодиодом;
- Ждем пока нас найдут люди и выключат.
При питании 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
.