Inhaltsverzeichnis:

Arduino Nano - Präzisions-Höhenmesser-Sensor-Tutorial MPL3115A2 - Gunook
Arduino Nano - Präzisions-Höhenmesser-Sensor-Tutorial MPL3115A2 - Gunook

Video: Arduino Nano - Präzisions-Höhenmesser-Sensor-Tutorial MPL3115A2 - Gunook

Video: Arduino Nano - Präzisions-Höhenmesser-Sensor-Tutorial MPL3115A2 - Gunook
Video: MS5611 Barometer/Altimeter Tutorial with Arduino || BME280 vs MS5611 Comparison 2024, Juli
Anonim
Image
Image

Der MPL3115A2 verwendet einen MEMS-Drucksensor mit einer I2C-Schnittstelle, um genaue Druck-/Höhen- und Temperaturdaten bereitzustellen. Die Sensorausgänge werden von einem hochauflösenden 24-Bit-ADC digitalisiert. Die interne Verarbeitung entfernt Kompensationsaufgaben vom Host-MCU-System. Es ist in der Lage, eine Änderung in nur 0,05 kPa zu erkennen, was einer Höhenänderung von 0,3 m entspricht. Hier ist seine Demonstration mit Arduino Nano.

Schritt 1: Was Sie brauchen.

Was du brauchst..!!
Was du brauchst..!!

1. Arduino Nano

2. MPL3115A2

3. I²C-Kabel

4. I²C-Schild für Arduino Nano

Schritt 2: Anschlüsse:

Anschlüsse
Anschlüsse
Anschlüsse
Anschlüsse
Anschlüsse
Anschlüsse
Anschlüsse
Anschlüsse

Nehmen Sie ein I2C-Shield für Arduino Nano und schieben Sie es vorsichtig über die Pins von Nano.

Verbinden Sie dann das eine Ende des I2C-Kabels mit dem MPL3115A2-Sensor und das andere Ende mit der I2C-Abschirmung.

Die Anschlüsse sind im Bild oben dargestellt.

Schritt 3: Code:

Code
Code

Der Arduino-Code für MPL3115A2 kann von unserem Github-Repository-DCUBE Store heruntergeladen werden.

Hier der Link dazu:

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

Wir binden die Bibliothek Wire.h ein, um die I2c-Kommunikation des Sensors mit dem Arduino-Board zu erleichtern.

Sie können den Code auch von hier kopieren, er wird wie folgt angegeben:

// Wird mit einer frei wählbaren Lizenz vertrieben.

// Verwenden Sie es, wie Sie wollen, gewinnbringend oder kostenlos, sofern es in die Lizenzen der zugehörigen Werke passt.

// MPL3115A2

// Dieser Code wurde entwickelt, um mit dem MPL3115A2_I2CS I2C Mini Module zu arbeiten

#enthalten

// MPL3115A2 I2C-Adresse ist 0x60(96)

#define Addr 0x60

Void-Setup ()

{

// I2C-Kommunikation initialisieren

Wire.begin();

// Serielle Kommunikation initialisieren, Baudrate = 9600. einstellen

Serial.begin (9600);

// I2C-Übertragung starten

Wire.beginTransmission(Addr);

// Steuerregister auswählen

Wire.write (0x26);

// Aktiver Modus, OSR = 128, Höhenmessermodus

Wire.write(0xB9);

// I2C-Übertragung stoppen

Wire.endTransmission();

// I2C-Übertragung starten

Wire.beginTransmission(Addr);

// Datenkonfigurationsregister auswählen

Wire.write (0x13);

// Datenbereit-Ereignis für Höhe, Druck, Temperatur aktiviert

Wire.write (0x07);

// I2C-Übertragung stoppen

Wire.endTransmission();

Verzögerung (300);

}

Leere Schleife ()

{

unsignierte int-Daten[6];

// I2C-Übertragung starten

Wire.beginTransmission(Addr);

// Steuerregister auswählen

Wire.write (0x26);

// Aktiver Modus, OSR = 128, Höhenmessermodus

Wire.write(0xB9);

// I2C-Übertragung stoppen

Wire.endTransmission();

Verzögerung (1000);

// I2C-Übertragung starten

Wire.beginTransmission(Addr);

// Datenregister auswählen

Wire.write (0x00);

// I2C-Übertragung stoppen

Wire.endTransmission();

// 6 Byte Daten anfordern

Wire.requestFrom(Addr, 6);

// 6 Byte Daten von Adresse 0x00(00) lesen

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

if (Draht.verfügbar() == 6)

{

data[0] = Wire.read();

data[1] = Wire.read();

data[2] = Wire.read();

Daten[3] = Wire.read();

data[4] = Wire.read();

data[5] = Wire.read();

}

// Konvertieren Sie die Daten in 20-Bit

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

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

Schwebehöhe = tHeight / 16,0;

Schwimmer cTemp = (Temp / 16,0);

Schwimmer fTemp = cTemp * 1,8 + 32;

// I2C-Übertragung starten

Wire.beginTransmission(Addr);

// Steuerregister auswählen

Wire.write (0x26);

// Aktiver Modus, OSR = 128, Barometermodus

Wire.write (0x39);

// I2C-Übertragung stoppen

Wire.endTransmission();

Verzögerung (1000);

// I2C-Übertragung starten

Wire.beginTransmission(Addr);

// Datenregister auswählen

Wire.write (0x00);

// I2C-Übertragung stoppen

Wire.endTransmission();

// 4 Byte Daten anfordern

Wire.requestFrom(Addr, 4);

// 4 Byte Daten lesen

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

if (Draht.verfügbar() == 4)

{

data[0] = Wire.read();

data[1] = Wire.read();

data[2] = Wire.read();

Daten[3] = Wire.read();

}

// Konvertieren Sie die Daten in 20-Bit

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

Schwimmerdruck = (pres / 4,0) / 1000,0;

// Daten an seriellen Monitor ausgeben

Serial.print ("Höhe: ");

Serial.print (Höhe);

Serial.println("m");

Serial.print ("Druck:");

Serial.print (Druck);

Serial.println("kPa");

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

Serial.print (cTemp);

Serial.println("C");

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

Serial.print (fTemp);

Serial.println("F");

Verzögerung (500);

}

Schritt 4: Anwendungen:

Zu den verschiedenen Anwendungen des MPL3115A2 gehören hochgenaue Höhenmessung, Smartphones/Tablets, persönliche elektronische Höhenmessung usw. Es kann auch in GPS-Dead Reckoning, GPS-Erweiterung für Rettungsdienste, Kartenassistent, Navigation sowie Wetterstationsausrüstung integriert werden.

Empfohlen: