BMP280 و اندازهگیری ارتفاع با فشار هوا چیست؟ (برای مبتدی)
با بالا رفتن ارتفاع، فشار هوا کاهش مییابد. این رابطه فیزیکی پایه کار Barometer (فشارسنج) در پهپادها است. ماژول BMP280 یک سنسور دیجیتال فشار و دما با دقت بالا است که از طریق I2C یا SPI به Arduino متصل میشود.
با فرمول Barometric Formula، از اختلاف فشار بین نقطه پرواز و زمین میتوان ارتفاع نسبی را با دقت ±۱ متر محاسبه کرد. فلایت کنترلرهای ArduPilot و iNAV هم از همین اصل برای Altitude Hold و Auto Landing استفاده میکنند.
یک لاگر Barometer مستقل میتواند در تحلیل پرواز، بررسی بازدهی PID Altitude، و تنظیم پارامترهای موتور بسیار مفید باشد.
محصولی که میسازید
یک لاگر فشار/ارتفاع با BMP280 که داده را روی SD Card ذخیره میکند و ارتفاع را روی OLED نمایش میدهد.
- زمان ساخت: ۲ تا ۳ ساعت
- هزینه: ۳۰۰ تا ۴۵۰ هزار تومان
- دقت ارتفاع: ±۱ متر
کد Arduino — BMP280 + SD Logger
#include <Wire.h>
#include <Adafruit_BMP280.h>
#include <Adafruit_SSD1306.h>
#include <SD.h>
Adafruit_BMP280 bmp;
Adafruit_SSD1306 oled(128, 64, &Wire, -1);
File logFile;
float groundPressure; // فشار سطح زمین
float calcAltitude(float pressure) {
// فرمول Barometric برای ارتفاع نسبی
return 44330.0 * (1.0 - pow(pressure / groundPressure, 0.1903));
}
void setup() {
Serial.begin(115200);
bmp.begin(0x76);
bmp.setSampling(Adafruit_BMP280::MODE_NORMAL,
Adafruit_BMP280::SAMPLING_X2,
Adafruit_BMP280::SAMPLING_X16,
Adafruit_BMP280::FILTER_X16,
Adafruit_BMP280::STANDBY_MS_500);
oled.begin(SSD1306_SWITCHCAPVCC, 0x3C);
// کالیبراسیون: میانگین ۳۰ نمونه اول
float pSum = 0;
for(int i=0; i<30; i++) { pSum += bmp.readPressure(); delay(50); }
groundPressure = pSum / 30.0;
Serial.print("Ground P: "); Serial.println(groundPressure);
SD.begin(10);
logFile = SD.open("baro_log.csv", FILE_WRITE);
if(logFile) logFile.println("ms,pressure,temp,altitude");
}
void loop() {
float press = bmp.readPressure();
float temp = bmp.readTemperature();
float alt = calcAltitude(press);
oled.clearDisplay(); oled.setTextSize(2); oled.setCursor(0,0);
oled.print(alt, 1); oled.println("m");
oled.setTextSize(1); oled.setCursor(0,20);
oled.print(press/100.0, 2); oled.println(" hPa");
oled.print(temp, 1); oled.println(" C");
oled.display();
if(logFile) {
logFile.print(millis()); logFile.print(",");
logFile.print(press,2); logFile.print(",");
logFile.print(temp,2); logFile.print(",");
logFile.println(alt,3);
if(millis() % 5000 < 100) logFile.flush();
}
delay(200);
}
چکلیست تست
| تست | نتیجه |
|---|---|
| در سطح زمین ارتفاع ≈ 0m است؟ | بله — بعد از کالیبراسیون |
| بالا بردن ۱ متر → ارتفاع ≈ 1m؟ | بله |
| فایل CSV روی SD ایجاد شده؟ | بله |
| دمای سنسور با دماسنج محیط تطابق دارد؟ | ±۲°C قابل قبول |