Arduino-based barometric pressure measurement with BMP280 for weather and altitude sensing (1 citation).
Accurate barometric pressure and altitude measurement is fundamental to weather monitoring, drone navigation, and indoor climate control — but dedicated commercial barometers and altimeters are often expensive, proprietary, and difficult to integrate into custom instrumentation projects by students and researchers in developing regions.
Without accessible pressure measurement, small-scale weather stations are limited to temperature and humidity only, missing the critical atmospheric pressure variable that drives weather prediction models. Altitude estimation for UAVs and elevation surveys similarly requires costly dedicated GPS-altimeter modules.
There was a clear need for a low-cost, open-source approach using widely available sensor modules and microcontrollers — something a student could build with an Arduino starter kit and a BMP280 breakout board costing under $5.
The measurement system is built around the Bosch BMP280 digital barometric pressure sensor, an I2C/SPI device that provides temperature-compensated pressure readings with ±0.12 hPa relative accuracy. The sensor communicates with an Arduino Uno microcontroller via the I2C bus using only four connections: VCC (3.3V), GND, SCL (clock), and SDA (data).
Sigit developed the Arduino firmware that initializes the BMP280, reads compensated pressure and temperature values from the sensor registers, computes altitude from the barometric formula using a reference sea-level pressure of 1013.25 hPa, and streams the results via serial output at 9600 baud for real-time monitoring on a connected PC.
The system samples at 1 Hz with a pressure range of 300–1100 hPa, covering all natural terrestrial atmospheric conditions from deep low-pressure systems to high-altitude mountain environments. Temperature compensation is handled internally by the BMP280, with output accuracy of ±0.5°C.
The system demonstrated reliable pressure measurement across a 14-hour observation period, capturing the characteristic diurnal pressure cycle — higher readings during cooler morning hours (1010.8 hPa at 06:00) and lower readings during the warm afternoon (1004.8 hPa at 13:00). This pattern matches the expected inverse relationship between air temperature and barometric pressure due to thermal expansion of the air column.
Altitude estimation derived from the barometric formula showed consistent results with the pressure trend. The system successfully tracked relative altitude changes within a 50 m range over the measurement period. When calibrated against a known elevation reference, the BMP280 provides altitude resolution of 0.17 m — sufficient for weather balloon tracking, drone altitude hold, and basic surveying applications.
The BMP280 sensor was connected to the Arduino Uno via the I2C interface at address 0x76. The Adafruit BMP280 library was used for sensor initialization and reading of compensated pressure (hPa) and temperature (°C) values. The sensor was configured for ultra-high resolution mode (oversampling ×16 for pressure, ×2 for temperature) with IIR filter enabled to reduce measurement noise.
Altitude was calculated using the International Standard Atmosphere (ISA) barometric formula with a sea-level reference pressure of 1013.25 hPa at 15°C. The formula accounts for the exponential decrease of atmospheric pressure with altitude, providing altitude estimates accurate to approximately ±1 m per 0.12 hPa of pressure resolution near sea level.
Measurements were taken at 1 Hz over a 14-hour period from 06:00 to 19:00 local time at the test site in Serang, Banten, Indonesia (approximate elevation: 30 m above sea level). The Arduino was powered via USB from a laptop running the Arduino IDE Serial Monitor to capture and log the output data for analysis.
Data validation compared the BMP280 readings against local weather station reference data (BMKG Serang station), with agreement within ±0.5 hPa for absolute pressure after calibration offset correction. The open-source design enables other researchers to replicate the setup with components totaling under $10.
| Pressure (hPa) | Altitude (m) | Reference Location |
|---|---|---|
| 1013.25(ref) | 0 | Sea level |
| 1000.00 | 111 | Coastal plains |
| 975.00 | 323 | Low hills |
| 950.00 | 540 | Highland plateau |
| 900.00 | 988 | Mountain base |
| 850.00 | 1,457 | Mountain pass |
| 800.00 | 1,949 | High mountain |
| 750.00 | 2,466 | Alpine zone |
| 700.00 | 3,012 | Very high altitude |
| 650.00 | 3,591 | Extreme altitude |
| 600.00 | 4,206 | Aircraft cabin |
| 550.00 | 4,865 | Tibetan Plateau |
Jurnal SETRUM — Sistem Kendali Tenaga Elektronika Telekomunikasi Komputer, 2023
DOI: 10.36055/setrum.v12i2.20123
Extends atmospheric sensing to full weather station capability with ESP32 and Fine Offset sensor packet parsing.
Shares the same Arduino instrumentation platform for low-cost environmental measurement in resource-limited settings.
Low-cost Arduino-based atmospheric sensing builds the foundation for more advanced weather station and environmental monitoring instrumentation projects.