Πίνακας περιεχομένων:

Arduino Nano - MPL3115A2 Precision Altimeter Sensor Tutorial: 4 Steps
Arduino Nano - MPL3115A2 Precision Altimeter Sensor Tutorial: 4 Steps

Βίντεο: Arduino Nano - MPL3115A2 Precision Altimeter Sensor Tutorial: 4 Steps

Βίντεο: Arduino Nano - MPL3115A2 Precision Altimeter Sensor Tutorial: 4 Steps
Βίντεο: Arduino Nano - MPL3115A2 Precision Altimeter Sensor Tutorial 2024, Ιούλιος
Anonim
Image
Image

Το MPL3115A2 χρησιμοποιεί έναν αισθητήρα πίεσης MEMS με διεπαφή I2C για να παρέχει ακριβή δεδομένα πίεσης/υψομέτρου και θερμοκρασίας. Οι έξοδοι του αισθητήρα ψηφιοποιούνται με ADC υψηλής ανάλυσης 24-bit. Η εσωτερική επεξεργασία αφαιρεί εργασίες αντιστάθμισης από το κεντρικό σύστημα MCU. Είναι ικανό να ανιχνεύσει μια μεταβολή μόνο σε 0,05 kPa που ισοδυναμεί με μια αλλαγή ύψους 0,3 m. Εδώ είναι η επίδειξή του με τον Arduino Nano.

Βήμα 1: Αυτό που χρειάζεστε..

Ο, τι χρειάζεσαι..!!
Ο, τι χρειάζεσαι..!!

1. Arduino Nano

2. MPL3115A2

3. Καλώδιο I²C

4. I²C Shield για Arduino Nano

Βήμα 2: Συνδέσεις:

Συνδέσεις
Συνδέσεις
Συνδέσεις
Συνδέσεις
Συνδέσεις
Συνδέσεις
Συνδέσεις
Συνδέσεις

Πάρτε μια ασπίδα I2C για το Arduino Nano και σπρώξτε την απαλά πάνω από τις ακίδες του Nano.

Στη συνέχεια, συνδέστε το ένα άκρο του καλωδίου I2C στον αισθητήρα MPL3115A2 και το άλλο άκρο στην ασπίδα I2C.

Οι συνδέσεις φαίνονται στην παραπάνω εικόνα.

Βήμα 3: Κωδικός:

Κώδικας
Κώδικας

Μπορείτε να κατεβάσετε τον κώδικα arduino για MPL3115A2 από το αποθετήριο github-DCUBE Store.

Εδώ είναι ο σύνδεσμος για το ίδιο:

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

Περιλαμβάνουμε τη βιβλιοθήκη Wire.h για τη διευκόλυνση της επικοινωνίας I2c του αισθητήρα με την πλακέτα Arduino.

Μπορείτε επίσης να αντιγράψετε τον κώδικα από εδώ, δίνεται ως εξής:

// Διανέμεται με άδεια ελεύθερης βούλησης.

// Χρησιμοποιήστε το με όποιον τρόπο θέλετε, κερδοφόρο ή δωρεάν, υπό την προϋπόθεση ότι ταιριάζει στις άδειες των σχετικών έργων του.

// MPL3115A2

// Αυτός ο κώδικας έχει σχεδιαστεί για να λειτουργεί με το Mini Module MPL3115A2_I2CS I2C

#περιλαμβάνω

// Η διεύθυνση MPL3115A2 I2C είναι 0x60 (96)

#define Addr 0x60

void setup ()

{

// Αρχικοποίηση επικοινωνίας I2C

Wire.begin ();

// Αρχικοποίηση Σειριακής Επικοινωνίας, ρυθμισμένος ρυθμός baud = 9600

Serial.begin (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 byte δεδομένων

Wire.requestFrom (Addr, 6)?

// Διαβάστε 6 byte δεδομένων από τη διεύθυνση 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-bit

int tHeight = (((μακρύ) (δεδομένα [1] * (μακρύ) 65536) + (δεδομένα [2] * 256) + (δεδομένα [3] & 0xF0)) / 16);

int temp = ((δεδομένα [4] * 256) + (δεδομένα [5] & 0xF0)) / 16;

υψόμετρο επίπλευσης = 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 byte δεδομένων

Wire.requestFrom (Addr, 4)?

// Διαβάστε 4 byte δεδομένων

// κατάσταση, pres msb1, pres msb, pres lsb

εάν (Wire.available () == 4)

{

δεδομένα [0] = Wire.read ();

δεδομένα [1] = Wire.read ();

δεδομένα [2] = Wire.read ();

δεδομένα [3] = Wire.read ();

}

// Μετατρέψτε τα δεδομένα σε 20-bit

long pres = (((long) δεδομένα [1] * (long) 65536) + (data [2] * 256) + (data [3] & 0xF0)) / 16;

πίεση επίπλευσης = (pres / 4.0) / 1000.0;

// Έξοδος δεδομένων σε σειριακή οθόνη

Serial.print ("Υψόμετρο:");

Serial.print (υψόμετρο);

Serial.println ("m");

Serial.print ("Πίεση:");

Serial.print (πίεση);

Serial.println ("kPa");

Serial.print ("Θερμοκρασία σε Κελσίου:");

Serial.print (cTemp);

Serial.println ("C");

Serial.print ("Θερμοκρασία σε Φαρενάιτ:");

Serial.print (fTemp);

Serial.println ("F");

καθυστέρηση (500)?

}

Βήμα 4: Εφαρμογές:

Διάφορες εφαρμογές του MPL3115A2 περιλαμβάνουν υψομετρία υψηλής ακρίβειας, Smartphones/Tablets, Personal Electronics Altimetry κ.λπ. Μπορεί επίσης να ενσωματωθεί σε GPS Dead Reckoning, GPS Enhancement for Emergency Services, Map Assist, Navigation καθώς και Εξοπλισμός Μετεωρολογικού Σταθμού.

Συνιστάται: