İçindekiler:
- 1. Adım: BME280 Keşfi
- 2. Adım: Donanım Gereksinim Listesi
- 3. Adım: Arayüzleme
- Adım 4: Sıcaklık, Basınç ve Nem İzleme Kodu
- Adım 5: Uygulamalar:
- 6. Adım: Video Eğitimi
Video: BME280 ve Foton Arabirimi Kullanarak Nem, Basınç ve Sıcaklık Hesaplaması: 6 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:17
Sıcaklık, basınç ve nem takibi gerektiren çeşitli projelerle karşılaşmaktayız. Böylece, bu parametrelerin farklı atmosferik koşullarda bir sistemin çalışma verimliliğine ilişkin bir tahminde bulunmada gerçekten hayati bir rol oynadığını anlıyoruz. Hem endüstriyel düzeyde hem de kişisel sistemlerde, sistemin yeterli performansı için optimum sıcaklık, nem ve barometrik basınç seviyesi gereklidir.
Bu nedenle bu sensör hakkında eksiksiz bir eğitim sunuyoruz, bu eğitimde BME280 nem, basınç ve sıcaklık sensörünün parçacık fotonlu çalışmasını açıklayacağız.
1. Adım: BME280 Keşfi
Elektronik sektörü, sıcaklık, barometrik basınç ve neme sahip bir çevre sensörü olan BME280 sensörü ile oyunlarını hızlandırdı! Bu sensör, her türlü hava/çevre algılaması için mükemmeldir ve I2C'de bile kullanılabilir.
Bu hassas sensör BME280, ±%3 doğrulukla nemi, ±1 hPa mutlak doğrulukla barometrik basıncı ve ±1,0°C doğrulukla sıcaklığı ölçmek için en iyi algılama çözümüdür. Basınç yükseklikle değiştiğinden ve basınç ölçümleri çok iyi olduğundan, ±1 metre veya daha yüksek doğrulukta bir altimetre olarak da kullanabilirsiniz!Sıcaklık sensörü en düşük gürültü ve en yüksek çözünürlük için optimize edilmiştir ve sıcaklık kompanzasyonu için kullanılır. basınç sensörü ve ortam sıcaklığının tahmini için de kullanılabilir. BME280 ile ölçümler kullanıcı tarafından veya düzenli aralıklarla gerçekleştirilebilir.
Veri sayfası: BME280 sensörünün veri sayfasını önizlemek veya indirmek için tıklayın.
2. Adım: Donanım Gereksinim Listesi
Kullanımı kolay oldukları için tamamen Dcube Mağaza Parçalarını kullandık ve her şeyin bir santimetre ızgaraya güzel bir şekilde uyması bizi gerçekten harekete geçiriyor. İstediğinizi kullanabilirsiniz, ancak bağlantı şeması bu parçaları kullandığınızı varsayacaktır.
- BME280 Sensör I²C Mini Modül
- Parçacık Fotonu için I²C Kalkanı
- parçacık fotonu
- I²C Kablosu
- Güç adaptörü
3. Adım: Arayüzleme
Arabirim bölümü, temel olarak sensör ve parçacık fotonu arasında gerekli olan kablo bağlantılarını açıklar. İstenilen çıktı için herhangi bir sistem üzerinde çalışırken doğru bağlantıların sağlanması temel zorunluluktur. Yani, gerekli bağlantılar aşağıdaki gibidir:
BME280, I2C üzerinde çalışacaktır. Sensörün her bir arayüzünün nasıl bağlanacağını gösteren örnek kablo şeması buradadır. Kutudan çıktığı gibi, kart bir I2C arayüzü için yapılandırılmıştır, bu nedenle, aksi takdirde agnostik iseniz bu arayüzü kullanmanızı öneririz. Tek ihtiyacınız olan dört tel! Vcc, Gnd, SCL ve SDA pinlerinden sadece dört bağlantı gereklidir ve bunlar I2C kablosu yardımıyla bağlanır. Bu bağlantılar yukarıdaki resimlerde gösterilmiştir.
Adım 4: Sıcaklık, Basınç ve Nem İzleme Kodu
Bunu çalıştırmak için kullanacağımız kodun temiz sürümüne BURADAN ulaşabilirsiniz.
Arduino ile sensör modülünü kullanırken application.h ve spark_wiring_i2c.h kütüphanesini dahil ediyoruz. "application.h" ve spark_wiring_i2c.h kitaplığı, sensör ve parçacık arasındaki i2c iletişimini kolaylaştıran işlevleri içerir.
Cihaz izleme web sayfasını açmak için BURAYA tıklayın
Kodu panonuza yükleyin ve çalışmaya başlasın! Tüm veriler resimde gösterildiği gibi web sayfasından elde edilebilir.
Kod aşağıda verilmiştir:
// Bir özgür irade lisansıyla dağıtılır.// İlişkili eserlerinin lisanslarına uyması koşuluyla, istediğiniz şekilde, kârlı veya ücretsiz olarak kullanın. // BME280 // Bu kod, ControlEverything.com'da bulunan BME280_I2CS I2C Mini Modülü ile çalışmak üzere tasarlanmıştır. #include #include // BME280 I2C adresi 0x76(108) #define Addr 0x76 double cTemp = 0, fTemp = 0, basınç = 0, nem = 0; void setup() { // Particle.variable değişkenini ayarla("i2cdevice", "BME280"); makale.değişken("cTemp", cTemp); Particle.variable("fTemp", fTemp); Particle.variable("basınç", basınç); Particle.variable("nem",nem); // I2C iletişimini MASTER Wire.begin() olarak başlat; // Seri iletişimi başlat, baud hızını ayarla = 9600 Serial.begin(9600); gecikme(300); } void loop() { unsigned int b1[24]; imzasız int veri[8]; int dig_H1 = 0; for(int i = 0; i < 24; i++) { // I2C Transmission Wire.beginTransmission(Addr); // Veri kaydını seçin Wire.write((136+i)); // I2C İletimini Durdur Wire.endTransmission(); // 1 bayt veri iste Wire.requestFrom(Addr, 1); // 24 bayt veri oku if(Wire.available() == 1) { b1 = Wire.read(); } } // Verileri dönüştürün // geçici katsayılar int dig_T1 = (b1[0] & 0xff) + ((b1[1] & 0xff) * 256); int dig_T2 = b1[2] + (b1[3] * 256); int dig_T3 = b1[4] + (b1[5] * 256); // basınç katsayıları int dig_P1 = (b1[6] & 0xff) + ((b1[7] & 0xff) * 256); int dig_P2 = b1[8] + (b1[9] * 256); int dig_P3 = b1[10] + (b1[11] * 256); int dig_P4 = b1[12] + (b1[13] * 256); int dig_P5 = b1[14] + (b1[15] * 256); int dig_P6 = b1[16] + (b1[17] * 256); int dig_P7 = b1[18] + (b1[19] * 256); int dig_P8 = b1[20] + (b1[21] * 256); int dig_P9 = b1[22] + (b1[23] * 256); for(int i = 0; i < 7; i++) { // I2C Transmission Wire.beginTransmission(Addr); // Veri kaydını seçin Wire.write((225+i)); // I2C İletimini Durdur Wire.endTransmission(); // 1 bayt veri iste Wire.requestFrom(Addr, 1); // 7 bayt veri oku if(Wire.available() == 1) { b1 = Wire.read(); } } // Verileri dönüştürün // nem katsayıları int dig_H2 = b1[0] + (b1[1] * 256); int dig_H3 = b1[2] & 0xFF; int dig_H4 = (b1[3] * 16) + (b1[4] & 0xF); int dig_H5 = (b1[4] / 16) + (b1[5] * 16); int dig_H6 = b1[6]; // I2C Transmission Wire'ı başlatın.beginTransmission(Adr); // Veri kaydını seçin Wire.write(161); // I2C İletimini Durdur Wire.endTransmission(); // 1 bayt veri iste Wire.requestFrom(Addr, 1); // 1 bayt veri oku if(Wire.available() == 1) { dig_H1 = Wire.read(); } // I2C Transmission Wire.beginTransmission(Addr); // Kontrol nem kaydını seçin Wire.write(0xF2); // Örnekleme oranı üzerinden nem = 1 Wire.write(0x01); // I2C İletimini Durdur Wire.endTransmission(); // I2C Transmission Wire'ı başlatın.beginTransmission(Addr); // Kontrol ölçüm kaydını seçin Wire.write(0xF4); // Normal mod, sıcaklık ve örnekleme oranı üzerinden basınç = 1 Wire.write(0x27); // I2C İletimini Durdur Wire.endTransmission(); // I2C Transmission Wire'ı başlatın.beginTransmission(Adr); // Yapılandırma kaydı seçin Wire.write(0xF5); // Bekleme süresi = 1000ms Wire.write(0xA0); // I2C İletimini Durdur Wire.endTransmission(); for(int i = 0; i <8; i++) { // I2C Transmission Wire.beginTransmission(Addr); // Veri kaydını seçin Wire.write((247+i)); // I2C İletimini Durdur Wire.endTransmission(); // 1 bayt veri iste Wire.requestFrom(Addr, 1); // 8 bayt veri oku if(Wire.available() == 1) { data = Wire.read(); } } // Basınç ve sıcaklık verilerini 19 bit uzunluğunda dönüştürün adc_p = (((long)(data[0] & 0xFF) * 65536) + ((long)(data[1] & 0xFF) * 256) + (uzun)(veri[2] & 0xF0)) / 16; uzun adc_t = (((uzun)(veri[3] ve 0xFF) * 65536) + ((uzun)(veri[4] ve 0xFF) * 256) + (uzun)(veri[5] ve 0xF0)) / 16; // Nem verilerini dönüştürün long adc_h = ((long)(data[6] & 0xFF) * 256 + (long)(data[7] & 0xFF)); // Sıcaklık ofset hesaplamaları double var1 = (((double)adc_t) / 16384.0 - ((double)dig_T1) / 1024.0) * ((double)dig_T2); double var2 = ((((double)adc_t) / 131072.0 - ((double)dig_T1) / 8192.0) * (((double)adc_t)/131072.0 - ((double)dig_T1)/8192.0)) * ((double)dig_T3); double t_fine = (uzun)(var1 + var2); double cTemp = (var1 + var2) / 5120.0; çift fTemp = cTemp * 1.8 + 32; // Basınç ofset hesaplamaları var1 = ((double)t_fine / 2.0) - 64000.0; var2 = var1 * var1 * ((çift)dig_P6) / 32768.0; var2 = var2 + var1 * ((çift)dig_P5) * 2.0; var2 = (var2 / 4.0) + (((double)dig_P4) * 65536.0); var1 = (((çift) dig_P3) * var1 * var1 / 524288.0 + ((çift) dig_P2) * var1) / 524288.0; var1 = (1.0 + var1 / 32768.0) * ((çift)dig_P1); çift p = 1048576,0 - (çift)adc_p; p = (p - (var2 / 4096.0)) * 6250.0 / var1; var1 = ((çift) dig_P9) * p * p / 2147483648.0; var2 = p * ((çift) dig_P8) / 32768.0; çift basınç = (p + (var1 + var2 + ((double)dig_P7)) / 16.0) / 100; // Nem ofset hesaplamaları double var_H = (((double)t_fine) - 76800.0); var_H = (adc_h - (dig_H4 * 64.0 + dig_H5 / 16384.0 * var_H)) * (dig_H2 / 65536.0 * (1.0 + dig_H6 / 67108864.0 * var_H * (1.0 + dig_H3 / 67108864.0 * var_H))); çift nem = var_H * (1.0 - dig_H1 * var_H / 524288.0); if(nem> 100.0) { nem = 100.0; } else if(nem < 0.0) { nem = 0.0; } // Verileri panoya çıkar Particle.publish("Santigrat cinsinden Sıcaklık: ", String(cTemp)); Particle.publish("Sıcaklık Fahrenhayt Olarak: ", String(fTemp)); Particle.publish("Basınç: ", String(basınç)); Particle.publish("Bağıl Nem: ", String(nem)); gecikme(1000); }
Adım 5: Uygulamalar:
BME280 sıcaklık, basınç ve bağıl nem sensörü, sıcaklık izleme, bilgisayar çevresel termal koruma, endüstride basınç izleme gibi çeşitli endüstriyel uygulamalara sahiptir. Bu sensörü ayrıca hava durumu istasyonu uygulamalarının yanı sıra sera izleme sisteminde de kullandık.
Diğer uygulamalar şunları içerebilir:
- Bağlam farkındalığı, ör. cilt algılama, oda değişikliği algılama.
- Fitness izleme / sağlık - Kuruluk veya yüksek sıcaklıklarla ilgili uyarı.
- Hacim ve hava akışı ölçümü.
- Ev otomasyon kontrolü.
- Kontrol ısıtma, havalandırma, klima (HVAC).
- Nesnelerin interneti.
- GPS geliştirmesi (örneğin, ilk düzeltmeye kadar geçen süre iyileştirmesi, ölü hesaplama, eğim algılama).
- İç mekan navigasyonu (kat değişimi algılama, asansör algılama).
- Açık navigasyon, eğlence ve spor uygulamaları.
- Hava Durumu tahmini.
- Dikey hız göstergesi (yükselme/alçalma hızı)..
6. Adım: Video Eğitimi
Arayüz oluşturma ve projeyi tamamlamanın tüm adımlarını gözden geçirmek için eğitim videomuzu izleyin.
Diğer sensörlerin arayüzleri ve çalışan blogları için bizi izlemeye devam edin.
Önerilen:
MPL3115A2 ile Raspberry Pi Kullanarak Rakım, Basınç ve Sıcaklık: 6 Adım
MPL3115A2 ile Raspberry Pi Kullanarak Rakım, Basınç ve Sıcaklık: Kulağa ilginç geliyor. Hepimizin IoT nesline girdiğimiz bu zamanda bu oldukça mümkün. Bir elektronik delisi olarak Raspberry Pi ile oynuyorduk ve bu bilgiyi kullanarak ilginç projeler yapmaya karar verdik. Bu projede yapacağımız
BMP280-DHT11 Kullanan Arduino Hava İstasyonu - Sıcaklık, Nem ve Basınç: 8 Adım
BMP280-DHT11 Kullanan Arduino Hava İstasyonu - Sıcaklık, Nem ve Basınç: Bu derste, LCD Ekran TFT 7735'te SICAKLIK, NEM VE BASINÇ gösterecek bir hava durumu istasyonunun nasıl yapıldığını öğreneceğiz
BH1715 ve Arduino Nano Kullanarak Işık Yoğunluğu Hesaplaması: 5 Adım
BH1715 ve Arduino Nano Kullanarak Işık Yoğunluğu Hesaplaması: Dün LCD ekranlar üzerinde çalışıyorduk ve bunlar üzerinde çalışırken ışık yoğunluğu hesaplamasının önemini fark ettik. Işık yoğunluğu sadece bu dünyanın fiziksel alanında önemli değildir, aynı zamanda biyolojik alanda da iyi söylenen rolü vardır
RaspberryPI ve BME280 Kullanarak Apple HomeKit Sıcaklık Sensörü (BME280) Oluşturun: 5 Adım
RaspberryPI ve BME280 Kullanarak Apple HomeKit Sıcaklık Sensörü (BME280) Oluşturun: Son birkaç aydır IOT cihazlarıyla uğraşıyorum ve evim ve kulübemdeki koşulları izlemek için yaklaşık 10 farklı sensör yerleştirdim. Ve başlangıçta AOSONG DHT22 ılıman nem sensörünü kullanmaya başlamıştım
Raspberry Pi ve TE Bağlantısı Kullanan Sıcaklık, Bağıl Nem, Atmosferik Basınç Kaydedici MS8607-02BA01: 22 Adım (Resimlerle)
Sıcaklık, Bağıl Nem, Raspberry Pi ve TE Bağlantısı Kullanan Atmosferik Basınç Kaydedici MS8607-02BA01: Giriş: Bu projede, sıcaklık, nem ve atmosferik basınç için bir kayıt sisteminin adım adım nasıl oluşturulacağını göstereceğim. Bu proje Raspberry Pi 3 Model B ve TE Connectivity çevresel sensör çipi MS8607-02BA'ya dayanmaktadır