2025 Autor: John Day | [email protected]. E modifikuara e fundit: 2025-01-13 06:58
MPL3115A2 përdor një sensor presioni MEMS me një ndërfaqe I2C për të siguruar të dhëna të sakta të Presionit/Lartësisë dhe Temperaturës. Daljet e sensorit digjitalizohen nga një ADC me rezolucion të lartë 24-bit. Përpunimi i brendshëm heq detyrat e kompensimit nga sistemi pritës MCU. Shtë i aftë të zbulojë një ndryshim në vetëm 0.05 kPa që barazohet me një ndryshim 0.3m në lartësi. Këtu është demonstrimi i tij me Arduino Nano.
Hapi 1: Ajo që ju nevojitet.. !
1. Arduino Nano
2. MPL3115A2
3. Kabllo I²C
4. Mburoja I²C për Arduino Nano
Hapi 2: Lidhjet:
Merrni një mburojë I2C për Arduino Nano dhe shtyjeni butësisht mbi kunjat e Nanos.
Pastaj lidhni njërin skaj të kabllit I2C me sensorin MPL3115A2 dhe skajin tjetër me mburojën I2C.
Lidhjet janë treguar në figurën e mësipërme.
Hapi 3: Kodi:
Kodi arduino për MPL3115A2 mund të shkarkohet nga depoja jonë github-Dyqani DCUBE.
Këtu është lidhja për të njëjtën gjë:
github.com/DcubeTechVentures/MPL3115A2/blob/master/Arduino/MPL3115A2.ino
Ne përfshijmë bibliotekën Wire.h për të lehtësuar komunikimin I2c të sensorit me bordin Arduino.
Ju gjithashtu mund të kopjoni kodin nga këtu, ai jepet si më poshtë:
// Shpërndarë me një licencë me vullnet të lirë.
// Përdoreni atë në çdo mënyrë që dëshironi, fitimprurëse ose falas, me kusht që të përshtatet në licencat e veprave të tij shoqëruese.
// MPL3115A2
// Ky kod është krijuar për të punuar me Mini Modulin MPL3115A2_I2CS I2C
#përfshi
// Adresa MPL3115A2 I2C është 0x60 (96)
#përcaktoni Addr 0x60
void setup ()
{
// Filloni komunikimin I2C
Wire.begin ();
// Filloni Komunikimin Serial, vendosur normën e baudit = 9600
Serial.filloj (9600);
// Filloni transmetimin I2C
Wire.beginTransmetimi (Addr);
// Zgjidhni regjistrin e kontrollit
Wire.write (0x26);
// Mënyra aktive, OSR = 128, mënyra e lartësimatës
Wire.write (0xB9);
// Ndaloni transmetimin I2C
Wire.endTransmission ();
// Filloni transmetimin I2C
Wire.beginTransmetimi (Addr);
// Zgjidhni regjistrin e konfigurimit të të dhënave
Wire.write (0x13);
// Ngjarja e gatshme për të dhëna e aktivizuar për lartësinë, presionin, temperaturën
Wire.write (0x07);
// Ndaloni transmetimin I2C
Wire.endTransmission ();
vonesë (300);
}
lak void ()
{
të dhëna int të panënshkruara [6];
// Filloni transmetimin I2C
Wire.beginTransmetimi (Addr);
// Zgjidhni regjistrin e kontrollit
Wire.write (0x26);
// Mënyra aktive, OSR = 128, mënyra e lartësimatës
Wire.write (0xB9);
// Ndaloni transmetimin I2C
Wire.endTransmission ();
vonesa (1000);
// Filloni transmetimin I2C
Wire.beginTransmetimi (Addr);
// Zgjidh regjistrin e të dhënave
Wire.write (0x00);
// Ndaloni transmetimin I2C
Wire.endTransmission ();
// Kërkoni 6 bajt të dhëna
Tela. Kërkohet Nga (Addr, 6);
// Lexoni 6 bajt të dhëna nga adresa 0x00 (00)
// statusi, tHeight msb1, tHeight msb, tHeight lsb, temp msb, temp lsb
nëse (Wire. në dispozicion () == 6)
{
të dhëna [0] = Wire.read ();
të dhëna [1] = Wire.read ();
të dhëna [2] = Wire.read ();
të dhëna [3] = Wire.read ();
të dhëna [4] = Wire.read ();
të dhëna [5] = Wire.read ();
}
// Shndërroni të dhënat në 20-bit
int tHeight = (((e gjatë) (të dhënat [1] * (e gjatë) 65536) + (të dhënat [2] * 256) + (të dhënat [3] & 0xF0)) / 16);
int temp = ((të dhënat [4] * 256) + (të dhënat [5] & 0xF0)) / 16;
lartësia e notit = tHeight / 16.0;
noton cTemp = (temp / 16.0);
noton fTemp = cTemp * 1.8 + 32;
// Filloni transmetimin I2C
Wire.beginTransmetimi (Addr);
// Zgjidhni regjistrin e kontrollit
Wire.write (0x26);
// Mënyra aktive, OSR = 128, mënyra e barometrit
Wire.write (0x39);
// Ndaloni transmetimin I2C
Wire.endTransmission ();
vonesa (1000);
// Filloni transmetimin I2C
Wire.beginTransmetimi (Addr);
// Zgjidh regjistrin e të dhënave
Wire.write (0x00);
// Ndaloni transmetimin I2C
Wire.endTransmission ();
// Kërkoni 4 bajt të dhëna
Tela. Kërkohet Nga (Addr, 4);
// Lexoni 4 bajt të dhëna
// statusi, pres msb1, pres msb, pres lsb
nëse (Wire. në dispozicion () == 4)
{
të dhëna [0] = Wire.read ();
të dhëna [1] = Wire.read ();
të dhëna [2] = Wire.read ();
të dhëna [3] = Wire.read ();
}
// Shndërroni të dhënat në 20-bit
pres i gjatë = (((i gjatë) të dhëna [1] * (i gjatë) 65536) + (të dhëna [2] * 256) + (të dhëna [3] & 0xF0)) / 16;
presioni notues = (pres / 4.0) / 1000.0;
// Dalja e të dhënave në monitorin serik
Serial.print ("Lartësia mbidetare:");
Serial.print (lartësia);
Serial.println ("m");
Serial.print ("Presioni:");
Serial.print (presion);
Serial.println ("kPa");
Serial.print ("Temperatura në Celsius:");
Serial.print (cTemp);
Serial.println ("C");
Serial.print ("Temperatura në Fahrenheit:");
Serial.print (fTemp);
Serial.println ("F");
vonesë (500);
}
Hapi 4: Aplikimet:
Aplikime të ndryshme të MPL3115A2 përfshijnë Altimetri të Saktësisë së Lartë, Smartphone/Tableta, Elektronikë Personale Altimetri etj. Gjithashtu mund të inkorporohet në llogaritjen e vdekur të GPS, Përmirësimi i GPS për Shërbimet e Emergjencave, Ndihma në Hartë, Lundrimi si dhe Pajisjet e Stacionit Moti.