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

Particle Photon - MPL3115A2 Precision Altimeter Sensor Sutorial: 4 Steps
Particle Photon - MPL3115A2 Precision Altimeter Sensor Sutorial: 4 Steps

Βίντεο: Particle Photon - MPL3115A2 Precision Altimeter Sensor Sutorial: 4 Steps

Βίντεο: Particle Photon - MPL3115A2 Precision Altimeter Sensor Sutorial: 4 Steps
Βίντεο: Particle Photon - MPL3115A2 Precision Altimeter Sensor Tutorial 2024, Ιούνιος
Anonim
Image
Image

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

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

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

1. Φωτόνιο σωματιδίων

2. MPL3115A2

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

4. I²C Shield for Particle Photon

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

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

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

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

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

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

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

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

Ορίστε ο σύνδεσμος.

Έχουμε χρησιμοποιήσει δύο βιβλιοθήκες για κώδικα σωματιδίων, οι οποίες είναι οι εφαρμογές.h και spark_wiring_i2c.h. Η βιβλιοθήκη Spark_wiring_i2c απαιτείται για τη διευκόλυνση της επικοινωνίας I2C με τον αισθητήρα.

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

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

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

// MPL3115A2

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

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

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

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

#define Addr 0x60

float cTemp = 0.0, fTemp = 0.0, πίεση = 0.0, υψόμετρο = 0.0;

int temp = 0, tHeight = 0; long pres = 0;

void setup ()

{

// Ορισμός μεταβλητής

Particle.variable ("i2cdevice", "MPL3115A2");

Particle.variable ("cTemp", cTemp);

Particle.variable ("πίεση", πίεση).

Particle.variable ("υψόμετρο", υψόμετρο);

// Αρχικοποίηση επικοινωνίας 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

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

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

υψόμετρο = tHightight / 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 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

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

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

// Έξοδος δεδομένων στον πίνακα ελέγχου

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

Particle.publish ("Πίεση:", Χορδή (πίεση));

Particle.publish ("Temperature in Celsius:", String (cTemp));

Particle.publish ("Temperature in Fahrenheit:", String (fTemp));

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

}

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

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

Συνιστάται: