Kazalo:

Arduino Nano - Vadnica za natančni senzor višinomera MPL3115A2: 4 koraki
Arduino Nano - Vadnica za natančni senzor višinomera MPL3115A2: 4 koraki

Video: Arduino Nano - Vadnica za natančni senzor višinomera MPL3115A2: 4 koraki

Video: Arduino Nano - Vadnica za natančni senzor višinomera MPL3115A2: 4 koraki
Video: Использование Melexis MLX90614 Инфракрасный термометр с Arduino 2024, Julij
Anonim
Image
Image

MPL3115A2 uporablja senzor tlaka MEMS z vmesnikom I2C za zagotavljanje točnih podatkov o tlaku/nadmorski višini in temperaturi. Izhode senzorjev digitalizira 24-bitni ADC z visoko ločljivostjo. Notranja obdelava odstrani kompenzacijske naloge iz gostiteljskega sistema MCU. Sposoben je zaznati spremembo le 0,05 kPa, kar pomeni 0,3 m višinske spremembe. Tukaj je njegova predstavitev z Arduino Nano.

Korak: Kaj potrebujete.. !

Kaj rabiš..!!
Kaj rabiš..!!

1. Arduino Nano

2. MPL3115A2

3. Kabel I²C

4. I²C ščit za Arduino Nano

2. korak: Povezave:

Povezave
Povezave
Povezave
Povezave
Povezave
Povezave
Povezave
Povezave

Vzemite ščit I2C za Arduino Nano in ga nežno potisnite čez zatiče Nano.

Nato en konec kabla I2C priključite na senzor MPL3115A2, drugi konec pa na ščit I2C.

Povezave so prikazane na zgornji sliki.

3. korak: Koda:

Koda
Koda

Kodo arduino za MPL3115A2 lahko prenesete iz našega skladišča github-DCUBE Store.

Tukaj je povezava za isto:

github.com/DcubeTechVentures/MPL3115A2/blob/master/Arduino/MPL3115A2.ino

Vključujemo knjižnico Wire.h za olajšanje komunikacije senzorja I2c s ploščo Arduino.

Kodo lahko tudi kopirate od tu, podana je na naslednji način:

// Razdeljeno z licenco za svobodno voljo.

// Uporabljajte ga kakor koli želite, dobičkonosno ali brezplačno, pod pogojem, da ustreza licencam povezanih del.

// MPL3115A2

// Ta koda je zasnovana za delo z mini modulom MPL3115A2_I2CS I2C

#vključi

// Naslov I2C MPL3115A2 je 0x60 (96)

#define Addr 0x60

void setup ()

{

// Inicializirajte komunikacijo I2C

Wire.begin ();

// Začetek serijske komunikacije, nastavljena hitrost prenosa = 9600

Serial.begin (9600);

// Zagon prenosa I2C

Wire.beginTransmission (Addr);

// Izberite kontrolni register

Wire.write (0x26);

// Aktivni način, OSR = 128, način višinomera

Wire.write (0xB9);

// Ustavi prenos I2C

Wire.endTransmission ();

// Zagon prenosa I2C

Wire.beginTransmission (Addr);

// Izberite register konfiguracije podatkov

Wire.write (0x13);

// Omogočen dogodek pripravljenih podatkov za nadmorsko višino, tlak, temperaturo

Wire.write (0x07);

// Ustavi prenos I2C

Wire.endTransmission ();

zamuda (300);

}

void loop ()

{

podpisani int podatki [6];

// Zagon prenosa I2C

Wire.beginTransmission (Addr);

// Izberite kontrolni register

Wire.write (0x26);

// Aktivni način, OSR = 128, način višinomera

Wire.write (0xB9);

// Ustavi prenos I2C

Wire.endTransmission ();

zamuda (1000);

// Zagon prenosa I2C

Wire.beginTransmission (Addr);

// Izberite register podatkov

Wire.write (0x00);

// Ustavi prenos I2C

Wire.endTransmission ();

// Zahtevajte 6 bajtov podatkov

Wire.requestFrom (Addr, 6);

// prebere 6 bajtov podatkov z naslova 0x00 (00)

// status, tHeight msb1, tHeight msb, tHeight lsb, temp msb, temp lsb

če (Wire.available () == 6)

{

podatki [0] = Wire.read ();

podatki [1] = Wire.read ();

podatki [2] = Wire.read ();

podatki [3] = Wire.read ();

podatki [4] = Wire.read ();

podatki [5] = Wire.read ();

}

// Pretvorimo podatke v 20-bitne

int tHeight = (((dolga) (podatki [1] * (dolga) 65536) + (podatki [2] * 256) + (podatki [3] & 0xF0)) / 16);

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

plavajoča nadmorska višina = tHeight / 16,0;

float cTemp = (temp / 16,0);

float fTemp = cTemp * 1,8 + 32;

// Zagon prenosa I2C

Wire.beginTransmission (Addr);

// Izberite kontrolni register

Wire.write (0x26);

// Aktivni način, OSR = 128, način barometra

Wire.write (0x39);

// Ustavi prenos I2C

Wire.endTransmission ();

zamuda (1000);

// Zagon prenosa I2C

Wire.beginTransmission (Addr);

// Izberite register podatkov

Wire.write (0x00);

// Ustavi prenos I2C

Wire.endTransmission ();

// Zahtevajte 4 bajte podatkov

Wire.requestFrom (Addr, 4);

// Branje 4 bajtov podatkov

// stanje, pres msb1, pres msb, pres lsb

če (Wire.available () == 4)

{

podatki [0] = Wire.read ();

podatki [1] = Wire.read ();

podatki [2] = Wire.read ();

podatki [3] = Wire.read ();

}

// Pretvorimo podatke v 20-bitne

dolga pres = (((dolgi) podatki [1] * (dolgi) 65536) + (podatki [2] * 256) + (podatki [3] & 0xF0)) / 16;

tlak plovca = (pres / 4.0) / 1000.0;

// Izhodni podatki na serijski monitor

Serial.print ("Nadmorska višina:");

Serial.print (nadmorska višina);

Serial.println ("m");

Serial.print ("Tlak:");

Serijski.tisk (tlak);

Serial.println ("kPa");

Serial.print ("Temperatura v Celzijusi:");

Serial.print (cTemp);

Serial.println ("C");

Serial.print ("Temperatura v Fahrenheitu:");

Serial.print (fTemp);

Serial.println ("F");

zamuda (500);

}

4. korak: Aplikacije:

Različne aplikacije MPL3115A2 vključujejo visoko natančnost altimetrije, pametne telefone/tablične računalnike, višino osebne elektronike itd. Lahko se vključijo tudi v GPS mrtve obračune, izboljšavo GPS za službe v sili, pomoč pri zemljevidih, navigacijo in opremo vremenskih postaj.

Priporočena: