Inhaltsverzeichnis:
2025 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2025-01-13 06:56
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.
1. Arduino Nano
2. MPL3115A2
3. I²C-Kabel
4. I²C-Schild für Arduino Nano
Schritt 2: 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:
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.