Სარჩევი:

ნაწილაკების ფოტონი - MPL3115A2 ზუსტი სიმაღლემეტრის სენსორი გაკვეთილი: 4 ნაბიჯი
ნაწილაკების ფოტონი - MPL3115A2 ზუსტი სიმაღლემეტრის სენსორი გაკვეთილი: 4 ნაბიჯი

ვიდეო: ნაწილაკების ფოტონი - MPL3115A2 ზუსტი სიმაღლემეტრის სენსორი გაკვეთილი: 4 ნაბიჯი

ვიდეო: ნაწილაკების ფოტონი - MPL3115A2 ზუსტი სიმაღლემეტრის სენსორი გაკვეთილი: 4 ნაბიჯი
ვიდეო: ნაწილაკების ფიზიკა: შესავალი 2024, ივნისი
Anonim
Image
Image

MPL3115A2 იყენებს MEMS წნევის სენსორს I2C ინტერფეისით, რათა უზრუნველყოს წნევის/სიმაღლისა და ტემპერატურის ზუსტი მონაცემები. სენსორის გამოსასვლელი ციფრულდება მაღალი რეზოლუციის 24-ბიტიანი ADC საშუალებით. შიდა დამუშავება ხსნის კომპენსაციის ამოცანებს მასპინძელი MCU სისტემიდან. მას შეუძლია აღმოაჩინოს ცვლილება მხოლოდ 0.05 kPa– ში, რაც უდრის სიმაღლის 0.3 მ ცვლილებას. აქ არის მისი დემონსტრირება ნაწილაკების ფოტონთან ერთად.

ნაბიჯი 1: რაც გჭირდებათ..

Რა გჭირდება..!!
Რა გჭირდება..!!

1. ნაწილაკების ფოტონი

2. MPL3115A2

3. I²C კაბელი

4. ნაწილაკების ფოტონის I²C ფარი

ნაბიჯი 2: კავშირები:

კავშირები
კავშირები
კავშირები
კავშირები
კავშირები
კავშირები
კავშირები
კავშირები

აიღეთ I2C ფარი ნაწილაკების ფოტონისთვის და ნაზად გადაიტანეთ იგი ნაწილაკების ფოტონის ქინძისთავებზე.

შემდეგ შეაერთეთ I2C კაბელის ერთი ბოლო MPL3115A2 სენსორთან და მეორე ბოლო I2C ფარს.

კავშირები ნაჩვენებია ზემოთ მოცემულ სურათზე.

ნაბიჯი 3: კოდი:

კოდი
კოდი

MPL3115A2 ნაწილაკების კოდი შეგიძლიათ გადმოწეროთ ჩვენი Github საცავიდან-DCUBE Store.

აქ არის ბმული.

ჩვენ გამოვიყენეთ ორი ბიბლიოთეკა ნაწილაკების კოდისთვის, რომლებიც არის application.h და spark_wiring_i2c.h. Spark_wiring_i2c ბიბლიოთეკა საჭიროა სენსორთან I2C კომუნიკაციის გასაადვილებლად.

თქვენ ასევე შეგიძლიათ დააკოპიროთ კოდი აქედან, იგი მოცემულია შემდეგნაირად:

// განაწილებულია თავისუფალი ნების ლიცენზიით.

// გამოიყენეთ იგი ნებისმიერი ფორმით, როგორც გსურთ, მოგებით ან უფასოდ, იმ პირობით, რომ იგი ჯდება ლიცენზიებთან დაკავშირებული სამუშაოებისათვის.

// MPL3115A2

// ეს კოდი შექმნილია MPL3115A2_I2CS I2C მინი მოდულთან მუშაობისთვის

#ჩართეთ

#ჩართეთ

// MPL3115A2 I2C მისამართი არის 0x60 (96)

#განსაზღვრეთ Addr 0x60

float cTemp = 0.0, fTemp = 0.0, წნევა = 0.0, სიმაღლე = 0.0;

int temp = 0, tHeight = 0; ხანგრძლივი pres = 0;

ბათილად დაყენება ()

{

// ცვლადის დაყენება

ნაწილაკი. ცვლადი ("i2cdevice", "MPL3115A2");

ნაწილაკი. ცვლადი ("cTemp", cTemp);

ნაწილაკი. ცვალებადი ("წნევა", წნევა);

ნაწილაკი. ცვალებადი ("სიმაღლე", სიმაღლე);

// I2C კომუნიკაციის ინიციალიზაცია

Wire.begin ();

// სერიული კომუნიკაციის ინიციალიზაცია, დაყენებული baud განაკვეთი = 9600

სერიული.დაწყება (9600);

// დაიწყეთ I2C გადაცემა

Wire.beginTransmission (Addr);

// აირჩიეთ საკონტროლო რეგისტრი

Wire.write (0x26);

// აქტიური რეჟიმი, OSR = 128, ალტიმეტრის რეჟიმი

Wire.write (0xB9);

// შეაჩერე I2C გადაცემა

Wire.endTransmission ();

// დაიწყეთ I2C გადაცემა

Wire.beginTransmission (Addr);

// მონაცემთა კონფიგურაციის რეგისტრატორის არჩევა

Wire.write (0x13);

// მონაცემებისთვის მზად ღონისძიება ჩართულია სიმაღლეზე, წნევაზე, ტემპერატურაზე

Wire.write (0x07);

// შეაჩერე I2C გადაცემა

Wire.endTransmission ();

დაგვიანება (300);

}

ბათილი მარყუჟი ()

{

ხელმოუწერელი int მონაცემები [6];

// დაიწყეთ I2C გადაცემა

Wire.beginTransmission (Addr);

// აირჩიეთ საკონტროლო რეგისტრი

Wire.write (0x26);

// აქტიური რეჟიმი, OSR = 128, ალტიმეტრის რეჟიმი

Wire.write (0xB9);

// შეაჩერე I2C გადაცემა

Wire.endTransmission ();

დაგვიანება (1000);

// დაიწყეთ I2C გადაცემა

Wire.beginTransmission (Addr);

// მონაცემთა რეგისტრაციის არჩევა

Wire.write (0x00);

// შეაჩერე I2C გადაცემა

Wire.endTransmission ();

// მოითხოვეთ მონაცემების 6 ბაიტი

მავთული. მოთხოვნა (Addr, 6);

// წაიკითხეთ მონაცემების 6 ბაიტი 0x00 მისამართიდან (00)

// სტატუსი, tHeight msb1, tHeight msb, tHeight lsb, temp msb, temp lsb

თუ (Wire. Available () == 6)

{

მონაცემები [0] = Wire.read ();

მონაცემები [1] = Wire.read ();

მონაცემები [2] = Wire.read ();

მონაცემები [3] = Wire.read ();

მონაცემები [4] = Wire.read ();

მონაცემები [5] = Wire.read ();

}

// გადააკეთეთ მონაცემები 20 ბიტად

tHeight = (((((გრძელი) მონაცემები [1] * * გრძელი) 65536) + (მონაცემები [2] * 256) + (მონაცემები [3] & 0xF0)) / 16);

temp = ((მონაცემები [4] * 256) + (მონაცემები [5] & 0xF0)) / 16;

სიმაღლე = t სიმაღლე / 16.0;

cTemp = (temp / 16.0);

fTemp = cTemp * 1.8 + 32;

// დაიწყეთ I2C გადაცემა

Wire.beginTransmission (Addr);

// აირჩიეთ საკონტროლო რეგისტრი

Wire.write (0x26);

// აქტიური რეჟიმი, OSR = 128, ბარომეტრის რეჟიმი

Wire.write (0x39);

// შეაჩერე I2C გადაცემა

Wire.endTransmission ();

// დაიწყეთ I2C გადაცემა

Wire.beginTransmission (Addr);

// მონაცემთა რეგისტრაციის არჩევა

Wire.write (0x00);

// შეაჩერე I2C გადაცემა

Wire.endTransmission ();

დაგვიანება (1000);

// მოითხოვეთ 4 ბაიტი მონაცემები

მავთული. მოთხოვნა (Addr, 4);

// წაიკითხეთ 4 ბაიტი მონაცემები

// სტატუსი, pres msb1, pres msb, pres lsb

თუ (Wire. Available () == 4)

{

მონაცემები [0] = Wire.read ();

მონაცემები [1] = Wire.read ();

მონაცემები [2] = Wire.read ();

მონაცემები [3] = Wire.read ();

}

// გადააკეთეთ მონაცემები 20 ბიტად

pres = (((გრძელი) მონაცემები [1] * (გრძელი) 65536) + (მონაცემები [2] * 256) + (მონაცემები [3] & 0xF0)) / 16;

წნევა = (pres / 4.0) / 1000.0;

// მონაცემების გამოტანა საინფორმაციო დაფაზე

Particle.publish ("სიმაღლე:", სიმებიანი (სიმაღლე));

Particle.publish ("წნევა:", სიმებიანი (წნევა));

Particle.publish ("ტემპერატურა ცელსიუსში:", სიმებიანი (cTemp));

Particle.publish ("ტემპერატურა ფარენჰეიტში:", სიმებიანი (fTemp));

დაგვიანება (1000);

}

ნაბიჯი 4: პროგრამები:

MPL3115A2– ის სხვადასხვა პროგრამა მოიცავს მაღალი სიზუსტის ალტიმეტრიას, სმარტფონებს/ტაბლეტებს, პერსონალურ ელექტრონიკას ალტიმეტრიას და სხვა. ის ასევე შეიძლება ჩართული იყოს GPS Dead Reckoning– ში, GPS– ის გაძლიერებაში გადაუდებელ სამსახურში, რუქის დახმარებაში, ნავიგაციაში, ასევე ამინდის სადგურის აღჭურვილობაში.

გირჩევთ: