Давление на уровне моря для BMP280
У меня есть датчик давления BMP280 и BMP180, и оба они подключены через I²C к ESP8266.
Для BMP180 я могу получить давление воздуха на уровне моря, когда я передаю давление и высоту следующим образом:
// https://github.com/sparkfun/BMP180_Breakout_Arduino_Library
#include <SFE_BMP180.h>
SFE_BMP180 bmp180;
[...]
Serial.print(bmp180.sealevel(pressure, 800));
Есть ли нечто подобное для BMP280? Чтение давления и температуры работает нормально:
#include <Adafruit_BMP280.h>
Adafruit_BMP280 bmp280;
[...]
double temperature = bmp280.readTemperature();
double pressure = bmp280.readPressure() / 100;
@Thomas Weller, 👍0
2 ответа
Лучший ответ:
Похоже, это было запланировано для библиотеки Adafruit BMP280, но не реализовано. Глядя на Adafruit_BMP280.h
, мы видим закомментированный код, который имеет метод seaLevelForAltitude()
:
/*
class Adafruit_BMP280_Unified : public Adafruit_Sensor
{
public:
Adafruit_BMP280_Unified(int32_t sensorID = -1);
bool begin(uint8_t addr = BMP280_ADDRESS, uint8_t chipid = BMP280_CHIPID);
void getTemperature(float *temp);
void getPressure(float *pressure);
float pressureToAltitude(float seaLevel, float atmospheric, float temp);
float seaLevelForAltitude(float altitude, float atmospheric, float temp);
void getEvent(sensors_event_t*);
void getSensor(sensor_t*);
private:
uint8_t _i2c_addr;
int32_t _sensorID;
};
*/
В другой библиотеке, BMP280-arduino-library, я нашел функцию, которая работает:
double BMP280::sealevel(double P, double A)
// Учитывая давление P (мБ), снятое на определенной высоте (в метрах),
// вернуть эквивалентное давление (мБ) на уровне моря.
// Это дает показания давления, которые можно использовать для измерения погоды.
{
return(P/pow(1-(A/44330.0),5.255));
}
Во-первых, я просто скопировал эту функцию в свой код (без имени класса) из-за дружественной лицензии на пиццу. Позже я переключился на эту библиотеку, и она тоже работала нормально.
Попробуйте следующий сегмент: я использовал его сам, и он работал нормально.
Поскольку у вас нет метода по умолчанию для возврата давления на уровне моря из BMP280, мне пришлось рассчитать самостоятельно.
#include <Wire.h>
#include "SPI.h" //Почему? Поскольку библиотека поддерживает соединение SPI и I2C
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
//Настройка подключения датчика
Adafruit_BMP280 bmp; // I2C
/*//Для подключения по SPI!
#define BMP_SCK 13
#define BMP_MISO 12
#define BMP_MOSI 11
#define BMP_CS 10
//Adafruit_BMP280 bme(BMP_CS); // аппаратный SPI
//Adafruit_BMP280 bme(BMP_CS, BMP_MOSI, BMP_MISO, BMP_SCK);
*/
//Переменные
float pressure; //Для сохранения барометрического давления (Па)
float temperature; //Для сохранения температуры (oC)
float SLpressure_mB;
int ELEVATION = 9; //УКАЖИТЕ ЗДЕСЬ ВЫСОТУ ВАШЕГО МЕСТОПОЛОЖЕНИЯ В МЕТРАХ
void setup() {
bmp.begin(); //Начнем датчик
Serial.begin(9600); // Начать последовательную связь на скорости 9600 бит/с
Serial.println("Equivalent Sea Level Pressure Test:");
}
void loop() {
//Чтение значений с датчика:
pressure = bmp.readPressure();
temperature = bmp.readTemperature();
SLpressure_mB = (((pressure * 100.0)/pow((1-((float)(ELEVATION))/44330), 5.255))/100.0)
//Печать значений в последовательный монитор:
Serial.print(F("Pressure: "));
Serial.print(pressure, 2);
Serial.print(" Pa");
Serial.print("\t");
Serial.print(("Temp: "));
Serial.print(temperature);
Serial.print(" oC");
Serial.print("\t");
Serial.print("Equivalent Sea Level Pressure: ");
Serial.print(SLpressure_mB, 2);
Serial.println(" mB");
delay(5000); //Обновление каждые 5 секунд
}
- Какова работа pulseIn?
- Сколько датчиков может поддерживать один модуль Arduino?
- Получение BPM из данного кода
- DS18B20 дает высокие показания. Как заставить его вернуть правильную температуру?
- Какой тип разъема использует система GROVE?
- Улавливают ли ультразвуковые датчики прозрачные материалы?
- Как подключить более 10 датчиков к Arduino uno r3
- В чем разница между акселерометром, гироскопом и датчиком магнитометра?
спасибо, это сработало и для меня, и на самом деле работает так же, как я предложил, он только определяет другой метод, возвращающий давление
на уровне моря
!, @Pritam Sarkar@PritamSarkar: извините, я не пробовал ваше решение, потому что я уже развернул свое. Да, это та же самая формула., @Thomas Weller
да, оба в полном порядке @ThomarWeller., @Pritam Sarkar