Arduino BME280 Sıcaklık, Nem ve Basınç Sensörü

Merhaba arkadaşlar,
Mobilhanem.com için hazırladığımız Arduino Eğitimlerine Barometrik Basınç ,Sıcaklık ve Nem sensörü olan BME280 ile devam ediyoruz. Bu dersimizde BME280‘den ve Arduino BME280 kullanımından bahsedeceğiz.

Sıcaklık,Nem ve Basınç Sensörü (BME280)

Sıcaklık Nem Basınç sensörü BME280 ± 1.0 ° C doğruluğu olan, ± 1 hPa mutlak doğruluğu ile atmosferik basınç, ve sıcaklık ,nem ölçümü için yüksek hassasiyete sahiptir. Basınç yükseklik ile değişir ve basınç ölçümleri çok  hassas olduğu için yüksekliği ölçmek için kullanılabilir, ± 1 metre veya daha iyi doğrulukla bir altimetre olarak kullanabilirsiniz.

BME280, Bosch’un yeni nesil sensörüdür, 0,25 m’lik düşük rakım ölçüm hassasiyetine ve aynı hızla döndürme süresine sahiptir BMP085 / BMP180 / BMP183 sensörlerinin yükseltilmiş versiyonudur. Aynı özelliklere sahip, fakat hem I2C veya SPI’yı kullanabilirsiniz. Basit kolay kablolama için, I2C tercih edebilirsiniz. Eğer I2C adresi hızı konusunda endişe duyuyorsanız, SPI kablolama yolunu tercih edebilirsiniz. bu yazımızda iki kablolama şeklinide öğreneceğiz.

Basınç nedir ?

Basınç alan başına kuvvet (p = F / A) olarak tanımlanır, yani basınç bir alanı etkileyen belirli bir kuvvet miktarıdır. Uluslararası SI, basınç için ana birimi bir Pascal olarak tanımlar; burada 1 Pascal, metrekare başına 1 Newton’a (N / m2) eşittir.

Mutlak Basınç

Barometrik basınç, mutlak basınç tipidir. Mutlak basınç ölçülürken, ölçülen basınç, hava molekülünün kalmadığı ve dolayısıyla basıncın olmadığı mükemmel (mutlak) bir vakumla karşılaştırılır.Buna karşılık, ortak gösterge basıncı mevcut barometrik / atmosferik basınç olarak adlandırılır.

Barometrik Basınç

 

 

Barometrik basınç, üzerimizdeki havanın ağırlığının neden olduğu basınçtır. Yeryüzünün üstümüzdeki atmosferi hava içeriyor ve nispeten hafif olmasına rağmen, yer çekimi, hava moleküllerini çekerken ağırlık almaya başlıyor. “Hava” dediğimde, etrafımızdaki hava, yaklaşık% 78 azot,% 21 oksijen,% 1 altında argon ve az miktarda diğer gazlardan oluşan anlamına gelir. Hava gittikçe incelir, çünkü daha az molekül vardır.

Atmosferin kütlesinin % 75’i dünya yüzeyinde yaklaşık 11 km (6,8 mil, 36,000 fit) kalınlığında bir katmanın altındadır. Atmosferin dış uzaya dönüştüğü sınır, genellikle dünya yüzeyinin yaklaşık 100 km (62 mil) yukarısındadır.

Sensör Hakkında Teknik Detaylara buradan ulaşabilirsiniz.

 

 

Arduino BME280 Kullanımı

I2C Kablolama

I2C arayüzü üzerinden bağlanmak istiyorsanız bu kablolamayı kullanın.

  • Vin’i güç kaynağına bağlayın, 3-5V. Mikrodenetleyici mantığının temel aldığı voltajı kullanın. Çoğu Arduino için bu 5V.
  • GND’yi ortak güç / veri topraklamasına bağlayın.
  • SCK pinini Arduino’nuzdaki I2C saat SCL pinine bağlayın.UNO & ‘328 tabanlı Arduino’da bu A5 olarak da bilinir, Mega’da dijital 21 ve Leonardo / Micro, dijital 3 olarak da bilinir.
  • SDI pinini Arduino’nuzdaki I2C veri SDA pinine bağlayın. UNO & ‘328 tabanlı Arduino’da bu A4 olarak da bilinir, Mega’da dijital 20 ve Leonardo / Micro, dijital 2 olarak da bilinir.

 

SPI Kablolama

Bu SPI özellikli bir sensör olduğundan, hardware veya ‘software’ SPI kullanabiliriz. Kablolamayı tüm Arduino’larda aynı hale getirmek için ‘software’ SPI ile başlayacağız.

  • Vin’i güç kaynağına bağlayın, 3V veya 5V iyi. Mikrodenetleyici mantığının temel aldığı voltajı kullanın. Çoğu Arduino için bu 5V.
  • GND’yi ortak güç / veri topraklamasına bağlayın.
  • SCK pinini Digital # 13’e bağlayın, ancak daha sonra herhangi bir pin kullanılabilir.
  • SDO pinini Dijital # 12’ye bağlayın, ancak daha sonra herhangi bir pin kullanılabilir.
  • SDI pinini Digital # 11’e bağlayın, ancak daha sonra herhangi bir pin kullanılabilir.
  • CS pinini Digital # 10’u bağlayın, ancak daha sonra herhangi bir pin kullanılabilir.

Arduino Sıcaklık, Nem ve Basınç Sensörü Kullanımı

Arduino ile Sıcaklık, Nem ve Basınç Sensörünü kullanabilmek için devrenin şemasını gösterildiği gibi kurduktan sonra aşağıdaki kütüphaneleri yükleyerek ölçüm yapabilirsiniz. Gerekli açıklamaları kod satıraları yanında bulabilirsiniz.

IDE’den kütüphane yöneticisini açın.

Kütüphaneyi bulmak için bme280 yazın. Yükle’yi tıklayın.

Sağ altta çıkan kur butonuna basın .

Ve son adım olarak örneklerden bme280 test dosyasını açın.

#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>

#define BME_SCK 13
#define BME_MISO 12
#define BME_MOSI 11
#define BME_CS 10

#define SEALEVELPRESSURE_HPA (1013.25)

Adafruit_BME280 bme; //!!!! I2C KULLANMAK İÇİN BU SATIRI YORUM SATIRINDAN ÇIKARIYORUZ.
//Adafruit_BME280 bme(BME_CS); // hardware SPI
//Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); //!!!! SPI KULLANMAK İÇİN BU SATIRI YORUM SATIRINDAN ÇIKARIYORUZ.

unsigned long delayTime;

void setup() {
    Serial.begin(9600);
    while(!Serial);    // time to get serial running
    Serial.println(F("BME280 test"));

    unsigned status;
    
    // default settings
    status = bme.begin();  
    // You can also pass in a Wire library object like &Wire2
    // status = bme.begin(0x76, &Wire2)
    if (!status) {
        Serial.println("Could not find a valid BME280 sensor, check wiring, address, sensor ID!");
        Serial.print("SensorID was: 0x"); Serial.println(bme.sensorID(),16);
        Serial.print("        ID of 0xFF probably means a bad address, a BMP 180 or BMP 085\n");
        Serial.print("   ID of 0x56-0x58 represents a BMP 280,\n");
        Serial.print("        ID of 0x60 represents a BME 280.\n");
        Serial.print("        ID of 0x61 represents a BME 680.\n");
        while (1) delay(10);
    }
    
    Serial.println("-- Default Test --");
    delayTime = 1000;

    Serial.println();
}


void loop() { 
    printValues();
    delay(delayTime);
}


void printValues() {
    Serial.print("Temperature = ");
    Serial.print(bme.readTemperature());
    Serial.println(" *C");

    Serial.print("Pressure = ");

    Serial.print(bme.readPressure() / 100.0F);
    Serial.println(" hPa");

    Serial.print("Approx. Altitude = ");
    Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
    Serial.println(" m");

    Serial.print("Humidity = ");
    Serial.print(bme.readHumidity());
    Serial.println(" %");

    Serial.println();
}

Baud hızımızı 9600 yapıp Seri Port Ekranını açıyoruz.

Sıcaklık C derece olarak hesaplanır, klasik F = C * 9/5 + 32 denklemini kullanarak bunu F’ye dönüştürebilirsiniz.

Basınç, Paskalların SI birimlerinde geri döndürülür. 100 Paskal = 1 hPa = 1 milibar. Çoğu zaman barometrik basınç, milibar veya inç cıva cinsinden bildirilir. İleride referans için 1 pascal = 0.000295333727 inç cıva veya 1 inç Hg = 3386.39 Pascal. Yani 100734 pascal değerini alıp 3386.39’a bölerseniz 29.72 inç-Hg alırsınız.

Rakımı da hesaplayabilirsiniz. Ancak, bulunduğunuz yer ve gün için deniz seviyesinde hPa basıncını biliyorsanız, yükseklik hesaplamak için gerçekten doğru bir iş yapabilirsiniz. Sensör oldukça hassastır, ancak mevcut güne ait veriler güncellenmemişse, 10 metreden daha doğru bir şekilde elde etmek zor olabilir.

Arduino ile  ilgili geçmiş derslerimize buradan ulaşabilirsiniz.

15

Ömer Gürbüz

5 Yorum

  • Çok açık ve güzel anlatım olmuş, tebrik ederim emeğinize sağlık ilerleyen projelerde başarılar 🙂

  • Merhaba,
    Could not find a valid BME280 sensor, check wiring, address, sensor ID!
    SensorID was: 0xFF
    ID of 0xFF probably means a bad address, a BMP 180 or BMP 085
    ID of 0x56-0x58 represents a BMP 280,
    ID of 0x60 represents a BME 280.
    ID of 0x61 represents a BME 680.

    hatasını alıyorum. Sensör scan ettiğimde ise sensor not found hatasını alıyorum. Bir fikriniz varmı acaba ?

    • kod içerisinde spi yada i2c ile bağlantı yapmanız için seçenek vermiş. birisini açıklama olarak göstermek için başına // koymuş. o // işaretini kaldırırsanız çalışır.

  • İyi günler bu BME280 Sensörünü proteus üzerinde nasıl yapabilirim araştırdım ama proteusta yok galiba.

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?