Obsah:

Arduino Nano - Výukový senzor přesného výškoměru MPL3115A2: 4 kroky
Arduino Nano - Výukový senzor přesného výškoměru MPL3115A2: 4 kroky

Video: Arduino Nano - Výukový senzor přesného výškoměru MPL3115A2: 4 kroky

Video: Arduino Nano - Výukový senzor přesného výškoměru MPL3115A2: 4 kroky
Video: How to Interface Industrial Sensors with Arduino Nano 2024, Listopad
Anonim
Image
Image

MPL3115A2 využívá tlakový senzor MEMS s rozhraním I2C, který poskytuje přesné údaje o tlaku/nadmořské výšce a teplotě. Výstupy senzorů jsou digitalizovány 24bitovým ADC s vysokým rozlišením. Interní zpracování odstraní úlohy kompenzace z hostitelského systému MCU. Je schopen detekovat změnu pouze o 0,05 kPa, což odpovídá změně výšky o 0,3 m. Zde je jeho ukázka s Arduino Nano.

Krok 1: Co potřebujete..

Co potřebuješ..!!
Co potřebuješ..!!

1. Arduino Nano

2. MPL3115A2

3. I²C kabel

4. I²C štít pro Arduino Nano

Krok 2: Připojení:

Připojení
Připojení
Připojení
Připojení
Připojení
Připojení
Připojení
Připojení

Vezměte štít I2C pro Arduino Nano a jemně jej zatlačte přes kolíky Nano.

Poté připojte jeden konec kabelu I2C k senzoru MPL3115A2 a druhý konec ke stínění I2C.

Připojení jsou znázorněna na obrázku výše.

Krok 3: Kód:

Kód
Kód

Arduino kód pro MPL3115A2 lze stáhnout z našeho úložiště github-DCUBE Store.

Zde je odkaz na totéž:

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

Zahrnujeme knihovnu Wire.h pro usnadnění I2c komunikace senzoru s deskou Arduino.

Odtud můžete také zkopírovat kód, který je uveden následovně:

// Distribuováno s licencí svobodné vůle.

// Používejte jej jakýmkoli způsobem, ať už ziskem nebo zdarma, za předpokladu, že se vejde do licencí souvisejících děl.

// MPL3115A2

// Tento kód je navržen tak, aby fungoval s mini modulem MPL3115A2_I2CS I2C

#zahrnout

// Adresa MPL3115A2 I2C je 0x60 (96)

#define Addr 0x60

neplatné nastavení ()

{

// Inicializace komunikace I2C

Wire.begin ();

// Inicializace sériové komunikace, nastavení přenosové rychlosti = 9600

Serial.begin (9600);

// Spusťte přenos I2C

Wire.beginTransmission (Addr);

// Vyberte řídicí registr

Wire.write (0x26);

// Aktivní režim, OSR = 128, režim výškoměru

Wire.write (0xB9);

// Zastavte přenos I2C

Wire.endTransmission ();

// Spusťte přenos I2C

Wire.beginTransmission (Addr);

// Vyberte registr konfigurace dat

Wire.write (0x13);

// Událost připravenosti dat povolena pro nadmořskou výšku, tlak, teplotu

Wire.write (0x07);

// Zastavte přenos I2C

Wire.endTransmission ();

zpoždění (300);

}

prázdná smyčka ()

{

nepodepsaná int data [6];

// Spusťte přenos I2C

Wire.beginTransmission (Addr);

// Vyberte řídicí registr

Wire.write (0x26);

// Aktivní režim, OSR = 128, režim výškoměru

Wire.write (0xB9);

// Zastavte přenos I2C

Wire.endTransmission ();

zpoždění (1000);

// Spusťte přenos I2C

Wire.beginTransmission (Addr);

// Vyberte datový registr

Wire.write (0x00);

// Zastavte přenos I2C

Wire.endTransmission ();

// Vyžádejte si 6 bajtů dat

Wire.requestFrom (Addr, 6);

// Přečíst 6 bajtů dat z adresy 0x00 (00)

// stav, tHeight msb1, tHeight msb, tHeight lsb, temp msb, temp lsb

pokud (Wire.available () == 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 ();

}

// Převod dat na 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;

plovoucí výška = tVýška / 16,0;

float cTemp = (temp / 16.0);

float fTemp = cTemp * 1,8 + 32;

// Spusťte přenos I2C

Wire.beginTransmission (Addr);

// Vyberte řídicí registr

Wire.write (0x26);

// Aktivní režim, OSR = 128, režim barometru

Wire.write (0x39);

// Zastavte přenos I2C

Wire.endTransmission ();

zpoždění (1000);

// Spusťte přenos I2C

Wire.beginTransmission (Addr);

// Vyberte datový registr

Wire.write (0x00);

// Zastavte přenos I2C

Wire.endTransmission ();

// Vyžádejte si 4 bajty dat

Wire.requestFrom (Addr, 4);

// Přečíst 4 bajty dat

// stav, pres msb1, pres msb, pres lsb

pokud (Wire.available () == 4)

{

data [0] = Wire.read ();

data [1] = Wire.read ();

data [2] = Wire.read ();

data [3] = Wire.read ();

}

// Převod dat na 20 bitů

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

plovoucí tlak = (pres / 4,0) / 1000,0;

// Výstup dat na sériový monitor

Serial.print ("Nadmořská výška:");

Sériový tisk (nadmořská výška);

Serial.println ("m");

Serial.print ("Tlak:");

Sériový tisk (tlak);

Serial.println ("kPa");

Serial.print ("Teplota ve stupních Celsia:");

Serial.print (cTemp);

Serial.println ("C");

Serial.print ("Teplota ve stupních Fahrenheita:");

Serial.print (fTemp);

Serial.println ("F");

zpoždění (500);

}

Krok 4: Aplikace:

Různé aplikace MPL3115A2 zahrnují vysoce přesnou výškoměr, smartphony/tablety, osobní elektronickou výškoměr atd. Lze jej také začlenit do systému GPS Dead Reckoning, GPS Enhancement pro záchranné služby, Map Assist, Navigation a vybavení meteorologické stanice.

Doporučuje: