Датчик давления

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

Принцип работы

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

Подключение

Подключается датчик к контроллеру по шине I2C. Подключение модуля осуществляется с помощью разъема XH-2.54-4P, выводы которого имеют следующие назначения:

VCC - питание
SCL - пин передачи данных
SDA - пин передачи данных
GND - земля (общий)

На противоположной стороне платы дополнительно выведен разъем, расширяющий функционал модуля:

GND - земля (общий)
SDO/MIS - порт SDO канала I2C, порт MISO протокола SPI
SCL/SCK - порт SCL канала I2C, порт SCK протокола SPI
SDA/MOS - порт SDA канала I2C, порт MISO протокола SPI
CSB/SS - порт CSB канала I2C, порт SS протокола SPI
3.3V - питание от 3.3В
VCC - питание от 5В

Чтобы начать работу с датчиком его необходимо подключить к микроконтроллеру. Для быстрого и надежного подключения используйте QuatroPort A050. Провод должен быть подключен к шилду в один из разъемов линии I2C, например в разъем №1 по схеме ниже.

Далее необходимо загрузить программу в микроконтроллер, предварительно скачав и установив библиотеку для работы с датчиком отсюда: https://github.com/christandlg/BMx280MI  (папку с библиотекой необходимо переименовать в "BMx280MI" и поместить в папку Документы - Arduino - libraries). Как устанавливать библиотеки описано здесь: https://geegrow.ru/wiki/programming/libraries/ .

В коде осуществляется проверка датчика в последовательный порт передаются показания.

#include "Arduino.h"
#include "Wire.h"
#include "BMx280I2C.h"

#define I2C_ADDRESS 0x76

BMx280I2C bmx280(I2C_ADDRESS);

void setup() {
  //Запускаем последовательный порт и его скорость
  Serial.begin(9600);

  //Ждем пока откроется соединение 
  while (!Serial);

  Wire.begin();

  //Функция begin() проверяет интерфейс, считывает ID датчика
  //(для отличия датчиков BMP280 и BME280)
  //и считывает параметры.
  if (!bmx280.begin())
  {
    Serial.println("begin() failed. check your BMx280 Interface and I2C Address.");
    while (1);
  }

  if (bmx280.isBME280())
    Serial.println("sensor is a BME280");
  else
    Serial.println("sensor is a BMP280");

  //Сброс датчика до параметров по-умолчанию.
  bmx280.resetToDefaults();

  //По-умолчанию датчик отключем и должен быть включен установкой ненулевых 
  //настроек.
  bmx280.writeOversamplingPressure(BMx280MI::OSRS_P_x16);
  bmx280.writeOversamplingTemperature(BMx280MI::OSRS_T_x16);

  //if sensor is a BME280, set an oversampling setting for humidity measurements.
  if (bmx280.isBME280())
    bmx280.writeOversamplingHumidity(BMx280MI::OSRS_H_x16);
}

void loop() {

  delay(1000);

  //Начинаем измерения
  if (!bmx280.measure())
  {
    Serial.println("could not start measurement, is a measurement already running?");
    return;
  }

  //Ждем конца измерений.
  do
  {
    delay(100);
  } while (!bmx280.hasValue());
  //Выводим давление
  Serial.print("Pressure: "); 
  Serial.println(bmx280.getPressure()); 
  //Выводим температуру
  Serial.print("Temperature: "); 
  Serial.println(bmx280.getTemperature());
  //Выводим влажность
  if (bmx280.isBME280())
  {
    Serial.print("Humidity: "); 
    Serial.println(bmx280.getHumidity());
  }
}

Теперь если открыть монитор порта можно увидеть давление в Паскалях, температуру в градусах Цельсия и влажность в процентах.