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

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

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

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

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

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

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

  1. В Arduino IDE открываем менеджер библиотек: Скетч->Подключить библиотеку->Управлять библиотеками…Подключение BMP280 к Arduino - Управлять библиотеками...
  2. В строке поиска вводим «Adafruit Unified Sensor», выбираем последнюю версию и кликаем УстановитьПодключение BMP280 к Arduino - Установка Adafruit Unified Sensor
  3. Библиотека установлена (INSTALLED)Подключение BMP280 к Arduino - Adafruit Unified Sensor INSTALLED

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

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

  1. В Arduino IDE открываем менеджер библиотек: Скетч->Подключить библиотеку->Управлять библиотеками…Подключение BMP280 к Arduino - Управлять библиотеками...
  2. В строке поиска вводим «Adafruit BMP280», выбираем библиотеку от Adafruit, но можете использовать любую.Подключение BMP280 к Arduino - Выбор BMP280
  3. Выбираем последнюю версию и кликаем УстановитьПодключение BMP280 к Arduino - Установка BMP280
  4. Выбираем пример: Файл->Примеры->Adafruit BMP280 Library->bmp280testПодключение BMP280 к Arduino - Пример Adafruit BMP280 Library-bmp280test
  5. Компилируем этот пример. Если получаем ошибку fatal error: Adafruit_Sensor.h: No such file or directory, нужно установить Adafruit Unified Sensor (смотрите выше)
    ...\Documents\Arduino\bmp280-i2c\bmp280-i2c.ino:1:30: fatal error: Adafruit_Sensor.h: No such file or directory
    
     #include <Adafruit_Sensor.h>
    
                                  ^
    compilation terminated.
    
    exit status 1
    Ошибка компиляции для платы Arduino Pro or Pro Mini.

    Подключение BMP280 к Arduino - Компиляция bmp280test.ino - include Adafruit_Sensor.h - ошибка

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

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

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

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

 

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

Землю с Ардуино нужно соединить с землей на датчике, напряжение 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 В.

Adafruit BMP280 - стабилизатор на 3.3 В и преобразователь уровней 3.3/5ВПодключение 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 Жёлтый

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

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

if (!bmp.begin()) {  
  Serial.println("Could not find a valid BMP280 sensor, check wiring!");
  while (1);
}

begin() вернет True, если датчик был найден, и False, если нет. В случае с False, проверьте соединение датчика с платой Arduino!

Считать температуру и давление легко, просто вызовите функции:

bmp.readTemperature(); // Температура в градусах Цельсия.
bmp.readPressure();    // Атмосферное давление в гПа

Копируйте и скомпилируйте нижеприведённый скетч в Arduino IDE.

#include <Adafruit_BMP280.h>

Adafruit_BMP280 bmp280;

void setup() {
  Serial.begin(9600);
  Serial.println(F("BMP280"));

  while (!bmp280.begin(BMP280_ADDRESS - 1)) {
    Serial.println(F("Could not find a valid BMP280 sensor, check wiring!"));
    delay(2000);
  }
}

void loop() {
  float temperature = bmp280.readTemperature();
  float pressure = bmp280.readPressure();
  float altitude = bmp280.readAltitude(1013.25);

  Serial.print(F("Temperature = "));
  Serial.print(temperature);
  Serial.println(" *C");

  Serial.print(F("Pressure = "));
  Serial.print(pressure);
  Serial.println(" Pa");

  Serial.print(F("Altitude = "));
  Serial.print(altitude);
  Serial.println(" m");

  Serial.println();
  delay(2000);
}

Результат

Подключение BMP280 к Arduino I2C - Результат

Температура рассчитывается в градусах Цельсия, вы можете преобразовать ее в градусы Фаренгейта, используя классическое уравнение F = C * 9/5 + 32.

Давление возвращается в единицах СИ Паскалей. 100 Паскалей = 1 гПа = 1 миллибар. Часто барометрическое давление сообщается в миллибарах или миллиметрах ртутного столба. Для дальнейшего использования 1 паскаль = 0,00750062 миллиметров ртутного столба или 1 миллиметр ртутного столба = 133,322 Паскаля. Таким образом, если вы возьмете значение паскаля, скажем, 100734 и разделите на 133,322, вы получите 755,57 миллиметров ртутного столба.

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

Подключение BMP280 к Arduino по SPI (аппаратный)

Поскольку это датчик с поддержкой SPI, можно использовать аппаратный или «программный» SPI для работы с датчиком.

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

При подключении по SPI нужно соединить SCK/SCL с модуля к SCK (13й контакт на Ардуино), SDO с модуля к 12 выводу Ардуино, SDA/SDI — к 11 контакту, CSB (CS) — к любому цифровому пину, в данном случае к 10 контакту на Ардуино.

Схема подключения BMP280 к Arduino UNO по SPI (hardware)

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

Arduino Mega Arduino Uno/Nano/Pro Mini BMP280 модуль Цвет проводов на фото
GND GND GND Черный
5V 5V Vin Красный
52 (SCK) 13 (SCK) SCL/SCK Зелёный
50 (MISO) 12 (MISO) SDO Оранжевый
51 (MOSI) 11 (MOSI) SDA/SDI Жёлтый
48 (SS/CS) 10 (SS/CS) CS/CSB Синий

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

Вы можете использовать аппаратный SPI. С аппаратным SPI вы должны использовать аппаратные выводы SPI вашего Arduino — у каждого типа arduino разные выводы! В этом случае вы можете использовать любой контакт CS, но остальные три контакта фиксированы.

Adafruit_BMP280 bmp(BMP_CS); // hardware SPI

Полный код примера:

#include <Adafruit_BMP280.h>

#define BMP_CS 10

Adafruit_BMP280 bmp280SPI(BMP_CS);

void setup() {
  Serial.begin(9600);
  Serial.println(F("bmp280SPI"));

  while (!bmp280SPI.begin()) {
    Serial.println(F("Could not find a valid bmp280SPI sensor, check wiring!"));
    delay(2000);
  }
}

void loop() {
  float temperature = bmp280SPI.readTemperature();
  float pressure = bmp280SPI.readPressure();
  float altitude = bmp280SPI.readAltitude(1013.25);

  Serial.print(F("Temperature = "));
  Serial.print(temperature);
  Serial.println(" *C");

  Serial.print(F("Pressure = "));
  Serial.print(pressure);
  Serial.println(" Pa");

  Serial.print(F("Altitude = "));
  Serial.print(altitude);
  Serial.println(" m");

  Serial.println();
  delay(2000);
}

Результат

Подключение BMP280 к Arduino по SPI (аппаратный) - Результат

Подключение BMP280 к Arduino по SPI (программный)

Под программным SPI понимается использование драйвера Arduino SPI для эмуляции аппаратного SPI с использованием «битовой синхронизации». Это позволяет подключить SPI-устройство к любым контактам Arduino.

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

Схема подключения BMP280 к Arduino UNO по SPI (software)

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

Arduino Mega Arduino Uno/Nano/Pro Mini BMP280 модуль Цвет проводов на фото
GND GND GND Черный
5V 5V Vin Красный
52 (SCK) 13 (SCK) SCL/SCK Зелёный
50 (MISO) 12 (MISO) SDO Оранжевый
51 (MOSI) 11 (MOSI) SDA/SDI Жёлтый
48 (SS/CS) 10 (SS/CS) CS/CSB Синий

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

Вы можете создать объект BMP280 с любым программным SPI (где все четыре контакта могут быть любыми входами / выходами Arduino), используя:

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

Полный код примера:

#include <Adafruit_BMP280.h>

#define BMP_SCK   13
#define BMP_MISO  12
#define BMP_MOSI  11
#define BMP_CS    10

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

void setup() {
  Serial.begin(9600);
  Serial.println(F("BMP280 SPI (программный)"));

  while (!bmp280SoftSPI.begin()) {
    Serial.println(F("Could not find a valid BMP280 sensor, check wiring!"));
    delay(2000);
  }
}

void loop() {
  float temperature = bmp280SoftSPI.readTemperature();
  float pressure = bmp280SoftSPI.readPressure();
  float altitude = bmp280SoftSPI.readAltitude(1013.25);

  Serial.print(F("Temperature = "));
  Serial.print(temperature);
  Serial.println(" *C");

  Serial.print(F("Pressure = "));
  Serial.print(pressure);
  Serial.println(" Pa");

  Serial.print(F("Altitude = "));
  Serial.print(altitude);
  Serial.println(" m");

  Serial.println();
  delay(2000);
}

Результат

Подключение BMP280 к Arduino по SPI (программный) - Результат

Материалы

Arduino Test | Adafruit BMP280 Barometric Pressure + Temperature Sensor Breakout | Adafruit Learning System
BME280 — датчик давления, температуры и влажности
GitHub — adafruit/Adafruit_BMP280_Library: Arduino Library for BMP280 sensors
Барометр BMP180 и BMP280 (датчик атмосферного давления, высотомер) (Trema-модуль v2.0) — Описания, примеры, подключение к Arduino
Датчик Давления BMP-280 С Arduino Учебник

Похожие записи

Комментарии 9

  • Такая херня. Копирую ,а у меня ничего не происходит.
    То ли я тупой, то ли лыжи не едут

  • Все норм, запустилось с первого раза, самое интересное, adafuit test из примеров не хотел никак запускаться

    • Adafruit test из примеров для железного SPI необходимо:
      закомментировать строку (в моём случае 27)
      27 //Adafruit_BMP280 bmp; // I2C
      раскомментировать строку (в моём случае 28)
      28 Adafruit_BMP280 bmp(BMP_CS); // hardware SPI
      Удачи!

  • как поменять показания давления в мм.рт.ст?

  • Услуга по сносу старых зданий и утилизации отходов в Москве и Московской области. Мы предоставляем услуги по сносу старых сооружений и удалению мусора на территории Москвы и Московской области. Услуга демонтаж дома стоимость выполняется квалифицированными специалистами в течение 24 часов после оформления заказа. Перед началом работ наш эксперт бесплатно посещает объект для определения объёма работ и предоставления консультаций. Чтобы получить дополнительную информацию и рассчитать стоимость услуг, свяжитесь с нами по телефону или оставьте заявку на сайте компании.

  • Jeetwin Affiliate

    Jeetwin Affiliate
    Join Jeetwin now! | Jeetwin sign up for a ?500 free bonus
    Spin & fish with Jeetwin club! | 200% welcome bonus
    Bet on horse racing, get a 50% bonus! | Deposit at Jeetwin live for rewards
    #JeetwinAffiliate
    Casino table fun at Jeetwin casino login | 50% deposit bonus on table games
    Earn Jeetwin points and credits, enhance your play!
    https://www.jeetwin-affiliate.com/hi

    #JeetwinAffiliate #jeetwinclub #jeetwinsignup #jeetwinresult
    #jeetwinlive #jeetwinbangladesh #jeetwincasinologin
    Daily recharge bonuses at Jeetwin Bangladesh!
    25% recharge bonus on casino games at jeetwin result
    15% bonus on Crash Games with Jeetwin affiliate!

    Turn to Win Actual Money and Voucher Codes with JeetWin Affiliate Program

    Are you a devotee of online gaming? Do you actually like the excitement of spinning the reel and succeeding big-time? If so, then the JeetWin’s Affiliate Scheme is excellent for you! With JeetWin, you not simply get to enjoy stimulating games but additionally have the likelihood to generate actual money and voucher codes simply by promoting the platform to your friends, family, or virtual audience.

    How Does Perform?

    Registering for the JeetWin’s Referral Program is speedy and effortless. Once you become an affiliate, you’ll obtain a special referral link that you can share with others. Every time someone joins or makes a deposit using your referral link, you’ll get a commission for their activity.

    Fantastic Bonuses Await!

    As a member of JeetWin’s affiliate program, you’ll have access to a range of captivating bonuses:

    Sign Up Bonus 500: Acquire a abundant sign-up bonus of INR 500 just for joining the program.

    Welcome Deposit Bonus: Receive a massive 200% bonus when you deposit and play one-armed bandit and fish games on the platform.

    Endless Referral Bonus: Receive unlimited INR 200 bonuses and cash rebates for every friend you invite to play on JeetWin.

    Exhilarating Games to Play

    JeetWin offers a broad range of the most played and most popular games, including Baccarat, Dice, Liveshow, Slot, Fishing, and Sabong. Whether you’re a fan of classic casino games or prefer something more modern and interactive, JeetWin has something for everyone.

    Engage in the Greatest Gaming Experience

    With JeetWin Live, you can take your gaming experience to the next level. Take part in thrilling live games such as Lightning Roulette, Lightning Dice, Crazytime, and more. Sign up today and commence an unforgettable gaming adventure filled with excitement and limitless opportunities to win.

    Simple Payment Methods

    Depositing funds and withdrawing your winnings on JeetWin is rapid and hassle-free. Choose from a assortment of payment methods, including E-Wallets, Net Banking, AstroPay, and RupeeO, for seamless transactions.

    Don’t Lose on Exclusive Promotions

    As a JeetWin affiliate, you’ll receive access to exclusive promotions and special offers designed to maximize your earnings. From cash rebates to lucrative bonuses, there’s always something exciting happening at JeetWin.

    Download the Mobile App

    Take the fun with you wherever you go by downloading the JeetWin Mobile Casino App. Available for both iOS and Android devices, the app features a wide range of entertaining games that you can enjoy anytime, anywhere.

    Enroll in the JeetWin’s Referral Program Today!

    Don’t wait any longer to start earning real cash and exciting rewards with the JeetWin Affiliate Program. Sign up now and become a part of the thriving online gaming community at JeetWin.

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

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