Sommario:
2025 Autore: John Day | [email protected]. Ultima modifica: 2025-01-13 06:57
L'MPL3115A2 utilizza un sensore di pressione MEMS con un'interfaccia I2C per fornire dati precisi su pressione/altitudine e temperatura. Le uscite del sensore sono digitalizzate da un ADC a 24 bit ad alta risoluzione. L'elaborazione interna rimuove le attività di compensazione dal sistema MCU host. È in grado di rilevare un cambiamento di soli 0,05 kPa, che equivale a un cambiamento di altitudine di 0,3 m. Ecco la sua dimostrazione con Arduino Nano.
Passaggio 1: ciò di cui hai bisogno.
1. Arduino Nano
2. MPL3115A2
3. Cavo I²C
4. Scudo I²C per Arduino Nano
Passaggio 2: connessioni:
Prendi uno shield I2C per Arduino Nano e spingilo delicatamente sui pin di Nano.
Quindi collegare un'estremità del cavo I2C al sensore MPL3115A2 e l'altra estremità allo schermo I2C.
I collegamenti sono mostrati nell'immagine sopra.
Passaggio 3: codice:
Il codice arduino per MPL3115A2 può essere scaricato dal nostro repository github-DCUBE Store.
Ecco il link per lo stesso:
github.com/DcubeTechVentures/MPL3115A2/blob/master/Arduino/MPL3115A2.ino
Includiamo la libreria Wire.h per facilitare la comunicazione I2c del sensore con la scheda Arduino.
Puoi anche copiare il codice da qui, è fornito come segue:
// Distribuito con una licenza libera.
// Usalo come vuoi, a scopo di lucro o gratuito, a condizione che rientri nelle licenze delle opere associate.
//MPL3115A2
// Questo codice è progettato per funzionare con il Mini Modulo MPL3115A2_I2CS I2C
#includere
// L'indirizzo I2C MPL3115A2 è 0x60(96)
#define Indirizzo 0x60
configurazione nulla()
{
// Inizializza la comunicazione I2C
Wire.begin();
// Inizializza la comunicazione seriale, imposta la velocità di trasmissione = 9600
Serial.begin(9600);
// Avvia la trasmissione I2C
Wire.beginTransmission(Addr);
// Seleziona il registro di controllo
Wire.write(0x26);
// Modalità attiva, OSR = 128, modalità altimetro
Wire.write(0xB9);
// Interrompe la trasmissione I2C
Wire.endTransmission();
// Avvia la trasmissione I2C
Wire.beginTransmission(Addr);
// Seleziona il registro di configurazione dei dati
Wire.write(0x13);
// Evento Data Ready abilitato per altitudine, pressione, temperatura
Wire.write(0x07);
// Interrompe la trasmissione I2C
Wire.endTransmission();
ritardo(300);
}
ciclo vuoto()
{
dati int non firmati[6];
// Avvia la trasmissione I2C
Wire.beginTransmission(Addr);
// Seleziona il registro di controllo
Wire.write(0x26);
// Modalità attiva, OSR = 128, modalità altimetro
Wire.write(0xB9);
// Interrompe la trasmissione I2C
Wire.endTransmission();
ritardo(1000);
// Avvia la trasmissione I2C
Wire.beginTransmission(Addr);
// Seleziona registro dati
Wire.write(0x00);
// Interrompe la trasmissione I2C
Wire.endTransmission();
// Richiedi 6 byte di dati
Wire.requestFrom(Addr, 6);
// Legge 6 byte di dati dall'indirizzo 0x00(00)
// stato, tHeight msb1, tHeight msb, tHeight lsb, temp msb, temp lsb
if (Filo.disponibile() == 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();
}
// Converti i dati a 20 bit
int tHeight = (((long)(data[1] * (long)65536) + (data[2] * 256) + (data[3] & 0xF0)) / 16);
int temp = ((data[4] * 256) + (data[5] & 0xF0)) / 16;
altitudine float = tHeight / 16,0;
float cTemp = (temp / 16.0);
float fTemp = cTemp * 1,8 + 32;
// Avvia la trasmissione I2C
Wire.beginTransmission(Addr);
// Seleziona il registro di controllo
Wire.write(0x26);
// Modalità attiva, OSR = 128, modalità barometro
Wire.write(0x39);
// Interrompe la trasmissione I2C
Wire.endTransmission();
ritardo(1000);
// Avvia la trasmissione I2C
Wire.beginTransmission(Addr);
// Seleziona registro dati
Wire.write(0x00);
// Interrompe la trasmissione I2C
Wire.endTransmission();
// Richiedi 4 byte di dati
Wire.requestFrom(Addr, 4);
// Legge 4 byte di dati
// stato, pres msb1, pres msb, pres lsb
if (Filo.disponibile() == 4)
{
data[0] = Wire.read();
data[1] = Wire.read();
data[2] = Wire.read();
data[3] = Wire.read();
}
// Converti i dati a 20 bit
long pres = (((long)data[1] * (long)65536) + (data[2] * 256) + (data[3] & 0xF0)) / 16;
pressione galleggiante = (pres / 4.0) / 1000.0;
// Invia i dati al monitor seriale
Serial.print("Altitudine: ");
Serial.print(altitudine);
Serial.println("m");
Serial.print("Pressione: ");
Serial.print(pressione);
Serial.println("kPa");
Serial.print("Temperatura in gradi Celsius: ");
Serial.print(cTemp);
Serial.println("C");
Serial.print("Temperatura in Fahrenheit: ");
Serial.print(fTemp);
Serial.println("F");
ritardo (500);
}
Passaggio 4: applicazioni:
Varie applicazioni di MPL3115A2 includono altimetria ad alta precisione, smartphone/tablet, altimetria elettronica personale ecc. Può anche essere incorporata in GPS Dead Reckoning, GPS Enhancement per servizi di emergenza, Map Assist, navigazione e apparecchiature per stazioni meteorologiche.