Sadržaj:

Foton čestica - Vodič za senzor preciznog visinomjera MPL3115A2: 4 koraka
Foton čestica - Vodič za senzor preciznog visinomjera MPL3115A2: 4 koraka

Video: Foton čestica - Vodič za senzor preciznog visinomjera MPL3115A2: 4 koraka

Video: Foton čestica - Vodič za senzor preciznog visinomjera MPL3115A2: 4 koraka
Video: Лучшие 3D-принтеры 2024 года: ТОП-5 моделей для ЛЮБОГО бюдж... 2024, Novembar
Anonim
Image
Image

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..

Sta ti treba..!!
Sta ti treba..!!

1. Foton čestica

2. MPL3115A2

3. I²C kabel

4. I²C štit za čestice fotona

Korak 2: Veze:

Veze
Veze
Veze
Veze
Veze
Veze
Veze
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:

Šifra
Šifra

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.

Preporučuje se: