Indholdsfortegnelse:

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

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

Video: Particle Photon - MPL3115A2 Precision Altimeter Sensor Tutorial: 4 trin
Video: Zip Level 2000 - Elevation Equipment: Quick Overview 2024, November
Anonim
Image
Image

MPL3115A2 anvender en MEMS -trykføler med en I2C -grænseflade til at levere nøjagtige data om tryk/højde og temperatur. Sensorudgangene digitaliseres med en højopløselig 24-bit ADC. Intern behandling fjerner kompensationsopgaver fra værts -MCU -systemet. Det er i stand til at detektere en ændring på kun 0,05 kPa, hvilket svarer til en højdeændring på 0,3 m. Her er dens demonstration med Particle foton.

Trin 1: Hvad du har brug for..

Hvad du har brug for..!!
Hvad du har brug for..!!

1. Partikelfoton

2. MPL3115A2

3. I²C -kabel

4. I²C -skærm til partikelfoton

Trin 2: Forbindelser:

Tilslutninger
Tilslutninger
Tilslutninger
Tilslutninger
Tilslutninger
Tilslutninger
Tilslutninger
Tilslutninger

Tag et I2C -skjold for partikelfoton og skub det forsigtigt hen over stifterne af partikelfoton.

Tilslut derefter den ene ende af I2C -kablet til MPL3115A2 -sensoren og den anden ende til I2C -skærmen.

Forbindelser er vist på billedet ovenfor.

Trin 3: Kode:

Kode
Kode

Partikelkoden til MPL3115A2 kan downloades fra vores Github repository-DCUBE Store.

Her er linket.

Vi har brugt to biblioteker til partikelkode, som er application.h og spark_wiring_i2c.h. Spark_wiring_i2c bibliotek er påkrævet for at lette I2C -kommunikationen med sensoren.

Du kan også kopiere koden herfra, den er givet som følger:

// Distribueret med en fri vilje licens.

// Brug den, som du vil, profit eller gratis, forudsat at den passer ind i licenserne til de tilhørende værker.

// MPL3115A2

// Denne kode er designet til at fungere med MPL3115A2_I2CS I2C Mini Module

#omfatte

#omfatte

// MPL3115A2 I2C -adressen er 0x60 (96)

#define Addr 0x60

flyde cTemp = 0,0, fTemp = 0,0, tryk = 0,0, højde = 0,0;

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

ugyldig opsætning ()

{

// Indstil variabel

Partikel.variabel ("i2cdevice", "MPL3115A2");

Particle.variable ("cTemp", cTemp);

Partikel.variabel ("tryk", tryk);

Particle.variable ("højde", højde);

// Initialiser I2C -kommunikation

Wire.begin ();

// Initialiser seriel kommunikation, indstil baudhastighed = 9600

Serial.begin (9600);

// Start I2C -transmission

Wire.beginTransmission (Addr);

// Vælg kontrolregister

Wire.write (0x26);

// Aktiv tilstand, OSR = 128, højdemåler -tilstand

Wire.write (0xB9);

// Stop I2C -transmission

Wire.endTransmission ();

// Start I2C -transmission

Wire.beginTransmission (Addr);

// Vælg datakonfigurationsregister

Wire.write (0x13);

// Dataklar begivenhed aktiveret for højde, tryk, temperatur

Wire.write (0x07);

// Stop I2C -transmission

Wire.endTransmission ();

forsinkelse (300);

}

hulrum ()

{

usignerede int -data [6];

// Start I2C -transmission

Wire.beginTransmission (Addr);

// Vælg kontrolregister

Wire.write (0x26);

// Aktiv tilstand, OSR = 128, højdemåler -tilstand

Wire.write (0xB9);

// Stop I2C -transmission

Wire.endTransmission ();

forsinkelse (1000);

// Start I2C -transmission

Wire.beginTransmission (Addr);

// Vælg dataregister

Wire.write (0x00);

// Stop I2C -transmission

Wire.endTransmission ();

// Anmod om 6 bytes data

Wire.requestFrom (Addr, 6);

// Læs 6 bytes data fra adresse 0x00 (00)

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

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

}

// Konverter dataene til 20-bit

tHeight = ((((lange) data [1] * (lang) 65536) + (data [2] * 256) + (data [3] & 0xF0)) / 16);

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

højde = tHøjde / 16,0;

cTemp = (temp / 16,0);

fTemp = cTemp * 1,8 + 32;

// Start I2C -transmission

Wire.beginTransmission (Addr);

// Vælg kontrolregister

Wire.write (0x26);

// Aktiv tilstand, OSR = 128, barometer -tilstand

Wire.write (0x39);

// Stop I2C -transmission

Wire.endTransmission ();

// Start I2C -transmission

Wire.beginTransmission (Addr);

// Vælg dataregister

Wire.write (0x00);

// Stop I2C -transmission

Wire.endTransmission ();

forsinkelse (1000);

// Anmod om 4 bytes data

Wire.requestFrom (Addr, 4);

// Læs 4 bytes data

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

hvis (Wire.available () == 4)

{

data [0] = Wire.read ();

data [1] = Wire.read ();

data [2] = Wire.read ();

data [3] = Wire.read ();

}

// Konverter dataene til 20-bit

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

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

// Output data til dashboard

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

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

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

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

forsinkelse (1000);

}

Trin 4: Ansøgninger:

Forskellige applikationer af MPL3115A2 inkluderer høj nøjagtigheds -altimetri, smartphones/tablets, personlig elektronik -altimetri osv. Det kan også inkorporeres i GPS Dead Reckoning, GPS -forbedring til nødservice, Map Assist, Navigation samt vejrstationsudstyr.

Anbefalede: