Sommario:

Particle Photon - Tutorial del sensore dell'altimetro di precisione MPL3115A2: 4 passaggi
Particle Photon - Tutorial del sensore dell'altimetro di precisione MPL3115A2: 4 passaggi

Video: Particle Photon - Tutorial del sensore dell'altimetro di precisione MPL3115A2: 4 passaggi

Video: Particle Photon - Tutorial del sensore dell'altimetro di precisione MPL3115A2: 4 passaggi
Video: BeagleBone Black HP203B Precision Barometer & Altimeter Sensor 'C' Code Tutorial 2024, Novembre
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 il fotone particellare.

Passaggio 1: ciò di cui hai bisogno.

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

1. Fotone particellare

2. MPL3115A2

3. Cavo I²C

4. Scudo I²C per fotoni di particelle

Passaggio 2: connessioni:

Connessioni
Connessioni
Connessioni
Connessioni
Connessioni
Connessioni
Connessioni
Connessioni

Prendi uno scudo I2C per fotone particellare e spingilo delicatamente sui perni del fotone particellare.

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 particella per MPL3115A2 può essere scaricato dal nostro repository Github-DCUBE Store.

Ecco il link.

Abbiamo usato due librerie per il codice particellare, che sono application.he spark_wiring_i2c.h. La libreria Spark_wiring_i2c è necessaria per facilitare la comunicazione I2C con il sensore.

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

#includere

// L'indirizzo I2C MPL3115A2 è 0x60(96)

#define Indirizzo 0x60

float cTemp = 0,0, fTemp = 0,0, pressione = 0,0, altitudine = 0,0;

int temp = 0, tHeight = 0;long pres = 0;

configurazione nulla()

{

// Imposta variabile

Particle.variable("i2cdevice", "MPL3115A2");

Particle.variable("cTemp", cTemp);

Particle.variable("pressione", pressione);

Particle.variable("altitudine", altitudine);

// 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

tHeight = ((((long)data[1] * (long)65536) + (data[2] * 256) + (data[3] & 0xF0)) / 16);

temp = ((data[4] * 256) + (data[5] & 0xF0)) / 16;

altitudine = tAltezza / 16,0;

cTemp = (temp / 16.0);

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();

// Avvia la trasmissione I2C

Wire.beginTransmission(Addr);

// Seleziona registro dati

Wire.write(0x00);

// Interrompe la trasmissione I2C

Wire.endTransmission();

ritardo(1000);

// 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

pres = (((long)data[1] * (long)65536) + (data[2] * 256) + (data[3] & 0xF0)) / 16;

pressione = (pres / 4.0) / 1000.0;

// Invia i dati alla dashboard

Particle.publish("Altitudine:", String(altitudine));

Particle.publish("Pressione:", String(pressione));

Particle.publish("Temperatura in gradi Celsius:", String(cTemp));

Particle.publish("Temperatura in gradi Fahrenheit:", String(fTemp));

ritardo(1000);

}

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: