Yazılardaki ürünleri komponentci.net'te inceleyebilir, hemen sipariş verebilirsiniz.komponentci.net →
KomponentciBlog Mağaza
Blog  ›  Projeler

Barometrik Yükseklik Ölçer: BMP280 Altimetre ve OLED

Barometrik Yükseklik Ölçer: BMP280 Altimetre ve OLED
Kısa cevap

Barometrik yükseklik ölçer, hava basıncının yükseldikçe azalmasından yararlanarak yüksekliği hesaplayan bir altimetredir. BMP280 ya da BME280 basınç sensörü, OLED ekran ve Arduino ile yapılır. Doğru mutlak yükseklik için o günün deniz seviyesi basıncı girilmelidir; kat farkı gibi göreli ölçümler ise yaklaşık 1 metre hassasiyetle izlenebilir.

Uçaklarda, akıllı saatlerde ve dağcıların cihazlarında bulunan altimetre, basit bir basınç sensörüyle sınıfta da yapılabilir. Bu yazıda BMP280 (ya da BME280) basınç sensörü, OLED ekran ve Arduino Uno ile hem deniz seviyesinden yüksekliği hem de kat farkını gösteren bir barometrik yükseklik ölçer yapıyoruz. Malzeme listesi, bağlantı, kod, deniz seviyesi basıncı ayarı, güvenlik notları ve TÜBİTAK 4006 sunum önerileri yazıda yer alıyor.

Barometrik yükseklik ölçer nedir?

Barometrik yükseklik ölçer (altimetre), bulunduğu yerdeki hava basıncını ölçüp bunu standart atmosfer formülüyle yüksekliğe çeviren bir cihazdır. Yükseğe çıktıkça üstümüzde kalan hava sütunu kısalır ve basınç düşer.

Deniz seviyesine yakın yerlerde basınç her 8-9 metrelik yükselişte yaklaşık 1 hPa azalır. BMP280'in göreli doğruluğu üreticiye göre ±0,12 hPa'dır; bu da yaklaşık ±1 metreye karşılık gelir. Bu yüzden sensör bir binanın katları arasındaki farkı bile ayırt edebilir.

Hangi malzemeler gerekir?

Arduino Uno, BMP280 ya da BME280 sensör modülü, 0,96 inç I2C OLED ekran, bir buton ve taşınabilir kullanım için 9V pil yuvası yeterlidir. BME280, BMP280'in nem de ölçebilen kardeşidir; basınç ölçümü iki sensörde aynıdır ve bu yazıdaki kod ikisiyle de çalışır.

Malzeme listesi

MalzemeAdetNe işe yarar?
Arduino Uno R3 (CH340, USB kablolu)1Basınçtan yüksekliği hesaplar
BME280 basınç ve sıcaklık sensörü (I2C/SPI)1Hava basıncını ölçer
0,96 inç 128x64 I2C OLED ekran (SSD1306)1Yüksekliği ve basıncı gösterir
Buton (tact switch)1Bulunduğunuz yeri "sıfır" noktası yapar
9V pil yuvası (jaklı) ve 9V pil1Ölçeri merdivende taşınabilir yapar
Erkek-dişi jumper kablo ve breadboard1 setBağlantılar için

Nem ölçümü de yapmak isterseniz BME280 nem, sıcaklık ve basınç sensörü seçebilirsiniz. Basınç sensörlerinin karşılaştırması basınç sensörü nedir yazımızda bulunuyor.

Deniz seviyesi basıncı neden ayarlanmalı?

Deniz seviyesi basıncı ayarlanmalıdır, çünkü hava basıncı yalnızca yükseklikle değil hava durumuyla da değişir. Formül, ölçülen basıncı deniz seviyesindeki basınçla karşılaştırır. Kod varsayılan olarak standart değer olan 1013,25 hPa'yı kullanır, ancak gerçek değer gün içinde ve günden güne birkaç hPa, fırtınalı havada daha fazla değişir.

Deniz seviyesi basıncındaki hataYükseklikteki yaklaşık hata
1 hPa≈ 8 m
5 hPa≈ 42 m
10 hPa≈ 84 m

Güncel deniz seviyesi basıncını iki yolla bulabilirsiniz. Birincisi, Meteoroloji'nin ya da en yakın havalimanının yayımladığı "deniz seviyesine indirgenmiş basınç" değerini kullanmaktır. İkincisi, yüksekliği bilinen bir yerde (ör. okulunuzun haritadaki rakımı) ölçüm yapıp deniz seviyesi basıncını geri hesaplamaktır: P0 = P / (1 − h / 44330)5,255.

Standart atmosferde basınç ile yükseklik arasındaki ilişki şöyledir:

YükseklikStandart basınç
0 m (deniz seviyesi)1013,25 hPa
500 m≈ 954,6 hPa
1000 m≈ 898,8 hPa
1500 m≈ 845,6 hPa
2000 m≈ 795,0 hPa

Devre nasıl bağlanır?

Sensör ve OLED ekran aynı I2C hattını paylaşır: iki modülün SDA ucu A4'e, SCL ucu A5'e bağlanır. Sensör 3,3V'tan, ekran 5V'tan beslenir; buton D2 ile GND arasına takılır.

  1. Sensörü bağlayın: VCC (VIN) → 3,3V, GND → GND, SDA → A4, SCL → A5. Kartınızda regülatör olduğundan eminseniz 5V da kullanılabilir; emin değilseniz 3,3V seçin.
  2. OLED ekranı bağlayın: VCC → 5V, GND → GND, SDA → A4, SCL → A5. Aynı pine iki kablo gerektiği için breadboard kullanın.
  3. Butonun bir ucunu D2'ye, diğer ucunu GND'ye bağlayın.
  4. Kütüphane Yöneticisi'nden "Adafruit BMP280", "Adafruit BME280", "Adafruit SSD1306" ve "Adafruit GFX" kütüphanelerini kurun.
  5. Koddaki DENIZ_HPA değerini o günün deniz seviyesi basıncıyla değiştirip kodu yükleyin.
  6. Ölçeri taşımak için 9V pil yuvasının jakını Arduino'nun DC girişine takın.
Barometrik yükseklik ölçer bağlantı şeması: BMP280 ya da BME280 sensörünün VCC ucu Arduino Uno 3,3V pinine, GND ucu GND'ye, SCL ucu A5'e, SDA ucu A4'e bağlı; OLED ekran aynı I2C hattına SCL A5, SDA A4 olarak bağlı ve 5V ile besleniyor; buton D2 ile GND arasında; 9V pil yuvası Arduino'nun DC jakına takılı; örnek ekranda 126 m yükseklik, 3,1 m fark, 998,2 hPa ve 21,4 °C; altta standart atmosferde 0 m 1013,25 hPa, 500 m 954,6 hPa, 1000 m 898,8 hPa, 1500 m 845,6 hPa, 2000 m 795,0 hPa eğrisi ve h = 44330 × (1 − (P/P0)^0,1903) formülü
Sensör ve OLED SDA → A4, SCL → A5 hattını paylaşır; buton D2'ye bağlanır; deniz seviyesine yakın 1 hPa yaklaşık 8 metredir.
#include <Adafruit_BMP280.h>
#include <Adafruit_BME280.h>
#include <Adafruit_SSD1306.h>

Adafruit_BMP280 bmp;
Adafruit_BME280 bme;
Adafruit_SSD1306 ekran(128, 64, &Wire, -1);
const float DENIZ_HPA = 1013.25;   // bugunku deniz seviyesi basinci
const byte BUTON = 2;
bool bmeMi = false;
float yukseklik = NAN, sifir = 0;

float basinc() { return (bmeMi ? bme.readPressure() : bmp.readPressure()) / 100.0; }
float sicaklik() { return bmeMi ? bme.readTemperature() : bmp.readTemperature(); }

void setup() {
  Serial.begin(9600);
  pinMode(BUTON, INPUT_PULLUP);
  ekran.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  ekran.setTextColor(SSD1306_WHITE);
  if (bme.begin(0x76) || bme.begin(0x77)) bmeMi = true;     // BME280 mi?
  else if (!bmp.begin(0x76) && !bmp.begin(0x77)) {          // BMP280 mi?
    ekran.clearDisplay(); ekran.setCursor(0, 0);
    ekran.print(F("Sensor bulunamadi")); ekran.display();
    while (true) {}
  }
}

void loop() {
  float p = basinc();
  float h = 44330.0 * (1.0 - pow(p / DENIZ_HPA, 0.1903));
  yukseklik = isnan(yukseklik) ? h : yukseklik * 0.9 + h * 0.1;   // yumusatma
  if (digitalRead(BUTON) == LOW) { sifir = yukseklik; delay(300); }

  ekran.clearDisplay();
  ekran.setTextSize(1); ekran.setCursor(0, 0);
  ekran.print(F("Yukseklik (m)"));
  ekran.setTextSize(3); ekran.setCursor(0, 12);
  ekran.print(yukseklik, 0);
  ekran.setTextSize(1); ekran.setCursor(0, 42);
  ekran.print(F("Fark: ")); ekran.print(yukseklik - sifir, 1); ekran.print(F(" m"));
  ekran.setCursor(0, 54);
  ekran.print(p, 1); ekran.print(F(" hPa  ")); ekran.print(sicaklik(), 1); ekran.print(F(" C"));
  ekran.display();
  Serial.print(p, 2); Serial.print(F(" hPa, ")); Serial.print(yukseklik, 1); Serial.println(F(" m"));
  delay(200);
}

Kod nasıl çalışır?

Kod, sensörden okuduğu basıncı uluslararası standart atmosfer formülüne koyarak yüksekliği hesaplar: h = 44330 × (1 − (P / P0)0,1903). Burada P ölçülen basınç, P0 deniz seviyesi basıncıdır.

  • Sensörü tanıma: BME280 olarak satılan bazı kartların üzerinde aslında BMP280 bulunur. Kod önce BME280'i, bulamazsa BMP280'i 0x76 ve 0x77 adreslerinde arar; hangisi takılıysa onunla çalışır.
  • Yumuşatma: Her yeni değerin yalnızca %10'u sonuca eklenir. Böylece ±1 m'lik titreşim azalır, ancak ekran bir kat değişimine birkaç saniyede tepki verir.
  • Göreli yükseklik: Butona bastığınızda o anki yükseklik sıfır kabul edilir. "Fark" satırı bu noktaya göre ne kadar yükseldiğinizi gösterir. Kat farkı ölçümünde deniz seviyesi basıncı hatası sonucu neredeyse etkilemez.

OLED ekranın ayrıntıları için SSD1306 OLED ekran yazısına bakabilirsiniz.

Hangi güvenlik kurallarına dikkat edilmeli?

Ölçer yalnızca USB ya da 9V pille çalışır; şebeke elektriğine bağlanmaz ve uçak ya da dağcılık gibi gerçek durumlarda yön bulma ve güvenlik aracı olarak kullanılmaz.

  • Merdivende ölçüm yaparken ekrana bakarak yürümeyin; durup okuyun ve korkuluğu tutun.
  • Çatı, balkon ya da teras gibi düşme riski olan yerlerde ölçüm yapmayın.
  • Asansörde ölçüm yapacaksanız bir yetişkinle birlikte olun.
  • 9V pilin uçlarını metal eşyalarla kısa devre etmeyin; kullanmadığınızda jakı çıkarın.

Projeyi nasıl sunarsınız?

Projeyi, okul binasında kat kat ölçüm yapıp sonuçları şerit metreyle ölçülen gerçek yüksekliklerle karşılaştırarak sunabilirsiniz.

  • Problem: "Hava basıncından binanın yüksekliği ölçülebilir mi?"
  • Deney: Zemin katta butona basın, her katta 30 saniye bekleyip "Fark" değerini yazın. Kat yüksekliğini şerit metreyle ölçüp karşılaştırın.
  • Grafik: Kat numarasına karşı ölçülen yüksekliği çizin; noktaların bir doğruya ne kadar yakın olduğunu yorumlayın.
  • Hava durumu deneyi: Ölçeri bir gün boyunca masada bırakıp basıncı saatte bir yazın. Yükseklik değişmediği halde ekrandaki değerin neden değiştiğini açıklayın.

Sık sorulan sorular

Ekrandaki yükseklik bilinen rakımdan farklıysa ne yapmalıyım?

Fark genellikle yanlış deniz seviyesi basıncından kaynaklanır. DENIZ_HPA değerini o günün güncel değeriyle değiştirin ya da yüksekliği bilinen bir yerde ölçüm yapıp deniz seviyesi basıncını yazıdaki formülle geri hesaplayın. Sensörün mutlak doğruluğu ±1 hPa, yani yaklaşık ±8 metredir.

Ekranda "Sensor bulunamadi" yazıyorsa sorun nedir?

Arduino sensörü I2C hattında bulamıyordur. SDA'nın A4'e, SCL'nin A5'e gittiğini ve sensörün beslemesinin takılı olduğunu kontrol edin. Ekran çalışıyorsa hattın kendisi sağlamdır; sorun sensör kablolarındadır. Kartınızda SPI ve I2C seçimi için ayrı pinler varsa üreticinin I2C için önerdiği bağlantıyı kullanın.

Değer masada dururken bile neden değişiyor?

Hava basıncı gün içinde doğal olarak değişir; birkaç saatte 1-2 hPa'lık değişim, ekranda 8-16 metrelik kayma olarak görünür. Kapı açılıp kapanması, klima ve rüzgâr da kısa süreli dalgalanmalara yol açar. Göreli ölçümleri kısa sürede tamamlarsanız bu etki küçük kalır.

Bu ölçer drone ya da roket projelerinde kullanılabilir mi?

Evet, BMP280 model roket ve drone projelerinde yükseklik kaydı için sık kullanılır. Ancak hızlı hareketlerde yumuşatma katsayısını azaltmanız ve verileri bir SD karta kaydetmeniz gerekir. Rüzgâr ve pervane hava akımı ölçümü etkileyebileceği için sensörü delikli bir köpük ya da kutuyla korumak önerilir.

Özet

  • Barometrik yükseklik ölçer, basınç düşüşünü standart atmosfer formülüyle yüksekliğe çevirir.
  • Deniz seviyesine yakın yerlerde 1 hPa yaklaşık 8 metreye karşılık gelir.
  • Sensör ve OLED, SDA → A4 ve SCL → A5 hattını paylaşır; buton D2'ye bağlanır.
  • Mutlak yükseklik için güncel deniz seviyesi basıncı girilir; göreli ölçümde buton sıfır noktası belirler.
  • Kod BMP280 ve BME280 ile çalışır; göreli ölçüm yaklaşık ±1 m hassasiyete ulaşır.

Bu yazıdaki ürünler

Diğer yazılar

11 Kasım 20266 dk okuma

Pense Çeşitleri: Yan Keski, Kargaburun ve Kombine Pense

Pense çeşitleri arasında seçim işe göre yapılır: tel ve komponent bacağı kesmek için yan keski, dar alanda tutmak ve bükmek için kargaburun,...

Devamını oku →
11 Kasım 20267 dk okuma

Işık Takip Eden Robot Yapımı: Arduino, LDR ve L298N

Işık takip eden robot, önüne takılan iki LDR ile hangi tarafın daha aydınlık olduğunu ölçüp tekerleklerini o yöne süren bir Arduino projesid...

Devamını oku →
11 Kasım 20266 dk okuma

İzoleli Tornavida ve 1000V VDE El Aletleri Nedir?

İzoleli tornavida, IEC 60900 (EN 60900) standardına göre 1000V AC ve 1500V DC gerilime kadar yalıtım için test edilmiş ve üzerinde çift üçge...

Devamını oku →
11 Kasım 20267 dk okuma

ESP8266 Hava Durumu Ekranı: NodeMCU, OLED ve Open-Meteo

ESP8266 hava durumu ekranı, NodeMCU kartının Wi-Fi ile internete bağlanıp Open-Meteo servisinden anlık sıcaklık, nem, rüzgâr ve hava durumu...

Devamını oku →
11 Kasım 20266 dk okuma

Havya Ucu Çeşitleri ve Bakımı: Konik, Keski, Bıçak

Havya ucu, lehimlenecek noktanın boyutuna göre seçilir: ince SMD ve sık bacaklar için konik (I), genel THT lehim için keski (D) ya da eğik k...

Devamını oku →
11 Kasım 20266 dk okuma

Ultrasonik Theremin Projesi: HC-SR04 ile Elle Müzik

Ultrasonik theremin, HC-SR04 sensörüyle elinizin uzaklığını ölçüp bu mesafeyi ses frekansına çeviren bir Arduino projesidir. El sensöre yakl...

Devamını oku →