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 Arduino Nano.
Pasul 1: De ce ai nevoie..
1. Arduino Nano
2. MPL3115A2
3. Cablu I²C
4. Scut I²C pentru Arduino Nano
Pasul 2: Conexiuni:
Luați un scut I2C pentru Arduino Nano și împingeți-l ușor peste pinii Nano.
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 arduino pentru MPL3115A2 poate fi descărcat din depozitul nostru github-Magazin DCUBE.
Iată linkul pentru același lucru:
github.com/DcubeTechVentures/MPL3115A2/blob/master/Arduino/MPL3115A2.ino
Includem biblioteca Wire.h pentru a facilita comunicarea I2c a senzorului cu placa Arduino.
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
// Adresa I2C MPL3115A2 este 0x60 (96)
#define Addr 0x60
configurare nulă ()
{
// 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
int tHeight = (((lung) (date [1] * (lung) 65536) + (date [2] * 256) + (date [3] & 0xF0)) / 16);
int temp = ((date [4] * 256) + (date [5] & 0xF0)) / 16;
altitudine de plutire = tHeight / 16,0;
float cTemp = (temp / 16.0);
float 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 ();
î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 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
long pres = (((long) data [1] * (long) 65536) + (data [2] * 256) + (data [3] & 0xF0)) / 16;
presiune de plutire = (pres / 4.0) / 1000.0;
// Ieșire date pe monitorul serial
Serial.print ("Altitudine:");
Serial.print (altitudine);
Serial.println ("m");
Serial.print ("Presiune:");
Serial.print (presiune);
Serial.println ("kPa");
Serial.print ("Temperatura în grade Celsius:");
Serial.print (cTemp);
Serial.println ("C");
Serial.print ("Temperatura în Fahrenheit:");
Serial.print (fTemp);
Serial.println ("F");
întârziere (500);
}
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.