Ардуино: барометр BMP280

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

В одном из ранних уроков мы подробно разбирались с понятием электронного МЭМС барометра и подключали к Ардуино датчик BMP180. На этот раз мы будем работать с более новой версия барометра — BMP280. А именно, с платой BMP280 ROC, разработанной в лаборатории RobotClass.

В отличие от BMP180, новый датчик может измерять давление более точно, а значит и высоту беспилотник будет удерживать надёжнее. Вот некоторые важные характеристики BMP280:

  • напряжение питания: от 3,3 до 5 В;
  • макс скорость I2C интерфейса: 3,4 МГц;
  • потребляемый ток: 2,7 мкA при частоте отсчетов в 1 Гц;
  • относительная точность (от 950 до 1050гПа, 25°C.): 0,12 гПа (1м);
  • абсолютная точность (от 950 до 1050гПа, от 0 до 40°C.): 1 гПа;
  • уровень шума: до 0,2 Па (1,7 см) и 0,01 температуры;
  • диапазон измеряемого давления: от 300 гПа до 1100 гПа (от 9000 м до -500 м).

Подключение

Для подключения к Ардуино можно использовать как интерфейс I2C, так и SPI. Также плата датчика ROC поддерживает два рабочих напряжения: 5В и 3,3В, а значит его можно подключать и к Ардуино и к низковольтным (в плане логики) платам типа ESP или STM32. Ниже представлены два варианта схем подключения.

Arduino UnoGnd5VA4A5
BMP280 ROCGndVINSDASCL
Подключение BMP280 I2C
Arduino Uno Gnd5V10111213
BMP280 ROC GndVINCSMOMICK
Подключение BMP280 SPI

Программа

Для теста напишем программу, которая будет выводить значение атмосферного давления, температуру датчика и высоту над уровнем моря в последовательный порт. Используем библиотеку Adafruit_BMP280, которую можно найти в репозитории Arduino IDE. Для начала вариант с I2C интерфейсом.

#include <Adafruit_BMP280.h>

Adafruit_BMP280 bmp;
  
void setup() {
    Serial.begin(9600);
  
    if (!bmp.begin()) { // инициализация датчика
        Serial.println("Error!");
        while (1);
    }
}
  
void loop() {
    Serial.print("TEMP = ");
    Serial.print(bmp.readTemperature()); // вывод температуры
    Serial.println(" *C");
    
    Serial.print("PRES = ");
    Serial.print(bmp.readPressure()); // вывод давления
    Serial.println(" Pa");

    Serial.print("ALT = ");
    Serial.print(bmp.readAltitude(1013.25)); // вывод высоты над уровнем моря
    Serial.println(" m");
    
    Serial.println();
    delay(2000);
}

И второй вариант — в случае подключения по SPI. Процедуры setup и loop расписывать не будем, они остаются такими же.

#include <Adafruit_BMP280.h>

#define BMP_CS 10

Adafruit_BMP280 bmp(BMP_CS);
  
void setup() {
...
}
  
void loop() {
...
}

Как видим, для подключения через аппаратный SPI интерфейс достаточно передать дополнительный аргумент — CS (Chip Select) в конструктор объекта bmp. Всё остальное, эквивалентно коду для I2C.

Кстати, библиотека Adafruit_BMP280 позволяет работать и с программным SPI интерфейсом. Для этого в конструктор нужно передать номера всех контактов: CS, MOSI, MISO, SCK.

Adafruit_BMP280 bmp(BMP_CS, BMP_MOSI, BMP_MISO,  BMP_SCK);

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

Arduino и BMP280

Готово!

0

Изменено:

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

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

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.