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

Цифровой датчик на базе микросхемы BMP280 предназначен для измерения величины атмосферного давления, а также температуры в диапазоне от -40°C по +85°C с погрешностью всего 0,01°C. Кроме того, датчик может быть использован в качестве высотомера для определения высот от -500 до 9000 метров над уровнем моря.

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

Датчик поддерживает три режима работы:
  * **Normal** - в данном режиме датчик просыпается с определенной периодичностью, передает измерения и снова засыпает;
  * **Sleep** - режим сна;
  * **Forced** - режим работы, при котором датчик пробуждается подачей внешнего управляющего сигнала, передает измерения и автоматически переходит в режим сна.

Плата с датчиком исполнена в двух вариантах: на 3,3 и 5 В (Так как рабочим напряжением микросхемы BMP280 является 3,3 В, то для его корректной работы с контроллерами Arduino от 5 В, мы предусмотрели на плате датчика преобразователи напряжения). 

<WRAP center round important 60%>
Обратите внимание! Выводы платы датчика на 3,3 В не толерантные к 5В! Если Вы выбрали версию 3,3 В, используйте контроллеры (например, Arduino Due), напряжение выводов SDA и SCL которых не превышает 3,3 В! 
</WRAP>

==== Технические характеристики ====
  * Напряжение питания: 5 В или 3,3 В (в зависимости от версии платы)
  * Потребляемый ток в режиме измерений: 2,7 мкА
  * Диапазон измеряемого давления от 300 гПа до 1100 гПа
  * Погрешность измеряемого давления: ±0,12 гПа
  * Диапазон измеряемой температуры: от -40 °C до +85 °C
  * Погрешность измеряемой температуры: ±0,01˚С
  * Максимальная частота работы интерфейса I2C: 3,4 МГц

==== Физические размеры ====
  * Габаритные размеры Д х Ш х В: 30 х 20 х 7 мм

 
==== Подключение ====
Датчик подключается посредством шины I2C, что при большом количестве устройств и использовании расширителя I2C позволит сэкономить ценные выводы контроллера. Для удобного подключения к Arduino можно также воспользоваться Sensor Shield, на котором выведен отдельный разъем I2C. Для подключения модуля используйте 4-х проводной шлейф "мама-мама" (в комплект не входит). Варианты подключения датчика можно посмотреть ниже в разделе Примеры.
==== Файлы для загрузки ====
  * [[http://files.smartelements.ru/datasheet/BMP280.pdf|Даташит на BMP280]]
  * [[http://files.smartelements.ru/know_libs/BMP280_DEV.zip|Библиотека для Arduino]]

===== Примеры работы с датчиком =====
==== Пример 1. Работа с датчиком 5В ====
**Описание:** В примере показано как измерить температуру, влажность и давление с использованием датчика 5В.
**Что нужно:**
^ Что нужно   ^ Сколько  ^
| [[https://smartelements.ru/collection/kontrollery/product/kontroller-smart-uno|Контроллер Smart Uno]] | 1        |
| [[https://smartelements.ru/collection/shildy/product/sensor-shield|Sensor shield]] | 1        |
| [[https://smartelements.ru/collection/provoda-i-kabeli/product/shleyf-mama-mama-h4-20-sm|Шлейф "мама-мама" х4]] | 1        |
| [[https://smartelements.ru/collection/datchiki-i-sensory/product/datchik-atmosfernogo-davleniya-5-v|Датчик атмосферного давления 5В]] | 1        |

**Схема подключения:**
{{ :main:sensors:bmp280_uno.png?nolink |}}

**Скетч для загрузки:**

<WRAP center round tip 60%>
В данном скетче данные о результатах измерений выводятся по мере их готовности (от датчика). Поэтому, они будут выводится не в строгом порядке. Например, сначала температура, потом высота, потом снова температура, потом давление и так далее. Здесь демонстрируется получение данных раздельно, ведь для Вашего проекта не обязательно нужны будут все параметры. Более удобное получение данных о всех трёх показателях, смотрите в примере №2.
</WRAP>


<file Arduino>
#include <BMP280_DEV.h> // подключение библиотеки

float temperature; // переменная для хранения температуры
float pressure; // переменная для хранения давления
float altitude; // переменная для хранения высоты 
BMP280_DEV bmp280; // создание объекта для работы с датчиком (адрес 0х76)

void setup() 
{
  Serial.begin(9600);  // инициализация сериал-соединения
  bmp280.begin(); // инициализация датчика, датчик переходит в режим SLEEP_MODE 

  bmp280.setTimeStandby(TIME_STANDBY_2000MS);     // установка регулярности опроса датчика в 2 с
  bmp280.startNormalConversion();                 // начало опроса датчика в режиме NORMAL_MODE  
}

void loop() 
{
  //измерения температуры
  if (bmp280.getTemperature(temperature)) { // если выполнены измерения температуры
    Serial.println(); // вывод данных
    Serial.print("Temperature: ");
    Serial.print(temperature);
    Serial.println("*C");
  }

  //измерения давления
  if (bmp280.getPressure(pressure)) { // если выполнены измерения давления
    Serial.println(); // вывод данных
    Serial.print("Pressure: ");
    Serial.print(pressure);
    Serial.println(" hPa");
  }

  //измерения высоты
  if (bmp280.getAltitude(altitude)) { // если выполнены измерения высоты
    Serial.println(); // вывод данных
    Serial.print("Altitude: ");
    Serial.print(altitude);
    Serial.println(" m");
  }
  
}
</file>

==== Пример 2. Работа с датчиком 3.3В ====
**Описание:** В примере показано как измерить температуру, влажность и давление с использованием датчика 5В.
**Что нужно:**
^ Что нужно   ^ Сколько  ^
| [[https://smartelements.ru/collection/kontrollery/product/arduino-due|Контроллер Arduino Due]] | 1        |
| [[https://smartelements.ru/collection/provoda-i-kabeli/product/nabor-provodov-20-sht-20sm-papa-mama|Провода "папа-мама" х4]] | 4        |
| [[https://smartelements.ru/collection/datchiki-i-sensory/product/datchik-atmosfernogo-davleniya-33-v|Датчик атмосферного давления 3.3В]] | 1        |

**Схема подключения:**
{{ :main:sensors:bmp280_due.png?nolink |}}

**Скетч для загрузки:**
<file Arduino>
#include <BMP280_DEV.h> // подключение библиотеки

float temperature; // переменная для хранения температуры
float pressure; // переменная для хранения давления
float altitude; // переменная для хранения высоты 
BMP280_DEV bmp280; // создание объекта для работы с датчиком (адрес 0х76)

void setup() 
{
  Serial.begin(9600);  // инициализация сериал-соединения
  bmp280.begin(); // инициализация датчика, датчик переходит в режим SLEEP_MODE 

  bmp280.setTimeStandby(TIME_STANDBY_2000MS);     // установка регулярности опроса датчика в 2 с
  bmp280.startNormalConversion();                 // начало опроса датчика в режиме NORMAL_MODE  
}

void loop() 
{
  
  if (bmp280.getMeasurements(temperature, pressure, altitude)) { // если выполнены измерения
    
    //измерения температуры
    Serial.println(); // вывод данных
    Serial.print("Temperature: ");
    Serial.print(temperature);
    Serial.println("*C");  

    //измерения давления  
    Serial.println(); // вывод данных
    Serial.print("Pressure: ");
    Serial.print(pressure);
    Serial.println(" hPa");  

    //измерения высоты  
    Serial.println(); // вывод данных
    Serial.print("Altitude: ");
    Serial.print(altitude);
    Serial.println(" m");
  }
  
}
</file>