Inhoudsopgave:

Particle Photon - MPL3115A2 Precision Altimeter Sensor Tutorial - Ajarnpa
Particle Photon - MPL3115A2 Precision Altimeter Sensor Tutorial - Ajarnpa

Video: Particle Photon - MPL3115A2 Precision Altimeter Sensor Tutorial - Ajarnpa

Video: Particle Photon - MPL3115A2 Precision Altimeter Sensor Tutorial - Ajarnpa
Video: Particle Photon - MPL3115A2 Precision Altimeter Sensor Tutorial 2024, November
Anonim
Image
Image

De MPL3115A2 maakt gebruik van een MEMS-druksensor met een I2C-interface om nauwkeurige druk-/hoogte- en temperatuurgegevens te leveren. De sensoruitgangen worden gedigitaliseerd door een 24-bits ADC met hoge resolutie. Interne verwerking verwijdert compensatietaken van het host-MCU-systeem. Het is in staat om een verandering van slechts 0,05 kPa te detecteren, wat overeenkomt met een hoogteverandering van 0,3 m. Hier is de demonstratie met deeltjesfoton.

Stap 1: Wat je nodig hebt.

Wat je nodig hebt..!!
Wat je nodig hebt..!!

1. Deeltjesfoton

2. MPL3115A2

3. I²C-kabel

4. I²C-schild voor deeltjesfoton

Stap 2: Aansluitingen:

Aansluitingen
Aansluitingen
Aansluitingen
Aansluitingen
Aansluitingen
Aansluitingen
Aansluitingen
Aansluitingen

Neem een I2C-schild voor deeltjesfoton en duw het voorzichtig over de pinnen van deeltjesfoton.

Sluit vervolgens het ene uiteinde van de I2C-kabel aan op de MPL3115A2-sensor en het andere uiteinde op de I2C-afscherming.

De aansluitingen zijn weergegeven in de afbeelding hierboven.

Stap 3: Coderen:

Code
Code

De deeltjescode voor MPL3115A2 kan worden gedownload van onze Github-repository-DCUBE Store.

Hier is de link.

We hebben twee bibliotheken gebruikt voor deeltjescode, namelijk application.h en spark_wiring_i2c.h. Spark_wiring_i2c-bibliotheek is vereist om de I2C-communicatie met de sensor te vergemakkelijken.

U kunt de code ook hier kopiëren, deze wordt als volgt gegeven:

// Gedistribueerd met een vrije wilslicentie.

// Gebruik het zoals je wilt, winst of gratis, op voorwaarde dat het past in de licenties van de bijbehorende werken.

// MPL3115A2

// Deze code is ontworpen om te werken met de MPL3115A2_I2CS I2C Mini Module

#erbij betrekken

#erbij betrekken

// MPL3115A2 I2C-adres is 0x60(96)

#define Addr 0x60

float cTemp = 0,0, fTemp = 0,0, druk = 0,0, hoogte = 0,0;

int temp = 0, tHeight = 0;lange druk = 0;

ongeldige setup()

{

// Variabele instellen

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

Particle.variable("cTemp", cTemp);

Particle.variable ("druk", druk);

Particle.variable ("hoogte", hoogte);

// Initialiseer I2C-communicatie

Draad.begin();

// Initialiseer seriële communicatie, stel baudrate in = 9600

Serieel.begin(9600);

// Start I2C-transmissie

Wire.beginTransmission (Addr);

// Selecteer controleregister

Draad.schrijven (0x26);

// Actieve modus, OSR = 128, hoogtemetermodus

Draad.schrijven (0xB9);

// Stop I2C-transmissie

Wire.endTransmission();

// Start I2C-transmissie

Wire.beginTransmission (Addr);

// Selecteer dataconfiguratieregister

Draad.schrijven (0x13);

// Gegevens gereedgebeurtenis ingeschakeld voor hoogte, druk, temperatuur

Draad.schrijven (0x07);

// Stop I2C-transmissie

Wire.endTransmission();

vertraging (300);

}

lege lus()

{

niet-ondertekende int-gegevens[6];

// Start I2C-transmissie

Wire.beginTransmission (Addr);

// Selecteer controleregister

Draad.schrijven (0x26);

// Actieve modus, OSR = 128, hoogtemetermodus

Draad.schrijven (0xB9);

// Stop I2C-transmissie

Wire.endTransmission();

vertraging (1000);

// Start I2C-transmissie

Wire.beginTransmission (Addr);

// Selecteer dataregister

Draad.schrijven (0x00);

// Stop I2C-transmissie

Wire.endTransmission();

// Vraag 6 bytes aan gegevens aan

Wire.requestFrom(Addr, 6);

// Lees 6 bytes aan gegevens van adres 0x00(00)

// status, tHeight msb1, tHeight msb, tHeight lsb, tijdelijke msb, tijdelijke lsb

if(Draad.beschikbaar() == 6)

{

data[0] = Draad.lezen();

data[1] = Draad.lezen();

data[2] = Draad.lezen();

data[3] = Draad.lezen();

data[4] = Draad.lezen();

data[5] = Draad.lezen();

}

// Converteer de gegevens naar 20-bits

tHeight = ((((lange)data[1] * (lange)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;

// Start I2C-transmissie

Wire.beginTransmission (Addr);

// Selecteer controleregister

Draad.schrijven (0x26);

// Actieve modus, OSR = 128, barometermodus

Draad.schrijven (0x39);

// Stop I2C-transmissie

Wire.endTransmission();

// Start I2C-transmissie

Wire.beginTransmission (Addr);

// Selecteer dataregister

Draad.schrijven (0x00);

// Stop I2C-transmissie

Wire.endTransmission();

vertraging (1000);

// Vraag 4 bytes aan gegevens aan

Wire.requestFrom(Addr, 4);

// Lees 4 bytes aan gegevens

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

if(Draad.beschikbaar() == 4)

{

data[0] = Draad.lezen();

data[1] = Draad.lezen();

data[2] = Draad.lezen();

data[3] = Draad.lezen();

}

// Converteer de gegevens naar 20-bits

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

druk = (druk / 4,0) / 1000,0;

// Gegevens uitvoeren naar dashboard

Particle.publish("Hoogte:", String(hoogte));

Particle.publish("Druk:", String(druk));

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

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

vertraging (1000);

}

Stap 4: Toepassingen:

Verschillende toepassingen van de MPL3115A2 omvatten hoogtemeting met hoge nauwkeurigheid, smartphones/tablets, hoogtemeting voor persoonlijke elektronica, enz. Het kan ook worden opgenomen in GPS-geschatte berekeningen, GPS-verbeteringen voor hulpdiensten, kaartassistentie, navigatie en weerstationapparatuur.

Aanbevolen: