2025 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2025-01-13 06:56
MPL3115A2, dəqiq təzyiq/yüksəklik və temperatur məlumatlarını təmin etmək üçün I2C interfeysi olan bir MEMS təzyiq sensoru istifadə edir. Sensor çıxışları yüksək keyfiyyətli 24 bitlik ADC ilə rəqəmsallaşdırılır. Daxili emal, kompensasiya vəzifələrini ana MCU sistemindən çıxarır. Hündürlükdə 0.3m dəyişikliyə bərabər olan yalnız 0.05 kPa dəyişikliyi aşkar edə bilir. İşdə Particle Photon ilə nümayişidir.
Addım 1: Nə Lazımdır..
1. Foton hissəcikləri
2. MPL3115A2
3. I²C Kabel
4. Partikül Foton üçün I²C Qalxanı
Addım 2: Bağlantılar:
Hissəcik fotonu üçün bir I2C qalxanı götürün və zərrəcik foton sancaqlarının üzərinə itələyin.
Sonra I2C kabelinin bir ucunu MPL3115A2 sensoruna, digər ucunu isə I2C ekranına bağlayın.
Bağlantılar yuxarıdakı şəkildə göstərilmişdir.
Addım 3: Kod:
MPL3115A2 üçün hissəcik kodunu Github depomuzdan yükləyə bilərsiniz-DCUBE Mağazası.
İşdə link.
Hissəcik kodu üçün application.h və spark_wiring_i2c.h olan iki kitabxanadan istifadə etdik. Sensorla I2C əlaqəsini asanlaşdırmaq üçün Spark_wiring_i2c kitabxanası lazımdır.
Kodu buradan da kopyalaya bilərsiniz, belə verilir:
// Azad iradə lisenziyası ilə paylanmışdır.
// İstənilən şəkildə, mənfəət və ya pulsuz istifadə edin, əlaqəli əsərlərinin lisenziyalarına uyğun gəlir.
// MPL3115A2
// Bu kod MPL3115A2_I2CS I2C Mini Modulu ilə işləmək üçün hazırlanmışdır
#daxil edin
#daxil edin
// MPL3115A2 I2C ünvanı 0x60 (96)
#Addr 0x60
float cTemp = 0.0, fTemp = 0.0, təzyiq = 0.0, yüksəklik = 0.0;
int temp = 0, tHeight = 0; uzun pres = 0;
boş quraşdırma ()
{
// Dəyişən təyin edin
Particle.variable ("i2cdevice", "MPL3115A2");
Particle.variable ("cTemp", cTemp);
Hissəcik.dəyişən ("təzyiq", təzyiq);
Hissəcik.dəyişən ("yüksəklik", yüksəklik);
// I2C ünsiyyətini işə salın
Wire.begin ();
// Serial Rabitəni Başlatın, baud dərəcəsini = 9600 olaraq təyin edin
Serial.begin (9600);
// I2C ötürülməsinə başlayın
Wire.beginTransmission (Addr);
// Nəzarət reyestrini seçin
Wire.write (0x26);
// Aktiv rejim, OSR = 128, altimetr rejimi
Wire.write (0xB9);
// I2C ötürülməsini dayandırın
Wire.endTransmission ();
// I2C ötürülməsinə başlayın
Wire.beginTransmission (Addr);
// Məlumat konfiqurasiya qeydini seçin
Wire.write (0x13);
// Hündürlük, təzyiq, temperatur üçün məlumatlara hazır hadisə aktivdir
Wire.write (0x07);
// I2C ötürülməsini dayandırın
Wire.endTransmission ();
gecikmə (300);
}
boşluq döngəsi ()
{
imzasız int məlumatları [6];
// I2C ötürülməsinə başlayın
Wire.beginTransmission (Addr);
// Nəzarət reyestrini seçin
Wire.write (0x26);
// Aktiv rejim, OSR = 128, altimetr rejimi
Wire.write (0xB9);
// I2C ötürülməsini dayandırın
Wire.endTransmission ();
gecikmə (1000);
// I2C ötürülməsinə başlayın
Wire.beginTransmission (Addr);
// Məlumat qeydini seçin
Wire.write (0x00);
// I2C ötürülməsini dayandırın
Wire.endTransmission ();
// 6 bayt məlumat tələb edin
Wire.requestFrom (Addr, 6);
// 0x00 (00) ünvanından 6 bayt məlumat oxuyun
// status, tHeight msb1, tHeight msb, tHeight lsb, temp msb, temp lsb
əgər (Tel.available () == 6)
{
data [0] = Wire.read ();
data [1] = Wire.read ();
data [2] = Wire.read ();
data [3] = Wire.read ();
data [4] = Wire.read ();
data [5] = Wire.read ();
}
// Məlumatı 20 bitə çevirin
tHeight = ((((uzun) məlumatlar [1] * (uzun) 65536) + (məlumatlar [2] * 256) + (məlumatlar [3] & 0xF0)) / 16);
temp = ((data [4] * 256) + (data [5] & 0xF0)) / 16;
hündürlük = tHeight / 16.0;
cTemp = (temp / 16.0);
fTemp = cTemp * 1.8 + 32;
// I2C ötürülməsinə başlayın
Wire.beginTransmission (Addr);
// Nəzarət reyestrini seçin
Wire.write (0x26);
// Aktiv rejim, OSR = 128, barometr rejimi
Wire.write (0x39);
// I2C ötürülməsini dayandırın
Wire.endTransmission ();
// I2C ötürülməsinə başlayın
Wire.beginTransmission (Addr);
// Məlumat qeydini seçin
Wire.write (0x00);
// I2C ötürülməsini dayandırın
Wire.endTransmission ();
gecikmə (1000);
// 4 bayt məlumat tələb edin
Wire.requestFrom (Addr, 4);
// 4 bayt məlumat oxuyun
// status, pres msb1, pres msb, pres lsb
əgər (Tel.available () == 4)
{
data [0] = Wire.read ();
data [1] = Wire.read ();
data [2] = Wire.read ();
data [3] = Wire.read ();
}
// Məlumatı 20 bitə çevirin
pres = (((uzun) məlumatlar [1] * (uzun) 65536) + (məlumatlar [2] * 256) + (məlumatlar [3] & 0xF0)) / 16;
təzyiq = (pres / 4.0) / 1000.0;
// Göstərişlər panelinə məlumat çıxarın
Particle.publish ("Yüksəklik:", String (yüksəklik));
Particle.publish ("Təzyiq:", String (təzyiq));
Particle.publish ("Selsi İstiliyi:", String (cTemp));
Particle.publish ("Fahrenheitdəki temperatur:", String (fTemp));
gecikmə (1000);
}
Addım 4: Tətbiqlər:
MPL3115A2 -nin müxtəlif tətbiqlərinə Yüksək Dəqiqlik Altimetriyası, Smartfonlar/Tabletlər, Fərdi Elektronik Altimetriya və s. Daxildir. O, həmçinin GPS Ölü Hesablama, Təcili Xidmətlər üçün GPS Artırması, Xəritə Köməkçisi, Naviqasiya və Hava İstismarı Avadanlıqlarına daxil edilə bilər.