Turinys:
2025 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2025-01-13 06:57
MPL3115A2 naudojamas MEMS slėgio jutiklis su I2C sąsaja, kad būtų gauti tikslūs slėgio/aukščio ir temperatūros duomenys. Jutiklių išėjimai yra skaitmeninami didelės skiriamosios gebos 24 bitų ADC. Vidinis apdorojimas pašalina kompensavimo užduotis iš pagrindinės MCU sistemos. Jis gali aptikti tik 0,05 kPa pokytį, o tai prilygsta 0,3 m aukščio pokyčiui. Čia yra jo demonstravimas su dalelių fotonu.
1 žingsnis: ko jums reikia..
1. Dalelių fotonas
2. MPL3115A2
3. I²C kabelis
4. I²C skydas dalelių fotonui
2 žingsnis: jungtys:
Paimkite dalelių fotono I2C skydą ir švelniai stumkite jį ant dalelių fotono kaiščių.
Tada vieną I2C kabelio galą prijunkite prie MPL3115A2 jutiklio, o kitą - prie I2C skydo.
Sujungimai parodyti aukščiau esančiame paveikslėlyje.
3 žingsnis: kodas:
MPL3115A2 dalelių kodą galima atsisiųsti iš mūsų „Github“saugyklos-DCUBE parduotuvės.
Čia yra nuoroda.
Dalelių kodui panaudojome dvi bibliotekas - application.h ir spark_wiring_i2c.h. Norint palengvinti I2C ryšį su jutikliu, reikalinga „Spark_wiring_i2c“biblioteka.
Taip pat galite nukopijuoti kodą iš čia, jis pateikiamas taip:
// Platinama su laisvos valios licencija.
// Naudokite bet kokiu būdu, pelningai ar nemokamai, jei jis atitinka susijusių darbų licencijas.
// MPL3115A2
// Šis kodas skirtas dirbti su MPL3115A2_I2CS I2C mini moduliu
#įtraukti
#įtraukti
// MPL3115A2 I2C adresas yra 0x60 (96)
#define Addr 0x60
plūdė cTemp = 0.0, fTemp = 0.0, slėgis = 0.0, aukštis = 0.0;
int temp = 0, tAukštis = 0; ilgas presas = 0;
negaliojanti sąranka ()
{
// Nustatyti kintamąjį
Dalelių kintamasis ("i2cdevice", "MPL3115A2");
Particle.variable ("cTemp", cTemp);
Dalelė.kintamas ("slėgis", slėgis);
Dalelė.kintamasis ("aukštis", aukštis);
// Inicijuoti I2C komunikaciją
Wire.begin ();
// Inicijuoti serijinį ryšį, nustatyti duomenų perdavimo spartą = 9600
Serial.begin (9600);
// Pradėti I2C perdavimą
Wire.beginTransmission (Addr);
// Pasirinkite valdymo registrą
Wire.write (0x26);
// Aktyvusis režimas, OSR = 128, altimetro režimas
Wire.write (0xB9);
// Sustabdyti I2C perdavimą
Wire.endTransmission ();
// Pradėti I2C perdavimą
Wire.beginTransmission (Addr);
// Pasirinkite duomenų konfigūracijos registrą
Wire.write (0x13);
// Įgalintas duomenų paruošimo įvykis aukščiui, slėgiui, temperatūrai
Wire.write (0x07);
// Sustabdyti I2C perdavimą
Wire.endTransmission ();
vėlavimas (300);
}
tuštumos kilpa ()
{
nepasirašyti int duomenys [6];
// Pradėti I2C perdavimą
Wire.beginTransmission (Addr);
// Pasirinkite valdymo registrą
Wire.write (0x26);
// Aktyvusis režimas, OSR = 128, altimetro režimas
Wire.write (0xB9);
// Sustabdyti I2C perdavimą
Wire.endTransmission ();
vėlavimas (1000);
// Pradėti I2C perdavimą
Wire.beginTransmission (Addr);
// Pasirinkite duomenų registrą
Wire.write (0x00);
// Sustabdyti I2C perdavimą
Wire.endTransmission ();
// Prašyti 6 baitų duomenų
Wire.requestFrom (Addr, 6);
// Perskaitykite 6 baitus duomenų iš adreso 0x00 (00)
// būsena, tHeight msb1, tHeight msb, tHeight lsb, temp msb, temp lsb
jei (Wire.available () == 6)
{
duomenys [0] = Wire.read ();
duomenys [1] = Wire.read ();
duomenys [2] = Wire.read ();
duomenys [3] = Wire.read ();
duomenys [4] = Wire.read ();
duomenys [5] = Wire.read ();
}
// Konvertuokite duomenis į 20 bitų
tAukštis = (((((ilgi)) duomenys [1] * (ilgas) 65536) + (duomenys [2] * 256) + (duomenys [3] ir 0xF0)) / 16);
temp = ((duomenys [4] * 256) + (duomenys [5] ir 0xF0)) / 16;
aukštis = tAukštis / 16,0;
cTemp = (temp / 16,0);
fTemp = cTemp * 1,8 + 32;
// Pradėti I2C perdavimą
Wire.beginTransmission (Addr);
// Pasirinkite valdymo registrą
Wire.write (0x26);
// Aktyvusis režimas, OSR = 128, barometro režimas
Wire.write (0x39);
// Sustabdyti I2C perdavimą
Wire.endTransmission ();
// Pradėti I2C perdavimą
Wire.beginTransmission (Addr);
// Pasirinkite duomenų registrą
Wire.write (0x00);
// Sustabdyti I2C perdavimą
Wire.endTransmission ();
vėlavimas (1000);
// Prašyti 4 baitų duomenų
Wire.requestFrom (Addr, 4);
// Perskaitykite 4 baitus duomenų
// status, pres msb1, pres msb, pres lsb
jei (Wire.available () == 4)
{
duomenys [0] = Wire.read ();
duomenys [1] = Wire.read ();
duomenys [2] = Wire.read ();
duomenys [3] = Wire.read ();
}
// Konvertuokite duomenis į 20 bitų
pres = (((ilgi) duomenys [1] * (ilgas) 65536) + (duomenys [2] * 256) + (duomenys [3] ir 0xF0)) / 16;
slėgis = (pres / 4,0) / 1000,0;
// Išvesti duomenis į prietaisų skydelį
Particle.publish ("Altitude:", String (altitude));
Particle.publish ("Slėgis:", Styga (slėgis));
Particle.publish ("Temperatūra Celsijaus laipsniais:", Styga (cTemp));
Particle.publish ("Temperatūra Farenheitu:", Styga (fTemp));
vėlavimas (1000);
}
4 žingsnis: programos:
Įvairios MPL3115A2 programos apima didelio tikslumo altimetriją, išmaniuosius telefonus/planšetinius kompiuterius, asmeninės elektronikos aukščio matavimus ir tt. Jis taip pat gali būti įtrauktas į GPS mirusiųjų skaičiavimą, GPS gerinimą skubios pagalbos tarnyboms, žemėlapio pagalbinę įrangą, navigaciją ir orų stoties įrangą.