INHOUDSOPGAWE:

Particle Photon - MPL3115A2 Precision Altimeter Sensor Tutoriaal: 4 stappe
Particle Photon - MPL3115A2 Precision Altimeter Sensor Tutoriaal: 4 stappe

Video: Particle Photon - MPL3115A2 Precision Altimeter Sensor Tutoriaal: 4 stappe

Video: Particle Photon - MPL3115A2 Precision Altimeter Sensor Tutoriaal: 4 stappe
Video: BeagleBone Black HP203B Precision Barometer & Altimeter Sensor 'C' Code Tutorial 2024, Junie
Anonim
Image
Image

Die MPL3115A2 het 'n MEMS -druksensor met 'n I2C -koppelvlak om akkurate druk-/hoogte- en temperatuurdata te verskaf. Die sensoruitsette word gedigitaliseer deur 'n hoë-resolusie 24-bis ADC. Interne verwerking verwyder vergoedingstake uit die gasheer -MCU -stelsel. Dit is in staat om 'n verandering in slegs 0,05 kPa op te spoor wat gelykstaande is aan 'n hoogteverandering van 0,3 m. Hier is die demonstrasie daarvan met Particle foton.

Stap 1: wat u nodig het..

Wat jy nodig het..!!
Wat jy nodig het..!!

1. Deeltjie Photon

2. MPL3115A2

3. I²C -kabel

4. I²C -skild vir deeltjiesfoton

Stap 2: Verbindings:

Verbindings
Verbindings
Verbindings
Verbindings
Verbindings
Verbindings
Verbindings
Verbindings

Neem 'n I2C -skild vir deeltjiefoton en druk dit liggies oor die penne van deeltjiefoton.

Koppel dan die een kant van die I2C -kabel aan die MPL3115A2 -sensor en die ander kant aan die I2C -skild.

Verbindings word op die foto hierbo getoon.

Stap 3: Kode:

Kode
Kode

Die deeltjiekode vir MPL3115A2 kan afgelaai word in ons Github-bewaarplek-DCUBE-winkel.

Hier is die skakel.

Ons het twee biblioteke vir deeltjiekode gebruik, wat application.h en spark_wiring_i2c.h is. Spark_wiring_i2c -biblioteek is nodig om die I2C -kommunikasie met die sensor te vergemaklik.

U kan die kode ook hiervandaan kopieer; dit word soos volg gegee:

// Versprei met 'n vrywillige lisensie.

// Gebruik dit op enige manier wat u wil, wins of gratis, mits dit in die lisensies van die gepaardgaande werke pas.

// MPL3115A2

// Hierdie kode is ontwerp om te werk met die MPL3115A2_I2CS I2C Mini Module

#insluit

#insluit

// MPL3115A2 I2C adres is 0x60 (96)

#definieer Addr 0x60

dryf cTemp = 0.0, fTemp = 0.0, druk = 0.0, hoogte = 0.0;

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

leemte opstelling ()

{

// Stel veranderlike

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

Particle.variable ("cTemp", cTemp);

Deeltjie.veranderlik ("druk", druk);

Particle.variable ("hoogte", hoogte);

// Initialiseer I2C -kommunikasie

Wire.begin ();

// Initialiseer seriële kommunikasie, stel baud rate = 9600 in

Serial.begin (9600);

// Begin I2C -oordrag

Wire.beginTransmission (Addr);

// Kies kontroleregister

Draad.skryf (0x26);

// Aktiewe modus, OSR = 128, hoogtemodus

Wire.write (0xB9);

// Stop I2C -oordrag

Wire.endTransmission ();

// Begin I2C -oordrag

Wire.beginTransmission (Addr);

// Kies datakonfigurasie register

Wire.write (0x13);

// Gereedheid vir data gereed vir hoogte, druk, temperatuur

Wire.write (0x07);

// Stop I2C -oordrag

Wire.endTransmission ();

vertraging (300);

}

leemte lus ()

{

ongetekende int data [6];

// Begin I2C -oordrag

Wire.beginTransmission (Addr);

// Kies kontroleregister

Draad.skryf (0x26);

// Aktiewe modus, OSR = 128, hoogtemodus

Wire.write (0xB9);

// Stop I2C -oordrag

Wire.endTransmission ();

vertraging (1000);

// Begin I2C -oordrag

Wire.beginTransmission (Addr);

// Kies dataregister

Wire.write (0x00);

// Stop I2C -oordrag

Wire.endTransmission ();

// Versoek 6 grepe data

Wire.requestFrom (Addr, 6);

// Lees 6 grepe data vanaf adres 0x00 (00)

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

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

}

// Skakel die data om in 20-bisse

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

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

hoogte = tHoogte / 16,0;

cTemp = (temp / 16.0);

fTemp = cTemp * 1.8 + 32;

// Begin I2C -oordrag

Wire.beginTransmission (Addr);

// Kies kontroleregister

Draad.skryf (0x26);

// Aktiewe modus, OSR = 128, barometer af

Wire.write (0x39);

// Stop I2C -oordrag

Wire.endTransmission ();

// Begin I2C -oordrag

Wire.beginTransmission (Addr);

// Kies dataregister

Wire.write (0x00);

// Stop I2C -oordrag

Wire.endTransmission ();

vertraging (1000);

// Versoek 4 grepe data

Wire.requestFrom (Addr, 4);

// Lees 4 grepe data

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

as (Wire.available () == 4)

{

data [0] = Wire.read ();

data [1] = Wire.read ();

data [2] = Wire.read ();

data [3] = Wire.read ();

}

// Skakel die data om in 20-bisse

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

druk = (pres / 4.0) / 1000.0;

// Uitset data na paneelbord

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

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

Particle.publish ("Temperatuur in Celsius:", String (cTemp));

Particle.publish ("Temperatuur in Fahrenheit:", String (fTemp));

vertraging (1000);

}

Stap 4: Aansoeke:

Verskeie toepassings van MPL3115A2 sluit in hoë akkuraatheid altimetrie, slimfone/tablette, persoonlike elektronika altimetrie, ens. Dit kan ook opgeneem word in GPS Dead Reckoning, GPS -verbetering vir nooddienste, kaarthulp, navigasie sowel as weerstasie -toerusting.

Aanbeveel: