Innholdsfortegnelse:

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, November
Anonim
Image
Image

MPL3115A2 bruker en MEMS -trykksensor med et I2C -grensesnitt for å gi nøyaktige trykk-/høyde- og temperaturdata. Sensorutgangene digitaliseres med en høyoppløselig 24-biters ADC. Intern behandling fjerner kompensasjonsoppgaver fra verts -MCU -systemet. Den er i stand til å oppdage en endring på bare 0,05 kPa som tilsvarer en endring i høyde på 0,3 m. Her er demonstrasjonen med Particle foton.

Trinn 1: Hva du trenger..

Hva trenger du..!!
Hva trenger du..!!

1. Partikkelfoton

2. MPL3115A2

3. I²C -kabel

4. I²C -skjold for partikkelfoton

Trinn 2: Tilkoblinger:

Tilkoblinger
Tilkoblinger
Tilkoblinger
Tilkoblinger
Tilkoblinger
Tilkoblinger
Tilkoblinger
Tilkoblinger

Ta et I2C -skjold for partikkelfoton og skyv det forsiktig over pinnene til partikkelfoton.

Koble deretter den ene enden av I2C -kabelen til MPL3115A2 -sensoren og den andre enden til I2C -skjoldet.

Tilkoblinger er vist på bildet ovenfor.

Trinn 3: Kode:

Kode
Kode

Partikkelkoden for MPL3115A2 kan lastes ned fra vår Github repository-DCUBE Store.

Her er lenken.

Vi har brukt to biblioteker for partikkelkode, som er application.h og spark_wiring_i2c.h. Spark_wiring_i2c -biblioteket er nødvendig for å lette I2C -kommunikasjonen med sensoren.

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

// Distribuert med en fri viljelisens.

// Bruk den slik du vil, profitt eller gratis, forutsatt at den passer inn i lisensene til de tilhørende verkene.

// MPL3115A2

// Denne koden er designet for å fungere med MPL3115A2_I2CS I2C Mini Module

#inkludere

#inkludere

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

#define Addr 0x60

flyte cTemp = 0,0, fTemp = 0,0, trykk = 0,0, høyde = 0,0;

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

ugyldig oppsett ()

{

// Angi variabel

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

Particle.variable ("cTemp", cTemp);

Partikkel.variabel ("trykk", trykk);

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

// Initialiser I2C -kommunikasjon

Wire.begin ();

// Initialize Serial Communication, set baud rate = 9600

Serial.begin (9600);

// Start I2C -overføring

Wire.beginTransmission (Addr);

// Velg kontrollregister

Wire.write (0x26);

// Aktiv modus, OSR = 128, høydemåler modus

Wire.write (0xB9);

// Stopp I2C -overføring

Wire.endTransmission ();

// Start I2C -overføring

Wire.beginTransmission (Addr);

// Velg datakonfigurasjonsregister

Wire.write (0x13);

// Dataklar hendelse aktivert for høyde, trykk, temperatur

Wire.write (0x07);

// Stopp I2C -overføring

Wire.endTransmission ();

forsinkelse (300);

}

hulrom ()

{

usignerte int -data [6];

// Start I2C -overføring

Wire.beginTransmission (Addr);

// Velg kontrollregister

Wire.write (0x26);

// Aktiv modus, OSR = 128, høydemåler modus

Wire.write (0xB9);

// Stopp I2C -overføring

Wire.endTransmission ();

forsinkelse (1000);

// Start I2C -overføring

Wire.beginTransmission (Addr);

// Velg dataregister

Wire.write (0x00);

// Stopp I2C -overføring

Wire.endTransmission ();

// Be om 6 byte med data

Wire.requestFrom (Addr, 6);

// Les 6 byte 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-bits

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

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

høyde = tHeight / 16,0;

cTemp = (temp / 16,0);

fTemp = cTemp * 1,8 + 32;

// Start I2C -overføring

Wire.beginTransmission (Addr);

// Velg kontrollregister

Wire.write (0x26);

// Aktiv modus, OSR = 128, barometer modus

Wire.write (0x39);

// Stopp I2C -overføring

Wire.endTransmission ();

// Start I2C -overføring

Wire.beginTransmission (Addr);

// Velg dataregister

Wire.write (0x00);

// Stopp I2C -overføring

Wire.endTransmission ();

forsinkelse (1000);

// Be om 4 byte med data

Wire.requestFrom (Addr, 4);

// Les 4 byte med 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-bits

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

trykk = (pres / 4.0) / 1000.0;

// Utdata til dashbordet

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

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

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

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

forsinkelse (1000);

}

Trinn 4: Søknader:

Ulike bruksområder for MPL3115A2 inkluderer høy nøyaktighet altimetri, smarttelefoner/nettbrett, personlig elektronikk altimetri osv. Den kan også integreres i GPS Dead Reckoning, GPS Enhancement for Emergency Services, Map Assist, Navigasjon samt værstasjonsutstyr.

Anbefalt: