Arduino için Basınç Sensörü: Bağlantı, Kod ve Ayarlar

Kerem Aydın·7 Temmuz 2026·⏱5 dk

Dijital bir basınç sensörünü (örneğin BMP180 veya BME280) Arduino'ya bağlamak için I2C arayüzünü kullanın: SDA ve SCL pinlerini Uno üzerindeki A4 ve A5 analog girişlerine veya diğer kartlardaki ilgili pinlere bağlayın. Güç kaynağı olarak kesinlikle 3.3 V kullanın. Verileri okumak için Adafruit Sensor kütüphanesini kurun ve readPressure() ile readTemperature() hazır fonksiyonlarını kullanın.

Bu sensörler yalnızca atmosferik basıncı değil, aynı zamanda sıcaklığı da ölçmenize olanak tanır; hassas bir referansınız varsa deniz seviyesinden yüksekliği de hesaplayabilirsiniz. Aşağıda modül seçimi, montaj şeması ve yazılım kısmını ele alacağız.

İçindekiler

Sensör Seçimi: BMP180 mi BME280 mi?

Hobi projeleri için Bosch Sensortec'in dijital modülleri fiili standart haline gelmiştir. Kompakt, enerji verimli ve mikrodenetleyici ile I2C veya SPI veri yolu üzerinden iletişim kurarlar.

ÖzellikBMP180 (eski)BME280 (önerilen)BMP280
Ölçülen BüyüklüklerBasınç, SıcaklıkBasınç, Sıcaklık, NemBasınç, Sıcaklık
Basınç Doğruluğu±0.12 hPa (yüksek)±1 hPa (yeterli)±1 hPa
ArayüzI2C / SPII2C / SPII2C / SPI
Çalışma Voltajı1.8 – 3.6 V1.71 – 3.6 V1.71 – 3.6 V
MaliyetDüşükOrtaDüşük

Öneri: Projeniz nem ölçümü gerektiriyorsa (örneğin ev tipi hava istasyonu), BME280 seçin. Yalnızca yükseklik veya basınç gerekiyorsa daha ucuz olan BMP280 uygun olacaktır. BMP180 modülü eski kabul edilse de hala yaygın olarak bulunabilir; avantajı dar bir aralıkta biraz daha yüksek doğruluk sunmasıdır, ancak kalibrasyonu daha zordur.

Modülleri hazır devre kartları (breakout board) olarak satın alın, örneğin GY serisi (BMP180 için GY-68, GY-BME280). Bunlar zaten voltaj regülatörü ve I2C hatları için pull-up dirençleri içerir, bu da onları Arduino'ya güvenle bağlamanızı sağlar.

Arduino'ya Bağlantı Şeması (I2C)

Dijital BMP/BME sensörleri I2C protokolünü kullanır. Bu, bağlantı için sadece 4 kabloya ihtiyaç duyulduğu anlamına gelir.

Arduino Uno / Nano için Pin Bağlantısı

  • VCC → 3.3V (Dikkat! Modül kartında lineer regülatör yoksa 5V'a bağlamayın. Sensör çipi yanar.)
  • GND → GND
  • SDA (Data) → A4
  • SCL (Clock) → A5

Arduino Mega 2560 için Pin Bağlantısı

  • VCC → 3.3V
  • GND → GND
  • SDA → Pin 20
  • SCL → Pin 21

Voltaj Kontrolü: Çoğu BMP/BME çipi yalnızca 3.3 V ile çalışır. Modülünüzde "5V tolerant" etiketi veya dahili LDO regülatörü yoksa, 5 V'a bağlamak onu anında bozar. Arduino üzerindeki 3.3V pinini kullanın.

Aynı I2C veri yolunda birden fazla cihaz kullanıyorsanız, adreslerinin çakışmadığından emin olun. BMP180/BMP280'nin varsayılan adresi 0x77'dir. BME280'nin adresi, SDO pininin durumuna göre (toprağa mı yoksa beslemeye mi çekildiğine bağlı olarak) 0x76 veya 0x77 olabilir.

Yazılımsal Kurulum ve Kütüphaneler

Sensörle çalışmak için sıfırdan sürücü yazmanıza gerek yoktur. Karmaşık telafi matematiğini soyutlayan, kanıtlanmış Adafruit kütüphanelerini kullanın.

  1. Arduino IDE'yi açın.
  2. Taslak → Kütüphane Ekle → Kütüphaneleri Yönet menüsüne gidin.
  3. Arama kutusuna Adafruit BMP280 Library (hem BMP180 hem de BMP280 için uygundur) veya Adafruit BME280 Library yazın.
  4. Yükle düğmesine tıklayın. IDE otomatik olarak bağımlı kütüphane Adafruit Unified Sensor'ı yüklemeyi önerecektir — onaylayın.

Veri Okuma için Hazır Kod

Aşağıda BMP280/BMP180 için evrensel bir örnek verilmiştir. Kod basıncı, sıcaklığı okur ve yaklaşık yüksekliği hesaplar.

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>

// Sensör nesnesi oluştur
Adafruit_BMP280 bmp; 

// I2C Adresi (BMP180/280 için varsayılan 0x77, bazı BME280'ler için 0x76)
#define BMP_ADDR 0x77 

void setup() {
  Serial.begin(9600);
  Serial.println(F("Basınç sensörü başlatılıyor..."));

  // Sensörü başlat
  if (!bmp.begin(BMP_ADDR)) {
    Serial.println(F("Hata: Sensör bulunamadı. Bağlantıları kontrol edin!"));
    while (1);
  }
  
  // Çalışma modunu ayarla (standart)
  bmp.setSampling(Adafruit_BMP280::MODE_NORMAL,     /* Çalışma modu */
                  Adafruit_BMP280::SAMPLING_X2,     /* Sıcaklık */
                  Adafruit_BMP280::SAMPLING_X16,    /* Basınç */
                  Adafruit_BMP280::FILTER_X16,      /* Gürültü filtresi */
                  Adafruit_BMP280::STANDBY_MS_500); /* Uyku aralığı */
                  
  Serial.println("Sensör hazır.");
}

void loop() {
  // Verileri oku
  float temperature = bmp.readTemperature();
  float pressure = bmp.readPressure() / 100.0F; // Pa'dan hPa'ya (hektopascal) çevir
  
  // Deniz seviyesine göre yükseklik hesabı (deniz seviyesi basıncının bilinmesi gerekir)
  // 1013.25 hPa - standart atmosferik basınç
  float altitude = bmp.readAltitude(1013.25); 

  Serial.print("Sıcaklık: ");
  Serial.print(temperature);
  Serial.println(" °C");

  Serial.print("Basınç: ");
  Serial.print(pressure);
  Serial.println(" hPa");

  Serial.print("Yükseklik: ");
  Serial.print(altitude);
  Serial.println(" m");

  Serial.println("---");
  delay(2000); // 2 saniye bekle
}

Nasıl Çalışır:

  1. bmp.begin() I2C veri yolundaki bağlantıyı kontrol eder.
  2. setSampling() doğruluğu ve hızı ayarlar. Örnekleme ne kadar yüksekse (örneğin X16), veriler o kadar doğru olur ancak ölçüm daha uzun sürer.
  3. readPressure() değeri Pascal cinsinden döndürür. Alışılmış hektopascal (hPa) veya milibar (mbar) birimini elde etmek için 100'e böleriz.

Kalibrasyon ve Doğruluğu Artırma

Sensörler "kutudan çıktığı gibi" standart 1013.25 hPa basıncına göre bağıl yükseklik gösterir. Gerçek atmosferik basınç hava durumuna göre değiştiği için, yükseklik okumaları "dalgalanacaktır".

1. Mevcut Basınca Göre Düzeltme

Doğru yükseklik elde etmek için bölgenizdeki mevcut deniz seviyesi basıncını bilmeniz gerekir.

  • Hava durumu servisi üzerinden şehrinizdeki güncel basıncı öğrenin (hPa cinsinden).
  • bmp.readAltitude(...) fonksiyonundaki 1013.25 sayısını elde ettiğiniz değerle değiştirin.

2. Gürültü Filtreleme

Sensörler elektriksel parazite ve hava türbülansına karşı hassastır. Okumaları stabilize etmek için basit bir kayan ortalama kullanın:

float getSmoothedPressure(int samples = 10) {
  float sum = 0;
  for (int i = 0; i < samples; i++) {
    sum += bmp.readPressure();
    delay(50); // Ölçümler arasında küçük bir gecikme
  }
  return (sum / samples) / 100.0F;
}

Sızdırmazlık Testi: Sensörü kapalı bir hacimdeki (örneğin bir muhafaza içindeki) basıncı kontrol etmek için kullanıyorsanız, özellikle aşırı basıncı ölçmüyorsanız atmosferle basınç eşitlemesi için bir delik olduğundan emin olun.

Analog Sensörlerle Çalışma (MPX5700)

Yüksek basıncı (borulardaki sıvılar, gazlar, pnömatik sistemler) ölçmeniz gerekiyorsa, barometrik sensörler uygun değildir. NXP'nin MPX5xxx serisi gibi analog sensörler kullanın.

Farklılıklar:

  • Çıkış: Analog sinyal (0–5 V).
  • Bağlantı: OUT pini Arduino'nun analog girişine (A0–A5).
  • Güç Kaynağı: Genellikle 5 V.

MPX5700AP için Örnek Kod (700 kPa'ya kadar)

const int sensorPin = A0;
const float Vcc = 5.0; // Besleme voltajı

void setup() {
  Serial.begin(9600);
}

void loop() {
  int rawValue = analogRead(sensorPin);
  float voltage = rawValue * (Vcc / 1023.0);
  
  // MPX5700 veri sayfasındaki formül: Vout = Vs * (0.009 * P + 0.04)
  // Burada P - kPa cinsinden basınçtır. P'yi ifade edelim:
  // P = (Vout/Vs - 0.04) / 0.009
  
  float pressure_kPa = (voltage / Vcc - 0.04) / 0.009;
  
  // Sensör yalnızca belirli sınırlar içinde lineer olduğu için aralığı sınırlıyoruz
  if (pressure_kPa < 0) pressure_kPa = 0;
  if (pressure_kPa > 700) pressure_kPa = 700;

  Serial.print("Basınç: ");
  Serial.print(pressure_kPa);
  Serial.println(" kPa");
  
  delay(500);
}

Bağlantıda Sık Yapılan Hatalar

  1. Voltaj Karışıklığı (3.3V vs 5V). Arızaların en sık görülen nedeni. BMP/BME çipleri 3.3 voltluktur. Modülde ara regülatör olmadan Arduino'daki VCC'yi 5V'a bağlarsanız, sensör bozulur.
  2. SDA ve SCL Hatlarının Karıştırılması. Bazı modern kartlarda koruma olsa da, klasik hata sarı (SDA) ve yeşil (SCL) kabloların karıştırılmasıdır. Veri aktarılmayacaktır.
  3. Pull-up Dirençlerinin Eksikliği. I2C veri yolu, hatların beslemeye çekilmesini (pull-up) gerektirir. Çoğu hazır modülde (GY serisi) bunlar zaten vardır. Eğer çıplak çip bağlıyorsanız, SDA ve SCL'den VCC'ye (3.3V) 4.7–10 kΩ dirençler ekleyin.
  4. Adres Çakışması. Arduino'ya 0x77 adresli iki cihaz bağlanırsa, yalnızca biri çalışır (veya hiçbiri). Adresi I2C tarayıcı ile kontrol edin.

SSS: Sorular ve Cevaplar

S: BMP180'i doğrudan 5 voltluk Arduino'ya bağlayabilir miyim? C: Yalnızca modülde voltaj regülatörü (LDO) ve veri hatları için seviye dönüştürücü varsa. Modül küçükse ve ek bileşenler olmadan sadece 4 pini varsa — yalnızca 3.3V'a bağlayın.

S: Neden yükseklik okumaları ±10 metre sallanıyor? C: Atmosferik basınç kararsızdır. Hava durumu değişiklikleri deniz seviyesi basıncını değiştirir. Hassas bir altimetre için referans basıncının sürekli olarak güncellenmesi gerekir (internet üzerinden veya manuel girişle). Ayrıca okumaları akımlar ve sensörün çevresindeki bileşenlerden kaynaklanan ısınma etkiler.

S: Çalışmıyorsa sensörün I2C adresini nasıl öğrenebilirim? C: Arduino'ya I2C Scanner taslağını yükleyin (birçok kütüphanenin örneklerinde veya internette bulunur). Veri yolunu tarar ve seri monitörde bulunan tüm adresleri yazdırır.

S: Bu sensör araba lastiklerindeki basıncı ölçmek için uygun mu? C: Hayır. BMP/BME yaklaşık 1 atmosfer (100 kPa) ölçer. Lastik basıncı 2–3 atmosfer (200–300 kPa) ve üzeridir. Lastikler için MPX5500 serisi özel sensörler veya hazır TPMS sensörleri gerekir.