Mundarija:

Arduino Nano - MPL3115A2 nozik altimetrli sensorli qo'llanma: 4 qadam
Arduino Nano - MPL3115A2 nozik altimetrli sensorli qo'llanma: 4 qadam

Video: Arduino Nano - MPL3115A2 nozik altimetrli sensorli qo'llanma: 4 qadam

Video: Arduino Nano - MPL3115A2 nozik altimetrli sensorli qo'llanma: 4 qadam
Video: Arduino Nano - MPL3115A2 Precision Altimeter Sensor Tutorial 2024, Noyabr
Anonim
Image
Image

MPL3115A2 aniq bosim/balandlik va harorat ma'lumotlarini taqdim etish uchun I2C interfeysli MEMS bosim sensori bilan ishlaydi. Sensor chiqishlari yuqori aniqlikdagi 24 bitli ADC yordamida raqamlashtirilgan. Ichki ishlov berish MCU tizimidagi kompensatsiya vazifalarini olib tashlaydi. U 0,05 kPa o'zgarishini aniqlay oladi, bu balandlikning 0,3 m o'zgarishiga teng. Mana, Arduino Nano bilan uning namoyishi.

1 -qadam: Sizga nima kerak.. !

Sizga nima kerak.. !!
Sizga nima kerak.. !!

1. Arduino Nano

2. MPL3115A2

3. I²C kabeli

4. Arduino Nano uchun I²C qalqoni

2 -qadam: Ulanishlar:

Ulanishlar
Ulanishlar
Ulanishlar
Ulanishlar
Ulanishlar
Ulanishlar
Ulanishlar
Ulanishlar

Arduino Nano uchun I2C qalqonini oling va uni muloyimlik bilan Nano pinlariga suring.

Keyin I2C kabelining bir uchini MPL3115A2 sensoriga, ikkinchi uchini esa I2C ekraniga ulang.

Ulanishlar yuqoridagi rasmda ko'rsatilgan.

3 -qadam: Kod:

Kod
Kod

MPL3115A2 uchun arduino kodini bizning github omboridan-DCUBE do'konidan yuklab olish mumkin.

Mana shu havola:

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

Sensorning Arduino platasi bilan I2c aloqasini osonlashtirish uchun biz Wire.h kutubxonasini o'z ichiga olamiz.

Siz bu erdan kodni nusxalashingiz mumkin, u quyidagicha berilgan:

// Ixtiyoriy litsenziya bilan tarqatilgan.

// Agar xohlasangiz, foyda yoki tekin ishlating, agar u tegishli asarlar litsenziyalariga mos kelsa.

// MPL3115A2

// Bu kod MPL3115A2_I2CS I2C Mini moduli bilan ishlash uchun mo'ljallangan

#qo'shing

// MPL3115A2 I2C manzili - 0x60 (96)

#aniqlang Addr 0x60

bo'sh o'rnatish ()

{

// I2C aloqasini boshlang

Wire.begin ();

// Serial aloqani ishga tushiring, bod tezligi = 9600

Serial.begin (9600);

// I2C uzatishni boshlang

Wire.beginTransmission (Addr);

// Boshqarish registrini tanlang

Wire.write (0x26);

// Faol rejim, OSR = 128, altimetr rejimi

Wire.write (0xB9);

// I2C uzatishni to'xtating

Wire.endTransmission ();

// I2C uzatishni boshlang

Wire.beginTransmission (Addr);

// Ma'lumot konfiguratsiyasi registrini tanlang

Wire.write (0x13);

// Ma'lumot tayyor hodisasi balandlik, bosim, harorat uchun yoqilgan

Wire.write (0x07);

// I2C uzatishni to'xtating

Wire.endTransmission ();

kechikish (300);

}

bo'sh halqa ()

{

imzosiz int ma'lumotlari [6];

// I2C uzatishni boshlang

Wire.beginTransmission (Addr);

// Boshqarish registrini tanlang

Wire.write (0x26);

// Faol rejim, OSR = 128, altimetr rejimi

Wire.write (0xB9);

// I2C uzatishni to'xtating

Wire.endTransmission ();

kechikish (1000);

// I2C uzatishni boshlang

Wire.beginTransmission (Addr);

// Ma'lumotlar reestrini tanlang

Wire.write (0x00);

// I2C uzatishni to'xtating

Wire.endTransmission ();

// 6 bayt ma'lumotni so'rang

Wire.requestFrom (Addr, 6);

// 0x00 (00) manzilidan 6 bayt ma'lumotni o'qing

// status, tHeight msb1, tHeight msb, tHeight lsb, temp msb, temp lsb

agar (Wire.available () == 6)

{

ma'lumotlar [0] = Wire.read ();

ma'lumotlar [1] = Wire.read ();

ma'lumotlar [2] = Wire.read ();

ma'lumotlar [3] = Wire.read ();

ma'lumotlar [4] = Wire.read ();

ma'lumotlar [5] = Wire.read ();

}

// Ma'lumotni 20 bitga aylantiring

int tHeight = (((uzun) (ma'lumotlar [1] * (uzun) 65536) + (ma'lumotlar [2] * 256) + (ma'lumotlar [3] & 0xF0)) / 16);

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

suzuvchi balandligi = tHeight / 16.0;

float cTemp = (temp / 16.0);

float fTemp = cTemp * 1.8 + 32;

// I2C uzatishni boshlang

Wire.beginTransmission (Addr);

// Boshqarish registrini tanlang

Wire.write (0x26);

// Faol rejim, OSR = 128, barometr rejimi

Wire.write (0x39);

// I2C uzatishni to'xtating

Wire.endTransmission ();

kechikish (1000);

// I2C uzatishni boshlang

Wire.beginTransmission (Addr);

// Ma'lumotlar reestrini tanlang

Wire.write (0x00);

// I2C uzatishni to'xtating

Wire.endTransmission ();

// 4 bayt ma'lumotni so'rang

Wire.requestFrom (Addr, 4);

// 4 bayt ma'lumotni o'qing

// status, pres msb1, pres msb, pres lsb

agar (Wire.available () == 4)

{

ma'lumotlar [0] = Wire.read ();

ma'lumotlar [1] = Wire.read ();

ma'lumotlar [2] = Wire.read ();

ma'lumotlar [3] = Wire.read ();

}

// Ma'lumotni 20 bitga aylantiring

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

suzuvchi bosim = (pres / 4.0) / 1000.0;

// Ma'lumotlarni ketma -ket monitorga chiqarish

Serial.print ("Balandlik:");

Ketma -ket chop etish (balandlik);

Serial.println ("m");

Serial.print ("Bosim:");

Ketma -ket chop etish (bosim);

Serial.println ("kPa");

Serial.print ("Selsiy bo'yicha harorat:");

Serial.print (cTemp);

Serial.println ("C");

Serial.print ("Farengeytdagi harorat:");

Serial.print (fTemp);

Serial.println ("F");

kechikish (500);

}

4 -qadam: Ilovalar:

MPL3115A2 -ning turli xil ilovalari yuqori aniqlikdagi altimetriya, smartfonlar/planshetlar, shaxsiy elektron altimetriya va boshqalarni o'z ichiga oladi. Shuningdek, u GPS o'lik hisob -kitobiga, favqulodda xizmatlar uchun GPS -ni takomillashtirishga, xaritaga yordam berishga, navigatsiyaga, shuningdek ob -havo stantsiyasi uskunasiga qo'shilishi mumkin.

Tavsiya: