İçindekiler:

Parçacık Fotonu - MPL3115A2 Hassas Altimetre Sensörü Eğitimi: 4 Adım
Parçacık Fotonu - MPL3115A2 Hassas Altimetre Sensörü Eğitimi: 4 Adım

Video: Parçacık Fotonu - MPL3115A2 Hassas Altimetre Sensörü Eğitimi: 4 Adım

Video: Parçacık Fotonu - MPL3115A2 Hassas Altimetre Sensörü Eğitimi: 4 Adım
Video: "Güneş Tanrıçası": Var Olmaması Gereken Bir Parçacık Daha Keşfedildi! 2024, Haziran
Anonim
Image
Image

MPL3115A2, doğru Basınç/İrtifa ve Sıcaklık verileri sağlamak için I2C arayüzüne sahip bir MEMS basınç sensörü kullanır. Sensör çıkışları, yüksek çözünürlüklü 24 bit ADC ile sayısallaştırılır. Dahili işleme, ana bilgisayar MCU sisteminden tazminat görevlerini kaldırır. Sadece 0,05 kPa'da, yani 0,3 m'lik bir irtifa değişikliğine denk gelen bir değişikliği tespit etme yeteneğine sahiptir. İşte Parçacık fotonu ile gösterimi.

Adım 1: İhtiyacınız Olan Şey..!

Neye ihtiyacın var..!!
Neye ihtiyacın var..!!

1. Parçacık Fotonu

2. MPL3115A2

3. I²C Kablosu

4. Parçacık Fotonu için I²C Kalkanı

Adım 2: Bağlantılar:

Bağlantılar
Bağlantılar
Bağlantılar
Bağlantılar
Bağlantılar
Bağlantılar
Bağlantılar
Bağlantılar

Parçacık fotonu için bir I2C kalkanı alın ve yavaşça parçacık fotonun pimlerinin üzerine itin.

Ardından I2C kablosunun bir ucunu MPL3115A2 sensörüne ve diğer ucunu I2C blendajına bağlayın.

Bağlantılar yukarıdaki resimde gösterilmiştir.

Adım 3: Kod:

Kod
Kod

MPL3115A2 için parçacık kodu Github deposu-DCUBE Mağazamızdan indirilebilir.

Bağlantı burada.

Partikül kodu için application.h ve spark_wiring_i2c.h olan iki kitaplık kullandık. Sensörle I2C iletişimini kolaylaştırmak için Spark_wiring_i2c kitaplığı gereklidir.

Kodu buradan da kopyalayabilirsiniz, aşağıdaki şekilde verilmiştir:

// Özgür irade lisansıyla dağıtılır.

// İlişkili çalışmalarının lisanslarına uyması koşuluyla, istediğiniz şekilde, kârlı veya ücretsiz olarak kullanın.

// MPL3115A2

// Bu kod, MPL3115A2_I2CS I2C Mini Modülü ile çalışmak üzere tasarlanmıştır.

#Dahil etmek

#Dahil etmek

// MPL3115A2 I2C adresi 0x60(96)

#define Addr 0x60

float cTemp = 0.0, fTemp = 0.0, basınç = 0.0, yükseklik = 0.0;

int temp = 0, tYükseklik = 0;uzun pres = 0;

geçersiz kurulum()

{

// Değişken ayarla

Particle.variable("i2ccihaz", "MPL3115A2");

Particle.variable("cTemp",cTemp);

Particle.variable("basınç", basınç);

Particle.variable("rakım", yükseklik);

// I2C iletişimini başlat

Wire.begin();

// Seri İletişimi Başlat, baud hızını ayarla = 9600

Seri.başla(9600);

// I2C iletimini başlat

Wire.beginTransmission(Adr);

// Kontrol kaydı seç

Wire.write(0x26);

// Aktif mod, OSR = 128, altimetre modu

Wire.write(0xB9);

// I2C iletimini durdur

Wire.endTransmission();

// I2C iletimini başlat

Wire.beginTransmission(Adr);

// Veri yapılandırma kaydını seç

Wire.write(0x13);

// Rakım, basınç, sıcaklık için veri hazır olayı etkinleştirildi

Wire.write(0x07);

// I2C iletimini durdur

Wire.endTransmission();

gecikme(300);

}

boşluk döngüsü()

{

imzasız int veri[6];

// I2C iletimini başlat

Wire.beginTransmission(Adr);

// Kontrol kaydı seç

Wire.write(0x26);

// Aktif mod, OSR = 128, altimetre modu

Wire.write(0xB9);

// I2C iletimini durdur

Wire.endTransmission();

gecikme(1000);

// I2C iletimini başlat

Wire.beginTransmission(Adr);

// Veri kaydını seç

Wire.write(0x00);

// I2C iletimini durdur

Wire.endTransmission();

// 6 bayt veri iste

Wire.requestFrom(Adr, 6);

// 0x00(00) adresinden 6 bayt veri oku

// durum, tHeight msb1, tHeight msb, tHeight lsb, temp msb, temp lsb

if(Wire.available() == 6)

{

data[0] = Wire.read();

data[1] = Wire.read();

data[2] = Wire.read();

veri[3] = Wire.read();

veri[4] = Wire.read();

veri[5] = Wire.read();

}

// Veriyi 20 bit'e çevir

Yükseklik = ((((uzun)veri[1] * (uzun)65536) + (veri[2] * 256) + (veri[3] & 0xF0)) / 16);

temp = ((veri[4] * 256) + (veri[5] & 0xF0)) / 16;

yükseklik = tYükseklik / 16.0;

cTemp = (sıcaklık / 16.0);

fTemp = cTemp * 1.8 + 32;

// I2C iletimini başlat

Wire.beginTransmission(Adr);

// Kontrol kaydı seç

Wire.write(0x26);

// Aktif mod, OSR = 128, barometre modu

Wire.write(0x39);

// I2C iletimini durdur

Wire.endTransmission();

// I2C iletimini başlat

Wire.beginTransmission(Adr);

// Veri kaydını seç

Wire.write(0x00);

// I2C iletimini durdur

Wire.endTransmission();

gecikme(1000);

// 4 bayt veri iste

Wire.requestFrom(Adr, 4);

// 4 bayt veri oku

// durum, msb1'e bas, msb'ye bas, lsb'ye bas

if(Wire.available() == 4)

{

data[0] = Wire.read();

data[1] = Wire.read();

data[2] = Wire.read();

veri[3] = Wire.read();

}

// Veriyi 20 bit'e çevir

pres = (((uzun)veri[1] * (uzun)65536) + (veri[2] * 256) + (veri[3] & 0xF0)) / 16;

basınç = (basınç / 4.0) / 1000.0;

// Gösterge tablosuna veri çıkışı

Particle.publish("Yükseklik:", String(yükseklik));

Particle.publish("Basınç:", String(basınç));

Particle.publish("Santigrat Olarak Sıcaklık:", String(cTemp));

Particle.publish("Sıcaklık Fahrenhayt Olarak:", String(fTemp));

gecikme(1000);

}

Adım 4: Uygulamalar:

MPL3115A2'nin çeşitli uygulamaları arasında Yüksek Doğruluk Altimetri, Akıllı Telefonlar/Tabletler, Kişisel Elektronik Altimetri vb. bulunur. Ayrıca GPS Ölü Hesaplama, Acil Servisler için GPS Geliştirme, Harita Yardımı, Navigasyon ve Hava İstasyonu Ekipmanlarına da dahil edilebilir.

Önerilen: