Indholdsfortegnelse:

Arduino Nano - MPL3115A2 Precision Altimeter Sensor Tutorial: 4 trin
Arduino Nano - MPL3115A2 Precision Altimeter Sensor Tutorial: 4 trin

Video: Arduino Nano - MPL3115A2 Precision Altimeter Sensor Tutorial: 4 trin

Video: Arduino Nano - MPL3115A2 Precision Altimeter Sensor Tutorial: 4 trin
Video: Arduino Nano - MPL3115A2 Precision Altimeter Sensor Tutorial 2024, Juli
Anonim
Image
Image

MPL3115A2 anvender en MEMS -trykføler med en I2C -grænseflade til at levere nøjagtige data om tryk/højde og temperatur. Sensorudgangene digitaliseres med en højopløselig 24-bit ADC. Intern behandling fjerner kompensationsopgaver fra værts -MCU -systemet. Det er i stand til at detektere en ændring på kun 0,05 kPa, hvilket svarer til en højdeændring på 0,3 m. Her er demonstrationen med Arduino Nano.

Trin 1: Hvad du har brug for..

Hvad du har brug for..!!
Hvad du har brug for..!!

1. Arduino Nano

2. MPL3115A2

3. I²C -kabel

4. I²C Shield til Arduino Nano

Trin 2: Forbindelser:

Tilslutninger
Tilslutninger
Tilslutninger
Tilslutninger
Tilslutninger
Tilslutninger
Tilslutninger
Tilslutninger

Tag et I2C -skjold til Arduino Nano og skub det forsigtigt hen over stifterne på Nano.

Tilslut derefter den ene ende af I2C -kablet til MPL3115A2 -sensoren og den anden ende til I2C -skærmen.

Forbindelser er vist på billedet ovenfor.

Trin 3: Kode:

Kode
Kode

Arduino-koden til MPL3115A2 kan downloades fra vores github repository-DCUBE Store.

Her er linket til det samme:

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

Vi inkluderer bibliotek Wire.h for at lette I2c -kommunikationen mellem sensoren og Arduino -kortet.

Du kan også kopiere koden herfra, den er givet som følger:

// Distribueret med en fri vilje licens.

// Brug den, som du vil, profit eller gratis, forudsat at den passer ind i licenserne til de tilhørende værker.

// MPL3115A2

// Denne kode er designet til at fungere med MPL3115A2_I2CS I2C Mini Module

#omfatte

// MPL3115A2 I2C -adressen er 0x60 (96)

#define Addr 0x60

ugyldig opsætning ()

{

// Initialiser I2C -kommunikation

Wire.begin ();

// Initialiser seriel kommunikation, indstil baudhastighed = 9600

Serial.begin (9600);

// Start I2C -transmission

Wire.beginTransmission (Addr);

// Vælg kontrolregister

Wire.write (0x26);

// Aktiv tilstand, OSR = 128, højdemåler -tilstand

Wire.write (0xB9);

// Stop I2C -transmission

Wire.endTransmission ();

// Start I2C -transmission

Wire.beginTransmission (Addr);

// Vælg datakonfigurationsregister

Wire.write (0x13);

// Dataklar begivenhed aktiveret for højde, tryk, temperatur

Wire.write (0x07);

// Stop I2C -transmission

Wire.endTransmission ();

forsinkelse (300);

}

hulrum ()

{

usignerede int -data [6];

// Start I2C -transmission

Wire.beginTransmission (Addr);

// Vælg kontrolregister

Wire.write (0x26);

// Aktiv tilstand, OSR = 128, højdemåler -tilstand

Wire.write (0xB9);

// Stop I2C -transmission

Wire.endTransmission ();

forsinkelse (1000);

// Start I2C -transmission

Wire.beginTransmission (Addr);

// Vælg dataregister

Wire.write (0x00);

// Stop I2C -transmission

Wire.endTransmission ();

// Anmod om 6 bytes data

Wire.requestFrom (Addr, 6);

// Læs 6 bytes data fra adresse 0x00 (00)

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

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

}

// Konverter dataene til 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;

flydehøjde = tHøjde / 16,0;

float cTemp = (temp / 16,0);

float fTemp = cTemp * 1,8 + 32;

// Start I2C -transmission

Wire.beginTransmission (Addr);

// Vælg kontrolregister

Wire.write (0x26);

// Aktiv tilstand, OSR = 128, barometer -tilstand

Wire.write (0x39);

// Stop I2C -transmission

Wire.endTransmission ();

forsinkelse (1000);

// Start I2C -transmission

Wire.beginTransmission (Addr);

// Vælg dataregister

Wire.write (0x00);

// Stop I2C -transmission

Wire.endTransmission ();

// Anmod om 4 bytes data

Wire.requestFrom (Addr, 4);

// Læs 4 bytes data

// status, pres msb1, pres msb, pres lsb

hvis (Wire.available () == 4)

{

data [0] = Wire.read ();

data [1] = Wire.read ();

data [2] = Wire.read ();

data [3] = Wire.read ();

}

// Konverter dataene til 20-bit

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

flydetryk = (pres / 4.0) / 1000.0;

// Output data til seriel skærm

Serial.print ("Højde:");

Serial.print (højde);

Serial.println ("m");

Serial.print ("Tryk:");

Serielt tryk (tryk);

Serial.println ("kPa");

Serial.print ("Temperatur i Celsius:");

Serial.print (cTemp);

Serial.println ("C");

Serial.print ("Temperatur i Fahrenheit:");

Serial.print (fTemp);

Serial.println ("F");

forsinkelse (500);

}

Trin 4: Ansøgninger:

Forskellige applikationer af MPL3115A2 inkluderer høj nøjagtigheds -altimetri, smartphones/tablets, personlig elektronik -altimetri osv. Det kan også inkorporeres i GPS Dead Reckoning, GPS -forbedring til nødservice, Map Assist, Navigation samt vejrstationsudstyr.

Anbefalede: