Სარჩევი:

Arduino Nano - MPL3115A2 ზუსტი სიმაღლის მრიცხველის სენსორი: 4 ნაბიჯი
Arduino Nano - MPL3115A2 ზუსტი სიმაღლის მრიცხველის სენსორი: 4 ნაბიჯი

ვიდეო: Arduino Nano - MPL3115A2 ზუსტი სიმაღლის მრიცხველის სენსორი: 4 ნაბიჯი

ვიდეო: Arduino Nano - MPL3115A2 ზუსტი სიმაღლის მრიცხველის სენსორი: 4 ნაბიჯი
ვიდეო: Arduino Nano - MPL3115A2 Precision Altimeter Sensor Tutorial 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.

აქ არის იგივე ბმული:

github.com/DcubeTechVentures/MPL3115A2/blob/master/Arduino/MPL3115A2.ino

ჩვენ მოიცავს ბიბლიოთეკას Wire.h სენსორის I2c კომუნიკაციის გასაადვილებლად Arduino დაფასთან.

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

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

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

// MPL3115A2

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

#ჩართეთ

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

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

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

{

// 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 ბიტად

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

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

float სიმაღლე = tHeight / 16.0;

float cTemp = (temp / 16.0);

float fTemp = cTemp * 1.8 + 32;

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

Wire.beginTransmission (Addr);

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

Wire.write (0x26);

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

Wire.write (0x39);

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

Wire.endTransmission ();

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

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

Wire.beginTransmission (Addr);

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

Wire.write (0x00);

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

Wire.endTransmission ();

// მოითხოვეთ 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;

// სერიული მონიტორის მონაცემების გამოტანა

Serial.print ("სიმაღლე:");

სერიული. ბეჭდვა (სიმაღლე);

Serial.println ("მ");

Serial.print ("წნევა:");

სერიული. ბეჭდვა (წნევა);

Serial.println ("kPa");

Serial.print ("ტემპერატურა ცელსიუსში:");

Serial.print (cTemp);

Serial.println ("C");

Serial.print ("ტემპერატურა ფარენჰეიტში:");

Serial.print (fTemp);

Serial.println ("F");

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

}

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

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

გირჩევთ: