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

Particle Photon - MPL3115A2 Precision Altimeter Sensor Tutorial: 4 Steps
Particle Photon - MPL3115A2 Precision Altimeter Sensor Tutorial: 4 Steps

Video: Particle Photon - MPL3115A2 Precision Altimeter Sensor Tutorial: 4 Steps

Video: Particle Photon - MPL3115A2 Precision Altimeter Sensor Tutorial: 4 Steps
Video: Particle Photon - 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 վահան մասնիկի ֆոտոնի համար

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

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

Վերցրեք I2C վահանը մասնիկի ֆոտոնի համար և նրբորեն մղեք այն մասնիկի ֆոտոնի կապանքների վրա:

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

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

Քայլ 3: Կոդ

Կոդ
Կոդ

MPL3115A2- ի մասնիկների ծածկագիրը կարելի է ներբեռնել մեր Github պահոցից-DCUBE Store:

Ահա հղումը:

Մասնիկների կոդի համար մենք օգտագործել ենք երկու գրադարան, որոնք են application.h և spark_wiring_i2c.h: Spark_wiring_i2c գրադարանը պահանջվում է սենսորի հետ I2C հաղորդակցությունը հեշտացնելու համար:

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

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

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

// MPL3115A2

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

#ներառում

#ներառում

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

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

բոց cTemp = 0.0, fTemp = 0.0, ճնշում = 0.0, բարձրություն = 0.0;

int temp = 0, tHeight = 0; երկար pres = 0;

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

{

// Սահմանել փոփոխական

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

Particle.variable («cTemp», cTemp);

Մասնիկ. Փոփոխական («ճնշում», ճնշում);

Մասնիկ. Փոփոխական («բարձրություն», բարձրություն);

// Նախնականացնել 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 բիթ

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

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

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

cTemp = (ջերմաստիճան / 16.0);

fTemp = cTemp * 1.8 + 32;

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

Wire.beginTransmission (Addr);

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

Wire.write (0x26);

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

Wire.write (0x39);

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

Wire.endTransmission ();

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

Wire.beginTransmission (Addr);

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

Wire.write (0x00);

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

Wire.endTransmission ();

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

// Պահանջել 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;

// Տվյալների մուտքագրում վահանակ

Particle.publish ("Բարձրություն.", Լար (բարձրություն));

Particle.publish ("ureնշում.", Լար (ճնշում));

Particle.publish («elsերմաստիճանը Celsius:», լարային (cTemp));

Particle.publish («ahերմաստիճանը Ֆարենհայտում.», Լարային (fTemp));

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

}

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

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

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