Innholdsfortegnelse:
2025 Forfatter: John Day | [email protected]. Sist endret: 2025-01-13 06:58
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..
1. Partikkelfoton
2. MPL3115A2
3. I²C -kabel
4. I²C -skjold for partikkelfoton
Trinn 2: 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:
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.