Turinys:

Dalelių fotonas - MPL3115A2 tikslaus aukščio matuoklio jutiklio pamoka: 4 žingsniai
Dalelių fotonas - MPL3115A2 tikslaus aukščio matuoklio jutiklio pamoka: 4 žingsniai

Video: Dalelių fotonas - MPL3115A2 tikslaus aukščio matuoklio jutiklio pamoka: 4 žingsniai

Video: Dalelių fotonas - MPL3115A2 tikslaus aukščio matuoklio jutiklio pamoka: 4 žingsniai
Video: Ar šviesa yra banga ar dalelė? | Fizika prie kavos 2024, Birželis
Anonim
Image
Image

MPL3115A2 naudojamas MEMS slėgio jutiklis su I2C sąsaja, kad būtų gauti tikslūs slėgio/aukščio ir temperatūros duomenys. Jutiklių išėjimai yra skaitmeninami didelės skiriamosios gebos 24 bitų ADC. Vidinis apdorojimas pašalina kompensavimo užduotis iš pagrindinės MCU sistemos. Jis gali aptikti tik 0,05 kPa pokytį, o tai prilygsta 0,3 m aukščio pokyčiui. Čia yra jo demonstravimas su dalelių fotonu.

1 žingsnis: ko jums reikia..

Ko tau reikia..!!
Ko tau reikia..!!

1. Dalelių fotonas

2. MPL3115A2

3. I²C kabelis

4. I²C skydas dalelių fotonui

2 žingsnis: jungtys:

Sujungimai
Sujungimai
Sujungimai
Sujungimai
Sujungimai
Sujungimai
Sujungimai
Sujungimai

Paimkite dalelių fotono I2C skydą ir švelniai stumkite jį ant dalelių fotono kaiščių.

Tada vieną I2C kabelio galą prijunkite prie MPL3115A2 jutiklio, o kitą - prie I2C skydo.

Sujungimai parodyti aukščiau esančiame paveikslėlyje.

3 žingsnis: kodas:

Kodas
Kodas

MPL3115A2 dalelių kodą galima atsisiųsti iš mūsų „Github“saugyklos-DCUBE parduotuvės.

Čia yra nuoroda.

Dalelių kodui panaudojome dvi bibliotekas - application.h ir spark_wiring_i2c.h. Norint palengvinti I2C ryšį su jutikliu, reikalinga „Spark_wiring_i2c“biblioteka.

Taip pat galite nukopijuoti kodą iš čia, jis pateikiamas taip:

// Platinama su laisvos valios licencija.

// Naudokite bet kokiu būdu, pelningai ar nemokamai, jei jis atitinka susijusių darbų licencijas.

// MPL3115A2

// Šis kodas skirtas dirbti su MPL3115A2_I2CS I2C mini moduliu

#įtraukti

#įtraukti

// MPL3115A2 I2C adresas yra 0x60 (96)

#define Addr 0x60

plūdė cTemp = 0.0, fTemp = 0.0, slėgis = 0.0, aukštis = 0.0;

int temp = 0, tAukštis = 0; ilgas presas = 0;

negaliojanti sąranka ()

{

// Nustatyti kintamąjį

Dalelių kintamasis ("i2cdevice", "MPL3115A2");

Particle.variable ("cTemp", cTemp);

Dalelė.kintamas ("slėgis", slėgis);

Dalelė.kintamasis ("aukštis", aukštis);

// Inicijuoti I2C komunikaciją

Wire.begin ();

// Inicijuoti serijinį ryšį, nustatyti duomenų perdavimo spartą = 9600

Serial.begin (9600);

// Pradėti I2C perdavimą

Wire.beginTransmission (Addr);

// Pasirinkite valdymo registrą

Wire.write (0x26);

// Aktyvusis režimas, OSR = 128, altimetro režimas

Wire.write (0xB9);

// Sustabdyti I2C perdavimą

Wire.endTransmission ();

// Pradėti I2C perdavimą

Wire.beginTransmission (Addr);

// Pasirinkite duomenų konfigūracijos registrą

Wire.write (0x13);

// Įgalintas duomenų paruošimo įvykis aukščiui, slėgiui, temperatūrai

Wire.write (0x07);

// Sustabdyti I2C perdavimą

Wire.endTransmission ();

vėlavimas (300);

}

tuštumos kilpa ()

{

nepasirašyti int duomenys [6];

// Pradėti I2C perdavimą

Wire.beginTransmission (Addr);

// Pasirinkite valdymo registrą

Wire.write (0x26);

// Aktyvusis režimas, OSR = 128, altimetro režimas

Wire.write (0xB9);

// Sustabdyti I2C perdavimą

Wire.endTransmission ();

vėlavimas (1000);

// Pradėti I2C perdavimą

Wire.beginTransmission (Addr);

// Pasirinkite duomenų registrą

Wire.write (0x00);

// Sustabdyti I2C perdavimą

Wire.endTransmission ();

// Prašyti 6 baitų duomenų

Wire.requestFrom (Addr, 6);

// Perskaitykite 6 baitus duomenų iš adreso 0x00 (00)

// būsena, tHeight msb1, tHeight msb, tHeight lsb, temp msb, temp lsb

jei (Wire.available () == 6)

{

duomenys [0] = Wire.read ();

duomenys [1] = Wire.read ();

duomenys [2] = Wire.read ();

duomenys [3] = Wire.read ();

duomenys [4] = Wire.read ();

duomenys [5] = Wire.read ();

}

// Konvertuokite duomenis į 20 bitų

tAukštis = (((((ilgi)) duomenys [1] * (ilgas) 65536) + (duomenys [2] * 256) + (duomenys [3] ir 0xF0)) / 16);

temp = ((duomenys [4] * 256) + (duomenys [5] ir 0xF0)) / 16;

aukštis = tAukštis / 16,0;

cTemp = (temp / 16,0);

fTemp = cTemp * 1,8 + 32;

// Pradėti I2C perdavimą

Wire.beginTransmission (Addr);

// Pasirinkite valdymo registrą

Wire.write (0x26);

// Aktyvusis režimas, OSR = 128, barometro režimas

Wire.write (0x39);

// Sustabdyti I2C perdavimą

Wire.endTransmission ();

// Pradėti I2C perdavimą

Wire.beginTransmission (Addr);

// Pasirinkite duomenų registrą

Wire.write (0x00);

// Sustabdyti I2C perdavimą

Wire.endTransmission ();

vėlavimas (1000);

// Prašyti 4 baitų duomenų

Wire.requestFrom (Addr, 4);

// Perskaitykite 4 baitus duomenų

// status, pres msb1, pres msb, pres lsb

jei (Wire.available () == 4)

{

duomenys [0] = Wire.read ();

duomenys [1] = Wire.read ();

duomenys [2] = Wire.read ();

duomenys [3] = Wire.read ();

}

// Konvertuokite duomenis į 20 bitų

pres = (((ilgi) duomenys [1] * (ilgas) 65536) + (duomenys [2] * 256) + (duomenys [3] ir 0xF0)) / 16;

slėgis = (pres / 4,0) / 1000,0;

// Išvesti duomenis į prietaisų skydelį

Particle.publish ("Altitude:", String (altitude));

Particle.publish ("Slėgis:", Styga (slėgis));

Particle.publish ("Temperatūra Celsijaus laipsniais:", Styga (cTemp));

Particle.publish ("Temperatūra Farenheitu:", Styga (fTemp));

vėlavimas (1000);

}

4 žingsnis: programos:

Įvairios MPL3115A2 programos apima didelio tikslumo altimetriją, išmaniuosius telefonus/planšetinius kompiuterius, asmeninės elektronikos aukščio matavimus ir tt. Jis taip pat gali būti įtrauktas į GPS mirusiųjų skaičiavimą, GPS gerinimą skubios pagalbos tarnyboms, žemėlapio pagalbinę įrangą, navigaciją ir orų stoties įrangą.

Rekomenduojamas: