Датчики атмосферного давления или барометры используются в системах мониторинга климата. Кроме этого сенсор измеряет температуру и влажность воздуха.Кроме этого, показания датчика можно пересчитать и получить высотомер.
Датчик построен на основе чипа 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()); } }
Теперь если открыть монитор порта можно увидеть давление в Паскалях, температуру в градусах Цельсия и влажность в процентах.