education:arduino_bmp280
BMP280
- Senzor barometrického tlaku a teploty
- Komunikace přes I2C, nebo SPI
- Napájení 1.8 - 3.6V
Adafruit_BMP280_Library
Data sheet
BMP280 | ARDUINO | ESP32 | |
---|---|---|---|
I2C | SDA | A4 | GPIO21 |
SCL | A5 | GPIO22 | |
SPI | SCL | 13 | GPIO18 |
SDO | 12 | GPIO19 | |
SDA | 11 | GPIO23 | |
CSB | LIBOVOLNÝ |
Knihovna obsahuje:
readTemperature();
- Čtení teploty [°C]
readPressure();
- Čtení naměřeného tlaku [Pa]
readAltitude(seaLevelhPa);
- Výpočet nadmořské výšky. seaLevelhPa
je aktuální tlak přepočtený na hladinu moře (0mnm). Lze ho zjistit z předpovědi počasí.
seaLevelForAltitude(altitude, atmospheric);
- Přepočet tlaku na hladinu moře. altitude
je nadmořská výška ve které byla hodnota tlaku naměřena [m]. atmospheric
je naměřená hodnota tlaku určená k přepočtu [hPa]
waterBoilingPoint(pressure);
- Výpočet přesné teploty varu vody[°C]. pressure
je tlak podle kterého bude vypočten bod varu
Funkcí setSampling();
lze nastavit chování senzoru.1)
MODE | OVERSAMPLING | FILTERING | STANDBY |
---|---|---|---|
MODE_NORMAL | SAMPLING_NONE | FILTER_OFF | STANDBY_MS_1 |
MODE_FORCED | SAMPLING_X1 | FILTER_X2 | STANDBY_MS_63 |
MODE_SLEEP | SAMPLING_X2 | FILTER_X4 | STANDBY_MS_125 |
MODE_SOFT_RESET_CODE | SAMPLING_X4 | FILTER_X8 | STANDBY_MS_250 |
SAMPLING_X8 | FILTER_X16 | STANDBY_MS_500 | |
SAMPLING_X16 | STANDBY_MS_1000 | ||
STANDBY_MS_2000 | |||
STANDBY_MS_4000 |
- BMP280.ino
#include <Adafruit_BMP280.h> // Kód je psaný pro verzi knihovny 2.6.6 /* Vlastní nastavení SPI */ #define BMP_SCK 13 // SCL #define BMP_MISO 12 // SDO #define BMP_MOSI 11 // SDA #define BMP_CS 10 // CSE Adafruit_BMP280 bmp; // I2C //Adafruit_BMP280 bmp(BMP_CS); // hardware SPI //Adafruit_BMP280 bmp(BMP_CS, BMP_MOSI, BMP_MISO, BMP_SCK); //vlasní SPI void setup() { Serial.begin(9600); Serial.println("\nBMP280 test"); //Wire.begin(SDA, SCL); // Vlastní nastavení I2C //bool status = bmp.begin(); // použití výchozí I2C adresy (0x77) bool status = bmp.begin(BMP280_ADDRESS_ALT, BMP280_CHIPID); // návratová hodnota určuje jestli senzor komunikuje if (!status) { Serial.println(F("Nepodarilo se navazat komunikaci se senzorem. Zkontrolujte zapojeni, " "nebo pouzijte jinou I2C adresu senzoru. (radek 17) ")); while (1) delay(10); } /* Výchozí nastavení podle datasheetu */ bmp.setSampling(Adafruit_BMP280::MODE_NORMAL, /* Operating Mode. */ Adafruit_BMP280::SAMPLING_X2, /* Temp. oversampling */ Adafruit_BMP280::SAMPLING_X16, /* Pressure oversampling */ Adafruit_BMP280::FILTER_X16, /* Filtering. */ Adafruit_BMP280::STANDBY_MS_500); /* Standby time. */ } void loop() { float teplota = bmp.readTemperature(); // načtení teploty float tlak = bmp.readPressure() / 100.0; // načtení tlaku, převod z Pa na hPa float tlak_hl_more = bmp.seaLevelForAltitude(250 /*n. výška*/, tlak); // přepočet tlaku na hladinu moře float vyska = bmp.readAltitude(1013.25 /*tlak 0mnm*/); // měření nadmořské výšky float bod_varu = bmp.waterBoilingPoint(tlak); // výpočet bodu varu Serial.println("\nTeplota\t\tTlak\t\tTlak 0 mnm\tVyska\t\tBod varu"); Serial.print(teplota); Serial.print(" °C\t"); Serial.print(tlak); Serial.print(" hPa\t"); Serial.print(tlak_hl_more); Serial.print(" hPa\t"); Serial.print(vyska); Serial.print(" mnm\t"); Serial.print(bod_varu); Serial.println(" °C"); delay(2000); }
1)
viz tabulka
education/arduino_bmp280.txt · Poslední úprava: 2023/08/18 12:37 autor: 127.0.0.1