Բովանդակություն:

Arduino Nano - MPL3115A2 Precision Altimeter Sensor Tutorial: 4 Step
Arduino Nano - MPL3115A2 Precision Altimeter Sensor Tutorial: 4 Step

Video: Arduino Nano - MPL3115A2 Precision Altimeter Sensor Tutorial: 4 Step

Video: Arduino Nano - MPL3115A2 Precision Altimeter Sensor Tutorial: 4 Step
Video: Arduino Nano - MPL3115A2 Precision Altimeter Sensor Tutorial 2024, Հուլիսի
Anonim
Image
Image

MPL3115A2- ն օգտագործում է MEMS ճնշման տվիչ ՝ I2C ինտերֆեյսով ՝ ճշգրիտ ճնշման/բարձրության և ջերմաստիճանի տվյալներ ապահովելու համար: Սենսորային ելքերը թվայնացվում են բարձր լուծման 24-բիթանոց ADC- ով: Ներքին մշակումը հեռացնում է փոխհատուցման առաջադրանքները ընդունող MCU համակարգից: Այն ունակ է հայտնաբերել միայն 0.05 կՊա -ի փոփոխություն, ինչը հավասար է 0.3 մ բարձրության փոփոխության: Ահա նրա ցուցադրումը Արդուինո Նանոյի հետ:

Քայլ 1: Այն, ինչ ձեզ հարկավոր է..

Այն, ինչ ձեզ պետք է.. !!
Այն, ինչ ձեզ պետք է.. !!

1. Արդուինո Նանո

2. MPL3115A2

3. I²C մալուխ

4. I²C վահան Arduino Nano- ի համար

Քայլ 2: Միացումներ

Միացումներ
Միացումներ
Միացումներ
Միացումներ
Միացումներ
Միացումներ
Միացումներ
Միացումներ

Վերցրեք I2C վահան Arduino Nano- ի համար և նրբորեն մղեք այն Նանոյի կապանքների վրա:

Այնուհետև I2C մալուխի մի ծայրը միացրեք MPL3115A2 սենսորին, իսկ մյուս ծայրը ՝ I2C վահանին:

Կապերը ցուցադրվում են վերևի նկարում:

Քայլ 3: Կոդ

Կոդ
Կոդ

MPL3115A2- ի arduino կոդը կարելի է ներբեռնել մեր github պահոցից-DCUBE Store:

Ահա նույնի հղումը.

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

Մենք ներառում ենք Wire.h գրադարանը ՝ սենսորի I2c հաղորդակցումը Arduino տախտակի հետ հեշտացնելու համար:

Այստեղից կարող եք նաև պատճենել կոդը, այն տրվում է հետևյալ կերպ.

// Տարածված է ազատ կամքի լիցենզիայով:

// Օգտագործեք այն ինչպես ցանկանում եք, շահույթ կամ անվճար, պայմանով, որ այն տեղավորվում է դրա հետ կապված աշխատանքների լիցենզիաներում:

// MPL3115A2

// Այս կոդը նախատեսված է MPL3115A2_I2CS I2C մինի մոդուլի հետ աշխատելու համար

#ներառում

// MPL3115A2 I2C հասցեն ՝ 0x60 (96)

#սահմանեք Addr 0x60

դատարկ կարգավորում ()

{

// Նախնականացնել I2C հաղորդակցությունը

Wire.begin ();

// Սկզբնականացնել սերիական հաղորդակցությունը, սահմանել բաուդ արագություն = 9600

Serial.begin (9600);

// Սկսել I2C փոխանցումը

Wire.beginTransmission (Addr);

// Ընտրեք հսկիչ գրանցամատյան

Wire.write (0x26);

// Ակտիվ ռեժիմ, OSR = 128, բարձրաչափի ռեժիմ

Wire.write (0xB9);

// Դադարեցնել I2C փոխանցումը

Wire.endTransmission ();

// Սկսել I2C փոխանցումը

Wire.beginTransmission (Addr);

// Ընտրեք տվյալների կազմաձևման գրանցամատյան

Wire.write (0x13);

// Տվյալների պատրաստ իրադարձությունը միացված է բարձրության, ճնշման, ջերմաստիճանի համար

Wire.write (0x07);

// Դադարեցնել I2C փոխանցումը

Wire.endTransmission ();

ուշացում (300);

}

դատարկ շրջան ()

{

անստորագիր int տվյալներ [6];

// Սկսել I2C փոխանցումը

Wire.beginTransmission (Addr);

// Ընտրեք հսկիչ գրանցամատյան

Wire.write (0x26);

// Ակտիվ ռեժիմ, OSR = 128, բարձրաչափի ռեժիմ

Wire.write (0xB9);

// Դադարեցնել I2C փոխանցումը

Wire.endTransmission ();

ուշացում (1000);

// Սկսել I2C փոխանցումը

Wire.beginTransmission (Addr);

// Ընտրեք տվյալների գրանցամատյան

Wire.write (0x00);

// Դադարեցնել I2C փոխանցումը

Wire.endTransmission ();

// Պահանջել 6 բայթ տվյալներ

Հաղորդալար. Խնդրում ենք (Addr, 6);

// Կարդացեք 6 բայթ տվյալներ 0x00 հասցեից (00)

// կարգավիճակ, tHeight msb1, tHeight msb, tHeight lsb, temp msb, temp lsb

եթե (Wire.available () == 6)

{

տվյալներ [0] = Wire.read ();

տվյալներ [1] = Wire.read ();

տվյալներ [2] = Wire.read ();

տվյալներ [3] = Wire.read ();

տվյալներ [4] = Wire.read ();

տվյալներ [5] = Wire.read ();

}

// Տեղափոխեք տվյալները 20 բիթ

int tHeight = (((երկար) (տվյալներ [1] * (երկար) 65536) + (տվյալներ [2] * 256) + (տվյալներ [3] & 0xF0)) / 16);

int temp = ((տվյալները [4] * 256) + (տվյալները [5] & 0xF0)) / 16;

բոց բարձրություն = t Բարձրություն / 16.0;

float cTemp = (temp / 16.0);

float fTemp = cTemp * 1.8 + 32;

// Սկսել I2C փոխանցումը

Wire.beginTransmission (Addr);

// Ընտրեք հսկիչ գրանցամատյան

Wire.write (0x26);

// Ակտիվ ռեժիմ, OSR = 128, բարոմետր ռեժիմ

Wire.write (0x39);

// Դադարեցնել I2C փոխանցումը

Wire.endTransmission ();

ուշացում (1000);

// Սկսել I2C փոխանցումը

Wire.beginTransmission (Addr);

// Ընտրեք տվյալների գրանցամատյան

Wire.write (0x00);

// Դադարեցնել I2C փոխանցումը

Wire.endTransmission ();

// Պահանջել 4 բայթ տվյալներ

Մետաղալար. Խնդրում ենք (Addr, 4);

// Կարդացեք 4 բայթ տվյալներ

// կարգավիճակ, pres msb1, pres msb, pres lsb

եթե (Wire.available () == 4)

{

տվյալներ [0] = Wire.read ();

տվյալներ [1] = Wire.read ();

տվյալներ [2] = Wire.read ();

տվյալներ [3] = Wire.read ();

}

// Տվյալները փոխակերպեք 20 բիթ

երկար pres = (((երկար) տվյալներ [1] * (երկար) 65536) + (տվյալներ [2] * 256) + (տվյալներ [3] և 0xF0)) / 16;

լողացող ճնշում = (pres / 4.0) / 1000.0;

// Ելքային տվյալները սերիական մոնիտորին

Serial.print ("Բարձրություն:");

Serial.print (բարձրություն);

Serial.println («մ»);

Serial.print («Pressնշում.»);

Serial.print (ճնշում);

Serial.println ("kPa");

Serial.print ("Cերմաստիճանը Celsius:");

Serial.print (cTemp);

Serial.println ("C");

Serial.print («Fերմաստիճանը Ֆարենհայտում.»);

Serial.print (fTemp);

Serial.println ("F");

ուշացում (500);

}

Քայլ 4: Դիմումներ

MPL3115A2- ի տարբեր ծրագրեր ներառում են բարձր ճշգրտության բարձրաչափություն, սմարթֆոններ/պլանշետներ, անհատական էլեկտրոնիկայի բարձրաչափություն և այլն: Այն կարող է ներառվել նաև GPS Dead Reckoning, GPS Enhancement for Emergency Services, Map Assist, Navigation, ինչպես նաև Եղանակային կայանի սարքավորումներում:

Խորհուրդ ենք տալիս: