Sommario:

Arduino Nano - Tutorial sensore altimetro di precisione MPL3115A2: 4 passaggi
Arduino Nano - Tutorial sensore altimetro di precisione MPL3115A2: 4 passaggi

Video: Arduino Nano - Tutorial sensore altimetro di precisione MPL3115A2: 4 passaggi

Video: Arduino Nano - Tutorial sensore altimetro di precisione MPL3115A2: 4 passaggi
Video: MS5611 Barometer/Altimeter Tutorial with Arduino || BME280 vs MS5611 Comparison 2024, Dicembre
Anonim
Image
Image

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.

Quello di cui hai bisogno..!!
Quello di cui hai bisogno..!!

1. Arduino Nano

2. MPL3115A2

3. Cavo I²C

4. Scudo I²C per Arduino Nano

Passaggio 2: connessioni:

Connessioni
Connessioni
Connessioni
Connessioni
Connessioni
Connessioni
Connessioni
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:

Codice
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.

Consigliato: