Taula de continguts:
2025 Autora: John Day | [email protected]. Última modificació: 2025-01-13 06:57
El MPL3115A2 utilitza un sensor de pressió MEMS amb una interfície I2C per proporcionar dades de pressió / altitud i temperatura precises. Les sortides del sensor es digitalitzen mitjançant un ADC de 24 bits d'alta resolució. El processament intern elimina les tasques de compensació del sistema MCU amfitrió. És capaç de detectar un canvi de només 0,05 kPa que equival a un canvi d’altitud de 0,3 m. Aquí teniu la seva demostració amb Arduino Nano.
Pas 1: el que necessiteu..
1. Arduino Nano
2. MPL3115A2
3. Cable I²C
4. Escut I²C per a Arduino Nano
Pas 2: connexions:
Agafeu un escut I2C per a Arduino Nano i empenyeu-lo suaument sobre els passadors de Nano.
A continuació, connecteu l'extrem del cable I2C al sensor MPL3115A2 i l'altre extrem a l'escut I2C.
Les connexions es mostren a la imatge superior.
Pas 3: Codi:
El codi arduino per a MPL3115A2 es pot descarregar des del nostre dipòsit github-DCUBE Store.
Aquí teniu l’enllaç per al mateix:
github.com/DcubeTechVentures/MPL3115A2/blob/master/Arduino/MPL3115A2.ino
Incloem la biblioteca Wire.h per facilitar la comunicació I2c del sensor amb la placa Arduino.
També podeu copiar el codi des d’aquí, es dóna de la següent manera:
// Distribuïda amb llicència de lliure voluntat.
// Utilitzeu-lo de la manera que vulgueu, sense ànim de lucre o de franc, sempre que encaixi en les llicències de les obres associades.
// MPL3115A2
// Aquest codi està dissenyat per funcionar amb el mini mòdul MPL3115A2_I2CS I2C
#incloure
// L’adreça I2C MPL3115A2 és 0x60 (96)
#define Addr 0x60
configuració nul·la ()
{
// Inicialitzar la comunicació I2C
Wire.begin ();
// Inicialitzar la comunicació en sèrie, establir la velocitat de transmissió = 9600
Serial.begin (9600);
// Inicieu la transmissió I2C
Wire.beginTransmission (Addr);
// Seleccioneu el registre de control
Wire.write (0x26);
// Mode actiu, OSR = 128, mode altímetre
Wire.write (0xB9);
// Atura la transmissió I2C
Wire.endTransmission ();
// Inicieu la transmissió I2C
Wire.beginTransmission (Addr);
// Seleccioneu el registre de configuració de dades
Wire.write (0x13);
// Esdeveniment preparat per a dades habilitat per a altitud, pressió i temperatura
Wire.write (0x07);
// Atura la transmissió I2C
Wire.endTransmission ();
retard (300);
}
bucle buit ()
{
dades int sense signar [6];
// Inicieu la transmissió I2C
Wire.beginTransmission (Addr);
// Seleccioneu el registre de control
Wire.write (0x26);
// Mode actiu, OSR = 128, mode altímetre
Wire.write (0xB9);
// Atura la transmissió I2C
Wire.endTransmission ();
retard (1000);
// Inicieu la transmissió I2C
Wire.beginTransmission (Addr);
// Selecciona el registre de dades
Wire.write (0x00);
// Atura la transmissió I2C
Wire.endTransmission ();
// Sol·liciteu 6 bytes de dades
Wire.requestFrom (Addr, 6);
// Llegir 6 bytes de dades de l'adreça 0x00 (00)
// estat, tHeight msb1, tHeight msb, tHight lsb, temp msb, temp lsb
if (Wire.available () == 6)
{
dades [0] = Wire.read ();
dades [1] = Wire.read ();
dades [2] = Wire.read ();
dades [3] = Wire.read ();
dades [4] = Wire.read ();
dades [5] = Wire.read ();
}
// Converteix les dades a 20 bits
int tHeight = (((llarg) (dades [1] * (llarg) 65536) + (dades [2] * 256) + (dades [3] i 0xF0)) / 16);
int temp = ((dades [4] * 256) + (dades [5] i 0xF0)) / 16;
altitud de flotació = tAltura / 16,0;
float cTemp = (temp / 16.0);
float fTemp = cTemp * 1,8 + 32;
// Inicieu la transmissió I2C
Wire.beginTransmission (Addr);
// Seleccioneu el registre de control
Wire.write (0x26);
// Mode actiu, OSR = 128, mode baròmetre
Wire.write (0x39);
// Atura la transmissió I2C
Wire.endTransmission ();
retard (1000);
// Inicieu la transmissió I2C
Wire.beginTransmission (Addr);
// Selecciona el registre de dades
Wire.write (0x00);
// Atura la transmissió I2C
Wire.endTransmission ();
// Sol·liciteu 4 bytes de dades
Wire.requestFrom (Addr, 4);
// Llegiu 4 bytes de dades
// estat, pres msb1, pres msb, pres lsb
if (Wire.available () == 4)
{
dades [0] = Wire.read ();
dades [1] = Wire.read ();
dades [2] = Wire.read ();
dades [3] = Wire.read ();
}
// Converteix les dades a 20 bits
pres llarg = (((llarg) dades [1] * (llarg) 65536) + (dades [2] * 256) + (dades [3] i 0xF0)) / 16;
pressió de flotació = (pres / 4.0) / 1000.0;
// Sortida de dades al monitor sèrie
Serial.print ("Altitud:");
Serial.print (altitud);
Serial.println ("m");
Serial.print ("Pressió");
Serial.print (pressió);
Serial.println ("kPa");
Serial.print ("Temperatura en centígrads");
Serial.print (cTemp);
Serial.println ("C");
Serial.print ("Temperatura en Fahrenheit:");
Serial.print (fTemp);
Serial.println ("F");
retard (500);
}
Pas 4: aplicacions:
Diverses aplicacions de MPL3115A2 inclouen altimetria d’alta precisió, telèfons intel·ligents / tauletes, altimetria electrònica personal, etc. També es pot incorporar a GPS Dead Reckoning, millora GPS per a serveis d’emergència, assistència de mapes, navegació i equips d’estacions meteorològiques.