Inhoudsopgave:
2025 Auteur: John Day | [email protected]. Laatst gewijzigd: 2025-01-13 06:57
De MPL3115A2 maakt gebruik van een MEMS-druksensor met een I2C-interface om nauwkeurige druk-/hoogte- en temperatuurgegevens te leveren. De sensoruitgangen worden gedigitaliseerd door een 24-bits ADC met hoge resolutie. Interne verwerking verwijdert compensatietaken van het host-MCU-systeem. Het is in staat om een verandering van slechts 0,05 kPa te detecteren, wat overeenkomt met een hoogteverandering van 0,3 m. Hier is de demonstratie met Arduino Nano.
Stap 1: Wat je nodig hebt.
1. Arduino Nano
2. MPL3115A2
3. I²C-kabel
4. I²C-schild voor Arduino Nano
Stap 2: Aansluitingen:
Neem een I2C-schild voor Arduino Nano en duw het voorzichtig over de pinnen van Nano.
Sluit vervolgens het ene uiteinde van de I2C-kabel aan op de MPL3115A2-sensor en het andere uiteinde op de I2C-afscherming.
De aansluitingen zijn weergegeven in de afbeelding hierboven.
Stap 3: Coderen:
De arduino-code voor MPL3115A2 kan worden gedownload van onze github-repository-DCUBE Store.
Hier is de link voor hetzelfde:
github.com/DcubeTechVentures/MPL3115A2/blob/master/Arduino/MPL3115A2.ino
We nemen bibliotheek Wire.h op om de I2c-communicatie van de sensor met het Arduino-bord te vergemakkelijken.
U kunt de code ook hier kopiëren, deze wordt als volgt gegeven:
// Gedistribueerd met een vrije wilslicentie.
// Gebruik het zoals je wilt, winst of gratis, op voorwaarde dat het past in de licenties van de bijbehorende werken.
// MPL3115A2
// Deze code is ontworpen om te werken met de MPL3115A2_I2CS I2C Mini Module
#erbij betrekken
// MPL3115A2 I2C-adres is 0x60(96)
#define Addr 0x60
ongeldige setup()
{
// Initialiseer I2C-communicatie
Draad.begin();
// Initialiseer seriële communicatie, stel baudrate in = 9600
Serieel.begin(9600);
// Start I2C-transmissie
Wire.beginTransmission (Addr);
// Selecteer controleregister
Draad.schrijven (0x26);
// Actieve modus, OSR = 128, hoogtemetermodus
Draad.schrijven (0xB9);
// Stop I2C-transmissie
Wire.endTransmission();
// Start I2C-transmissie
Wire.beginTransmission (Addr);
// Selecteer dataconfiguratieregister
Draad.schrijven (0x13);
// Gegevens gereedgebeurtenis ingeschakeld voor hoogte, druk, temperatuur
Draad.schrijven (0x07);
// Stop I2C-transmissie
Wire.endTransmission();
vertraging (300);
}
lege lus()
{
niet-ondertekende int-gegevens[6];
// Start I2C-transmissie
Wire.beginTransmission (Addr);
// Selecteer controleregister
Draad.schrijven (0x26);
// Actieve modus, OSR = 128, hoogtemetermodus
Draad.schrijven (0xB9);
// Stop I2C-transmissie
Wire.endTransmission();
vertraging (1000);
// Start I2C-transmissie
Wire.beginTransmission (Addr);
// Selecteer dataregister
Draad.schrijven (0x00);
// Stop I2C-transmissie
Wire.endTransmission();
// Vraag 6 bytes aan gegevens aan
Wire.requestFrom(Addr, 6);
// Lees 6 bytes aan gegevens van adres 0x00(00)
// status, tHeight msb1, tHeight msb, tHeight lsb, tijdelijke msb, tijdelijke lsb
if (Draad.beschikbaar() == 6)
{
data[0] = Draad.lezen();
data[1] = Draad.lezen();
data[2] = Draad.lezen();
data[3] = Draad.lezen();
data[4] = Draad.lezen();
data[5] = Draad.lezen();
}
// Converteer de gegevens naar 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;
drijfhoogte = tHoogte / 16.0;
float cTemp = (temp / 16.0);
float fTemp = cTemp * 1.8 + 32;
// Start I2C-transmissie
Wire.beginTransmission (Addr);
// Selecteer controleregister
Draad.schrijven (0x26);
// Actieve modus, OSR = 128, barometermodus
Draad.schrijven (0x39);
// Stop I2C-transmissie
Wire.endTransmission();
vertraging (1000);
// Start I2C-transmissie
Wire.beginTransmission (Addr);
// Selecteer dataregister
Draad.schrijven (0x00);
// Stop I2C-transmissie
Wire.endTransmission();
// Vraag 4 bytes aan gegevens aan
Wire.requestFrom(Addr, 4);
// Lees 4 bytes aan gegevens
// status, pres msb1, pres msb, pres lsb
if (Draad.beschikbaar() == 4)
{
data[0] = Draad.lezen();
data[1] = Draad.lezen();
data[2] = Draad.lezen();
data[3] = Draad.lezen();
}
// Converteer de gegevens naar 20-bits
lange pres = (((long)data[1] * (long)65536) + (data[2] * 256) + (data[3] & 0xF0)) / 16;
vlotterdruk = (druk / 4,0) / 1000,0;
// Gegevens uitvoeren naar seriële monitor
Serial.print("Hoogte: ");
Serial.print(hoogte);
Serieel.println("m");
Serial.print("Druk: ");
Serieafdruk(druk);
Serieel.println ("kPa");
Serial.print ("Temperatuur in Celsius: ");
Serieel.print(cTemp);
Serieel.println("C");
Serial.print("Temperatuur in Fahrenheit: ");
Serieel.print(fTemp);
Serieel.println ("F");
vertraging (500);
}
Stap 4: Toepassingen:
Verschillende toepassingen van de MPL3115A2 omvatten hoogtemeting met hoge nauwkeurigheid, smartphones/tablets, hoogtemeting voor persoonlijke elektronica, enz. Het kan ook worden opgenomen in GPS-geschatte berekeningen, GPS-verbeteringen voor hulpdiensten, kaartassistentie, navigatie en weerstationapparatuur.