2025 Autor: John Day | [email protected]. Zadnja izmjena: 2025-01-13 06:57
MPL3115A2 koristi MEMS senzor pritiska sa I2C interfejsom za pružanje tačnih podataka o pritisku/nadmorskoj visini i temperaturi. Izlazi senzora digitalizirani su 24-bitnim ADC-om visoke rezolucije. Interna obrada uklanja zadatke kompenzacije iz host MCU sistema. Sposoban je otkriti promjenu od samo 0,05 kPa, što je jednako promjeni visine 0,3 m. Evo njegove demonstracije sa česticama fotona.
Korak 1: Šta vam treba..
1. Foton čestica
2. MPL3115A2
3. I²C kabel
4. I²C štit za čestice fotona
Korak 2: Veze:
Uzmite I2C štit za foton čestice i nježno ga gurnite preko igle fotona čestica.
Zatim spojite jedan kraj I2C kabela na senzor MPL3115A2, a drugi kraj na I2C štit.
Veze su prikazane na gornjoj slici.
Korak 3: Kod:
Kod čestica za MPL3115A2 može se preuzeti sa našeg Github spremišta-DCUBE Store.
Evo linka.
Za kod čestica koristili smo dvije biblioteke, a to su application.h i spark_wiring_i2c.h. Za olakšavanje I2C komunikacije sa senzorom potrebna je biblioteka Spark_wiring_i2c.
Kôd možete i kopirati odavde, dat je na sljedeći način:
// Distribuirano s licencom za slobodnu volju.
// Koristite ga kako god želite, profitno ili besplatno, pod uvjetom da se uklapa u licence povezanih djela.
// MPL3115A2
// Ovaj kod je dizajniran za rad s MPL3115A2_I2CS I2C mini modulom
#include
#include
// MPL3115A2 I2C adresa je 0x60 (96)
#define Addr 0x60
plovak cTemp = 0,0, fTemp = 0,0, pritisak = 0,0, nadmorska visina = 0,0;
int temp = 0, tHeight = 0; long pres = 0;
void setup ()
{
// Postavi varijablu
Particle.variable ("i2cdevice", "MPL3115A2");
Particle.variable ("cTemp", cTemp);
Čestica.varijabilna ("pritisak", pritisak);
Particle.variable ("visina", nadmorska visina);
// Inicijalizacija I2C komunikacije
Wire.begin ();
// Pokrećemo serijsku komunikaciju, postavljena brzina prijenosa = 9600
Serial.begin (9600);
// Pokretanje I2C prijenosa
Wire.beginTransmission (Addr);
// Odabir kontrolnog registra
Wire.write (0x26);
// Aktivni način rada, OSR = 128, način rada visinomera
Wire.write (0xB9);
// Zaustavljanje I2C prijenosa
Wire.endTransmission ();
// Pokretanje I2C prijenosa
Wire.beginTransmission (Addr);
// Odabir registra konfiguracije podataka
Wire.write (0x13);
// Omogućen događaj spremnosti podataka za nadmorsku visinu, pritisak, temperaturu
Wire.write (0x07);
// Zaustavljanje I2C prijenosa
Wire.endTransmission ();
kašnjenje (300);
}
void loop ()
{
nepotpisani int podaci [6];
// Pokretanje I2C prijenosa
Wire.beginTransmission (Addr);
// Odabir kontrolnog registra
Wire.write (0x26);
// Aktivni način rada, OSR = 128, način rada visinomera
Wire.write (0xB9);
// Zaustavljanje I2C prijenosa
Wire.endTransmission ();
kašnjenje (1000);
// Pokretanje I2C prijenosa
Wire.beginTransmission (Addr);
// Odabir registra podataka
Wire.write (0x00);
// Zaustavljanje I2C prijenosa
Wire.endTransmission ();
// Zatražite 6 bajta podataka
Wire.requestFrom (Addr, 6);
// Očitavanje 6 bajtova podataka s adrese 0x00 (00)
// status, tHeight msb1, tHeight msb, tHeight lsb, temp msb, temp lsb
if (Wire.available () == 6)
{
podaci [0] = Wire.read ();
podaci [1] = Wire.read ();
podaci [2] = Wire.read ();
podaci [3] = Wire.read ();
podaci [4] = Wire.read ();
podaci [5] = Wire.read ();
}
// Pretvorimo podatke u 20-bitne
tHeight = ((((dugački) podaci [1] * (dugi) 65536) + (podaci [2] * 256) + (podaci [3] & 0xF0)) / 16);
temp = ((podaci [4] * 256) + (podaci [5] & 0xF0)) / 16;
nadmorska visina = tHeight / 16,0;
cTemp = (temp / 16.0);
fTemp = cTemp * 1,8 + 32;
// Pokretanje I2C prijenosa
Wire.beginTransmission (Addr);
// Odabir kontrolnog registra
Wire.write (0x26);
// Aktivni način rada, OSR = 128, način rada barometra
Wire.write (0x39);
// Zaustavljanje I2C prijenosa
Wire.endTransmission ();
// Pokretanje I2C prijenosa
Wire.beginTransmission (Addr);
// Odabir registra podataka
Wire.write (0x00);
// Zaustavljanje I2C prijenosa
Wire.endTransmission ();
kašnjenje (1000);
// Zatražite 4 bajta podataka
Wire.requestFrom (Addr, 4);
// Očitavanje 4 bajta podataka
// status, pres msb1, pres msb, pres lsb
if (Wire.available () == 4)
{
podaci [0] = Wire.read ();
podaci [1] = Wire.read ();
podaci [2] = Wire.read ();
podaci [3] = Wire.read ();
}
// Pretvorimo podatke u 20-bitne
pres = (((dugi) podaci [1] * (dugi) 65536) + (podaci [2] * 256) + (podaci [3] & 0xF0)) / 16;
pritisak = (pres / 4,0) / 1000,0;
// Izlaženje podataka na nadzornu ploču
Particle.publish ("Visina:", String (nadmorska visina));
Particle.publish ("Pritisak:", niz (pritisak));
Particle.publish ("Temperatura u Celzijusima:", String (cTemp));
Particle.publish ("Temperatura u Fahrenheitu:", String (fTemp));
kašnjenje (1000);
}
Korak 4: Aplikacije:
Različite primjene MPL3115A2 uključuju altimetriju visoke preciznosti, pametne telefone/tablete, altimetriju lične elektronike itd. Također se može uključiti u GPS mrtvo računanje, GPS poboljšanje za hitne službe, pomoć pri mapiranju, navigaciju kao i opremu meteorološke stanice.