Innholdsfortegnelse:

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

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

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

MPL3115A2 bruker en MEMS -trykksensor med et I2C -grensesnitt for å gi nøyaktige trykk-/høyde- og temperaturdata. Sensorutgangene digitaliseres med en høyoppløselig 24-biters ADC. Intern behandling fjerner kompensasjonsoppgaver fra verts -MCU -systemet. Den er i stand til å oppdage en endring på bare 0,05 kPa som tilsvarer en endring i høyde på 0,3 m. Her er demonstrasjonen med Arduino Nano.

Trinn 1: Hva du trenger..

Hva trenger du..!!
Hva trenger du..!!

1. Arduino Nano

2. MPL3115A2

3. I²C -kabel

4. I²C -skjold for Arduino Nano

Trinn 2: Tilkoblinger:

Tilkoblinger
Tilkoblinger
Tilkoblinger
Tilkoblinger
Tilkoblinger
Tilkoblinger
Tilkoblinger
Tilkoblinger

Ta et I2C -skjold for Arduino Nano og skyv det forsiktig over pinnene på Nano.

Koble deretter den ene enden av I2C -kabelen til MPL3115A2 -sensoren og den andre enden til I2C -skjoldet.

Tilkoblinger er vist på bildet ovenfor.

Trinn 3: Kode:

Kode
Kode

Arduino-koden for MPL3115A2 kan lastes ned fra vårt github-depot-DCUBE Store.

Her er lenken til det samme:

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

Vi inkluderer bibliotek Wire.h for å lette I2c -kommunikasjonen av sensoren med Arduino -kortet.

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

// Distribuert med en fri viljelisens.

// Bruk den slik du vil, profitt eller gratis, forutsatt at den passer inn i lisensene til de tilhørende verkene.

// MPL3115A2

// Denne koden er designet for å fungere med MPL3115A2_I2CS I2C Mini Module

#inkludere

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

#define Addr 0x60

ugyldig oppsett ()

{

// Initialiser I2C -kommunikasjon

Wire.begin ();

// Initialize Serial Communication, set baud rate = 9600

Serial.begin (9600);

// Start I2C -overføring

Wire.beginTransmission (Addr);

// Velg kontrollregister

Wire.write (0x26);

// Aktiv modus, OSR = 128, høydemåler modus

Wire.write (0xB9);

// Stopp I2C -overføring

Wire.endTransmission ();

// Start I2C -overføring

Wire.beginTransmission (Addr);

// Velg datakonfigurasjonsregister

Wire.write (0x13);

// Dataklar hendelse aktivert for høyde, trykk, temperatur

Wire.write (0x07);

// Stopp I2C -overføring

Wire.endTransmission ();

forsinkelse (300);

}

hulrom ()

{

usignerte int -data [6];

// Start I2C -overføring

Wire.beginTransmission (Addr);

// Velg kontrollregister

Wire.write (0x26);

// Aktiv modus, OSR = 128, høydemåler modus

Wire.write (0xB9);

// Stopp I2C -overføring

Wire.endTransmission ();

forsinkelse (1000);

// Start I2C -overføring

Wire.beginTransmission (Addr);

// Velg dataregister

Wire.write (0x00);

// Stopp I2C -overføring

Wire.endTransmission ();

// Be om 6 byte med data

Wire.requestFrom (Addr, 6);

// Les 6 byte 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-bits

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

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

flytehøyde = tHeight / 16,0;

float cTemp = (temp / 16,0);

float fTemp = cTemp * 1,8 + 32;

// Start I2C -overføring

Wire.beginTransmission (Addr);

// Velg kontrollregister

Wire.write (0x26);

// Aktiv modus, OSR = 128, barometer modus

Wire.write (0x39);

// Stopp I2C -overføring

Wire.endTransmission ();

forsinkelse (1000);

// Start I2C -overføring

Wire.beginTransmission (Addr);

// Velg dataregister

Wire.write (0x00);

// Stopp I2C -overføring

Wire.endTransmission ();

// Be om 4 byte med data

Wire.requestFrom (Addr, 4);

// Les 4 byte med 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-bits

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

flytrykk = (pres / 4.0) / 1000.0;

// Utdata til seriell skjerm

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

Serial.print (høyde);

Serial.println ("m");

Serial.print ("Trykk:");

Serial.print (trykk);

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

}

Trinn 4: Søknader:

Ulike bruksområder for MPL3115A2 inkluderer høy nøyaktighet altimetri, smarttelefoner/nettbrett, personlig elektronikk altimetri osv. Den kan også integreres i GPS Dead Reckoning, GPS Enhancement for Emergency Services, Map Assist, Navigasjon samt værstasjonsutstyr.

Anbefalt: