Innehållsförteckning:

Particle Photon - MPL3115A2 Precision Altimeter Sensor Handledning: 4 steg
Particle Photon - MPL3115A2 Precision Altimeter Sensor Handledning: 4 steg

Video: Particle Photon - MPL3115A2 Precision Altimeter Sensor Handledning: 4 steg

Video: Particle Photon - MPL3115A2 Precision Altimeter Sensor Handledning: 4 steg
Video: BeagleBone Black HP203B Precision Barometer & Altimeter Sensor 'C' Code Tutorial 2024, November
Anonim
Image
Image

MPL3115A2 använder en MEMS -trycksensor med ett I2C -gränssnitt för att ge exakta tryck/höjd- och temperaturdata. Sensorutgångarna digitaliseras med en högupplöst 24-bitars ADC. Intern behandling tar bort kompensationsuppgifter från värd -MCU -systemet. Den kan upptäcka en förändring på endast 0,05 kPa vilket motsvarar en höjdförändring på 0,3 m. Här är dess demonstration med partikelfoton.

Steg 1: Vad du behöver.. !

Vad du behöver..!!
Vad du behöver..!!

1. Partikelfoton

2. MPL3115A2

3. I²C -kabel

4. I²C -skärm för partikelfoton

Steg 2: Anslutningar:

Anslutningar
Anslutningar
Anslutningar
Anslutningar
Anslutningar
Anslutningar
Anslutningar
Anslutningar

Ta en I2C -skärm för partikelfoton och tryck försiktigt över stiften på partikelfoton.

Anslut sedan den ena änden av I2C -kabeln till MPL3115A2 -sensorn och den andra änden till I2C -skärmen.

Anslutningar visas på bilden ovan.

Steg 3: Kod:

Koda
Koda

Partikelkoden för MPL3115A2 kan laddas ner från vårt Github-arkiv-DCUBE Store.

Här är länken.

Vi har använt två bibliotek för partikelkod, som är application.h och spark_wiring_i2c.h. Spark_wiring_i2c -biblioteket krävs för att underlätta I2C -kommunikationen med sensorn.

Du kan också kopiera koden härifrån, den ges enligt följande:

// Distribueras med en fri vilja licens.

// Använd den hur du vill, vinst eller gratis, förutsatt att den passar i licensen för dess associerade verk.

// MPL3115A2

// Denna kod är utformad för att fungera med MPL3115A2_I2CS I2C Mini Module

#omfatta

#omfatta

// MPL3115A2 I2C -adressen är 0x60 (96)

#define Addr 0x60

float cTemp = 0,0, fTemp = 0,0, tryck = 0,0, höjd = 0,0;

int temp = 0, tHeight = 0; long pres = 0;

void setup ()

{

// Ange variabel

Partikelvariabel ("i2cdevice", "MPL3115A2");

Particle.variable ("cTemp", cTemp);

Partikel. Variabel ("tryck", tryck);

Partikel.variabel ("höjd", höjd);

// Initiera I2C -kommunikation

Wire.begin ();

// Initiera seriell kommunikation, ange överföringshastighet = 9600

Serial.begin (9600);

// Starta I2C -överföring

Wire.beginTransmission (Addr);

// Välj kontrollregister

Wire.write (0x26);

// Aktivt läge, OSR = 128, höjdmätarläge

Wire.write (0xB9);

// Stoppa I2C -överföring

Wire.endTransmission ();

// Starta I2C -överföring

Wire.beginTransmission (Addr);

// Välj datakonfigurationsregister

Wire.write (0x13);

// Dataklar händelse aktiverad för höjd, tryck, temperatur

Wire.write (0x07);

// Stoppa I2C -överföring

Wire.endTransmission ();

fördröjning (300);

}

void loop ()

{

osignerade int -data [6];

// Starta I2C -överföring

Wire.beginTransmission (Addr);

// Välj kontrollregister

Wire.write (0x26);

// Aktivt läge, OSR = 128, höjdmätarläge

Wire.write (0xB9);

// Stoppa I2C -överföring

Wire.endTransmission ();

fördröjning (1000);

// Starta I2C -överföring

Wire.beginTransmission (Addr);

// Välj dataregister

Wire.write (0x00);

// Stoppa I2C -överföring

Wire.endTransmission ();

// Begär 6 byte med data

Wire.requestFrom (Addr, 6);

// Läs 6 byte med data från adressen 0x00 (00)

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

om (Wire.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 ();

}

// Konvertera data till 20-bitar

tHöjd = ((((lång) data [1] * (lång) 65536) + (data [2] * 256) + (data [3] & 0xF0)) / 16);

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

höjd = tHöjd / 16,0;

cTemp = (temp / 16,0);

fTemp = cTemp * 1,8 + 32;

// Starta I2C -överföring

Wire.beginTransmission (Addr);

// Välj kontrollregister

Wire.write (0x26);

// Aktivt läge, OSR = 128, barometerläge

Wire.write (0x39);

// Stoppa I2C -överföring

Wire.endTransmission ();

// Starta I2C -överföring

Wire.beginTransmission (Addr);

// Välj dataregister

Wire.write (0x00);

// Stoppa I2C -överföring

Wire.endTransmission ();

fördröjning (1000);

// Begär 4 byte med data

Wire.requestFrom (Addr, 4);

// Läs 4 byte med data

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

om (Wire.available () == 4)

{

data [0] = Wire.read ();

data [1] = Wire.read ();

data [2] = Wire.read ();

data [3] = Wire.read ();

}

// Konvertera data till 20-bitar

pres = (((lång) data [1] * (lång) 65536) + (data [2] * 256) + (data [3] & 0xF0)) / 16;

tryck = (pres / 4,0) / 1000,0;

// Utdata till instrumentpanelen

Particle.publish ("Altitude:", String (altitude));

Particle.publish ("Pressure:", String (pressure));

Particle.publish ("Temperatur i Celsius:", String (cTemp));

Particle.publish ("Temperatur i Fahrenheit:", String (fTemp));

fördröjning (1000);

}

Steg 4: Ansökningar:

Olika tillämpningar av MPL3115A2 inkluderar hög noggrannhetsmätning, smartphones/surfplattor, personlig elektronisk höjdmätning etc. Det kan också införlivas med GPS Dead Reckoning, GPS -förbättring för räddningstjänster, kartassistans, navigering samt väderstationsutrustning.

Rekommenderad: