Mündəricat:

Arduino Nano - MPL3115A2 Həssas Altimetr Sensoru Dərsliyi: 4 addım
Arduino Nano - MPL3115A2 Həssas Altimetr Sensoru Dərsliyi: 4 addım

Video: Arduino Nano - MPL3115A2 Həssas Altimetr Sensoru Dərsliyi: 4 addım

Video: Arduino Nano - MPL3115A2 Həssas Altimetr Sensoru Dərsliyi: 4 addım
Video: Arduino Nano - MPL3115A2 Precision Altimeter Sensor Tutorial 2024, Iyul
Anonim
Image
Image

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ə Arduino Nano ilə nümayişidir.

Addım 1: Nə Lazımdır..

Nə Lazımdır.. !!
Nə Lazımdır.. !!

1. Arduino Nano

2. MPL3115A2

3. I²C Kabel

4. Arduino Nano üçün I²C Shield

Addım 2: Bağlantılar:

Əlaqələr
Əlaqələr
Əlaqələr
Əlaqələr
Əlaqələr
Əlaqələr
Əlaqələr
Əlaqələr

Arduino Nano üçün bir I2C qalxanı götürün və Nanonun sancaqlarından yumşaq bir şəkildə 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:

Kod
Kod

MPL3115A2 üçün arduino kodu github depomuzdan yükləyə bilərsiniz-DCUBE Mağazası.

İşdə bunun üçün bağlantı:

github.com/DcubeTechVentures/MPL3115A2/blob/master/Arduino/MPL3115A2.ino

Sensorun Arduino lövhəsi ilə I2c əlaqəsini asanlaşdırmaq üçün Wire.h kitabxanasına daxildir.

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

// MPL3115A2 I2C ünvanı 0x60 (96)

#Addr 0x60

boş quraşdırma ()

{

// 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

int tHeight = (((uzun) (məlumat [1] * (uzun) 65536) + (məlumat [2] * 256) + (məlumat [3] & 0xF0)) / 16);

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

üzmə hündürlüyü = tHeight / 16.0;

float cTemp = (temp / 16.0);

float 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 ();

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 ();

// 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

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

üzən təzyiq = (pres / 4.0) / 1000.0;

// Məlumatların serial monitora çıxarılması

Serial.print ("Hündürlük:");

Serial. çap (yüksəklik);

Serial.println ("m");

Serial.print ("Təzyiq:");

Serial. çap (təzyiq);

Serial.println ("kPa");

Serial.print ("Selsi temperaturu:");

Serial.print (cTemp);

Serial.println ("C");

Serial.print ("Fahrenheitdəki temperatur:");

Serial.print (fTemp);

Serial.println ("F");

gecikmə (500);

}

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.

Tövsiyə: