Cuprins:

Arduino Nano - Tutorial senzor de altimetru de precizie MPL3115A2: 4 pași
Arduino Nano - Tutorial senzor de altimetru de precizie MPL3115A2: 4 pași

Video: Arduino Nano - Tutorial senzor de altimetru de precizie MPL3115A2: 4 pași

Video: Arduino Nano - Tutorial senzor de altimetru de precizie MPL3115A2: 4 pași
Video: SKR 1.4 - Definitive User Guide 2024, Iulie
Anonim
Image
Image

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

De ce ai nevoie..!!
De ce ai nevoie..!!

1. Arduino Nano

2. MPL3115A2

3. Cablu I²C

4. Scut I²C pentru Arduino Nano

Pasul 2: Conexiuni:

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

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

Recomandat: