2025 Autor: John Day | [email protected]. Modificat ultima dată: 2025-01-13 06:58
MPL3115A2 folosește un senzor de presiune MEMS cu o interfață I2C pentru a furniza date precise de presiune / altitudine și temperatură. Ieșirile senzorului sunt digitalizate printr-un ADC de 24 biți de înaltă rezoluție. Procesarea internă elimină sarcinile de compensare din sistemul MCU gazdă. Este capabil să detecteze o schimbare de numai 0,05 kPa care echivalează cu o schimbare de altitudine de 0,3 m. Iată demonstrația sa cu fotonul de particule.
Pasul 1: De ce ai nevoie..
1. Fotonul particulelor
2. MPL3115A2
3. Cablu I²C
4. Scutul I²C pentru fotonul de particule
Pasul 2: Conexiuni:
Luați un scut I2C pentru fotonul particulelor și împingeți-l ușor peste pinii fotonului particulei.
Apoi conectați capătul cablului I2C la senzorul MPL3115A2 și celălalt capăt la ecranul I2C.
Conexiunile sunt afișate în imaginea de mai sus.
Pasul 3: Cod:
Codul de particule pentru MPL3115A2 poate fi descărcat din depozitul nostru Github-Magazin DCUBE.
Iată linkul.
Am folosit două biblioteci pentru codul de particule, care sunt application.h și spark_wiring_i2c.h. Biblioteca Spark_wiring_i2c este necesară pentru a facilita comunicarea I2C cu senzorul.
De asemenea, puteți copia codul de aici, acesta este dat după cum urmează:
// Distribuit cu o licență de liberă voință.
// Folosiți-l în orice mod doriți, profit sau gratuit, cu condiția să se încadreze în licențele lucrărilor sale asociate.
// MPL3115A2
// Acest cod este conceput pentru a funcționa cu Mini-modulul MPL3115A2_I2CS I2C
#include
#include
// Adresa I2C MPL3115A2 este 0x60 (96)
#define Addr 0x60
plutitor cTemp = 0,0, fTemp = 0,0, presiune = 0,0, altitudine = 0,0;
int temp = 0, tHeight = 0; pres lung = 0;
configurare nulă ()
{
// Setați variabila
Particle.variable ("i2cdevice", "MPL3115A2");
Particle.variable ("cTemp", cTemp);
Particle.variable ("presiune", presiune);
Particle.variable ("altitudine", altitudine);
// Inițializați comunicarea I2C
Wire.begin ();
// Inițializați comunicarea în serie, setați baud rate = 9600
Serial.begin (9600);
// Porniți transmisia I2C
Wire.beginTransmission (Addr);
// Selectați registrul de control
Wire.write (0x26);
// Mod activ, OSR = 128, modul altimetru
Wire.write (0xB9);
// Opriți transmisia I2C
Wire.endTransmission ();
// Porniți transmisia I2C
Wire.beginTransmission (Addr);
// Selectați registrul de configurare a datelor
Wire.write (0x13);
// Eveniment pregătit pentru date activat pentru altitudine, presiune, temperatură
Wire.write (0x07);
// Opriți transmisia I2C
Wire.endTransmission ();
întârziere (300);
}
bucla nulă ()
{
date int nesemnate [6];
// Porniți transmisia I2C
Wire.beginTransmission (Addr);
// Selectați registrul de control
Wire.write (0x26);
// Mod activ, OSR = 128, modul altimetru
Wire.write (0xB9);
// Opriți transmisia I2C
Wire.endTransmission ();
întârziere (1000);
// Porniți transmisia I2C
Wire.beginTransmission (Addr);
// Selectați registrul de date
Wire.write (0x00);
// Opriți transmisia I2C
Wire.endTransmission ();
// Solicitați 6 octeți de date
Wire.requestFrom (Addr, 6);
// Citiți 6 octeți de date de la adresa 0x00 (00)
// stare, tHeight msb1, tHeight msb, tHeight lsb, temp msb, temp lsb
if (Wire.available () == 6)
{
date [0] = Wire.read ();
date [1] = Wire.read ();
date [2] = Wire.read ();
date [3] = Wire.read ();
date [4] = Wire.read ();
date [5] = Wire.read ();
}
// Convertiți datele în 20 de biți
tHeight = (((((long) data [1] * (long) 65536) + (data [2] * 256) + (data [3] & 0xF0)) / 16);
temp = ((date [4] * 256) + (date [5] & 0xF0)) / 16;
altitudine = tAltime / 16,0;
cTemp = (temp / 16.0);
fTemp = cTemp * 1,8 + 32;
// Porniți transmisia I2C
Wire.beginTransmission (Addr);
// Selectați registrul de control
Wire.write (0x26);
// Mod activ, OSR = 128, mod barometru
Wire.write (0x39);
// Opriți transmisia I2C
Wire.endTransmission ();
// Porniți transmisia I2C
Wire.beginTransmission (Addr);
// Selectați registrul de date
Wire.write (0x00);
// Opriți transmisia I2C
Wire.endTransmission ();
întârziere (1000);
// Solicitați 4 octeți de date
Wire.requestFrom (Addr, 4);
// Citiți 4 octeți de date
// status, pres msb1, pres msb, pres lsb
if (Wire.available () == 4)
{
date [0] = Wire.read ();
date [1] = Wire.read ();
date [2] = Wire.read ();
date [3] = Wire.read ();
}
// Convertiți datele în 20 de biți
pres = (((lung) date [1] * (lung) 65536) + (date [2] * 256) + (date [3] & 0xF0)) / 16;
presiune = (pres / 4.0) / 1000.0;
// Ieșire date în tabloul de bord
Particle.publish ("Altitudine:", Șir (altitudine));
Particle.publish ("Presiune:", Șir (presiune));
Particle.publish ("Temperatura în grade Celsius:", Șir (cTemp));
Particle.publish ("Temperatura în Fahrenheit:", String (fTemp));
întârziere (1000);
}
Pasul 4: Aplicații:
Diverse aplicații ale MPL3115A2 includ altimetrie de înaltă precizie, telefoane inteligente / tablete, altimetrie electronică personală etc. Poate fi, de asemenea, încorporată în GPS Dead Reckoning, GPS Enhancement for Emergency Services, Map Assist, Navigation, precum și echipamente pentru stațiile meteorologice.