Υπολογισμός υγρασίας, πίεσης και θερμοκρασίας χρησιμοποιώντας BME280 και διασύνδεση φωτονίου .: 6 βήματα
Υπολογισμός υγρασίας, πίεσης και θερμοκρασίας χρησιμοποιώντας BME280 και διασύνδεση φωτονίου .: 6 βήματα
Anonim
Υπολογισμός υγρασίας, πίεσης και θερμοκρασίας χρησιμοποιώντας BME280 και διασύνδεση φωτονίων
Υπολογισμός υγρασίας, πίεσης και θερμοκρασίας χρησιμοποιώντας BME280 και διασύνδεση φωτονίων

Συναντάμε διάφορα έργα που απαιτούν παρακολούθηση θερμοκρασίας, πίεσης και υγρασίας. Έτσι συνειδητοποιούμε ότι αυτές οι παράμετροι παίζουν πραγματικά ζωτικό ρόλο στην εκτίμηση της αποδοτικότητας λειτουργίας ενός συστήματος σε διαφορετικές ατμοσφαιρικές συνθήκες. Τόσο σε βιομηχανικό επίπεδο όσο και σε προσωπικά συστήματα, η βέλτιστη θερμοκρασία, υγρασία και βαρομετρική πίεση απαιτούνται για την επαρκή απόδοση του συστήματος.

Αυτός είναι ο λόγος για τον οποίο παρέχουμε ένα πλήρες σεμινάριο για αυτόν τον αισθητήρα, σε αυτό το σεμινάριο θα εξηγήσουμε τη λειτουργία του αισθητήρα υγρασίας, πίεσης και θερμοκρασίας BME280 με φωτόνιο σωματιδίων.

Βήμα 1: Εξερεύνηση BME280

BME280 Exploration
BME280 Exploration

Ο ηλεκτρονικός τομέας έχει ενισχύσει το παιχνίδι του με τον αισθητήρα BME280, έναν περιβαλλοντικό αισθητήρα με θερμοκρασία, βαρομετρική πίεση και υγρασία! Αυτός ο αισθητήρας είναι εξαιρετικός για όλα τα είδη καιρού/περιβαλλοντικής ανίχνευσης και μπορεί ακόμη και να χρησιμοποιηθεί σε I2C.

Αυτός ο αισθητήρας ακριβείας BME280 είναι η καλύτερη λύση ανίχνευσης για μέτρηση υγρασίας με ακρίβεια ± 3%, βαρομετρική πίεση με απόλυτη ακρίβεια ± 1 hPa και θερμοκρασία με ακρίβεια ± 1.0 ° C. Επειδή η πίεση αλλάζει με το υψόμετρο και οι μετρήσεις πίεσης είναι τόσο καλές, μπορείτε επίσης να το χρησιμοποιήσετε ως υψόμετρο με accuracy 1 μέτρο ή καλύτερη ακρίβεια! Ο αισθητήρας θερμοκρασίας έχει βελτιστοποιηθεί για τον χαμηλότερο θόρυβο και την υψηλότερη ανάλυση και χρησιμοποιείται για αντιστάθμιση θερμοκρασίας ο αισθητήρας πίεσης και μπορεί επίσης να χρησιμοποιηθεί για την εκτίμηση της θερμοκρασίας περιβάλλοντος. Οι μετρήσεις με το BME280 μπορούν να γίνουν από τον χρήστη ή να πραγματοποιηθούν σε τακτά χρονικά διαστήματα.

Φύλλο δεδομένων: Κάντε κλικ για προεπισκόπηση ή λήψη του φύλλου δεδομένων του αισθητήρα BME280.

Βήμα 2: Λίστα απαιτήσεων υλικού

Λίστα απαιτήσεων υλικού
Λίστα απαιτήσεων υλικού

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

  • Μικρή μονάδα αισθητήρα IEC BME280
  • I²C Shield for Particle Photon
  • Σωματίδιο φωτονίου
  • Καλώδιο I²C
  • Προσαρμογέας ρεύματος

Βήμα 3: Διασύνδεση

Διασύνδεση
Διασύνδεση

Το τμήμα διασύνδεσης εξηγεί βασικά τις συνδέσεις καλωδίωσης που απαιτούνται μεταξύ του αισθητήρα και του σωματιδίου φωτονίου. Η διασφάλιση των σωστών συνδέσεων είναι η βασική ανάγκη ενώ εργάζεστε σε οποιοδήποτε σύστημα για την επιθυμητή έξοδο. Έτσι, οι απαιτούμενες συνδέσεις είναι οι εξής:

Το BME280 θα λειτουργήσει πάνω από I2C. Ακολουθεί το παράδειγμα διαγράμματος καλωδίωσης, που δείχνει πώς συνδέεται κάθε διασύνδεση του αισθητήρα. Εκτός συσκευασίας, ο πίνακας έχει διαμορφωθεί για διεπαφή I2C, ως εκ τούτου συνιστούμε να χρησιμοποιήσετε αυτήν τη διασύνδεση εάν είστε αλλιώς αγνωστικιστής. Το μόνο που χρειάζεστε είναι τέσσερα καλώδια! Απαιτούνται μόνο τέσσερις συνδέσεις ακροδέκτες Vcc, Gnd, SCL και SDA και αυτές συνδέονται με τη βοήθεια καλωδίου I2C. Αυτές οι συνδέσεις φαίνονται στις παραπάνω εικόνες.

Βήμα 4: Κωδικός παρακολούθησης θερμοκρασίας, πίεσης και υγρασίας

Κωδικός παρακολούθησης θερμοκρασίας, πίεσης και υγρασίας
Κωδικός παρακολούθησης θερμοκρασίας, πίεσης και υγρασίας
Κωδικός παρακολούθησης θερμοκρασίας, πίεσης και υγρασίας
Κωδικός παρακολούθησης θερμοκρασίας, πίεσης και υγρασίας

Η καθαρή έκδοση του κώδικα που θα χρησιμοποιήσουμε για να το εκτελέσουμε είναι διαθέσιμη ΕΔΩ.

Κατά τη χρήση της μονάδας αισθητήρα με το Arduino, συμπεριλαμβάνουμε τη βιβλιοθήκη application.h και spark_wiring_i2c.h. Η βιβλιοθήκη "application.h" και spark_wiring_i2c.h περιέχει τις λειτουργίες που διευκολύνουν την επικοινωνία i2c μεταξύ του αισθητήρα και του σωματιδίου.

Κάντε κλικ ΕΔΩ για να ανοίξετε την ιστοσελίδα για παρακολούθηση συσκευών

Ανεβάστε τον κωδικό στον πίνακα και θα αρχίσει να λειτουργεί! Όλα τα δεδομένα μπορούν να ληφθούν στην ιστοσελίδα όπως φαίνεται στην εικόνα.

Ο κωδικός παρέχεται παρακάτω:

// Διανέμεται με άδεια ελεύθερης βούλησης.// Χρησιμοποιήστε το με όποιον τρόπο θέλετε, κέρδος ή δωρεάν, υπό την προϋπόθεση ότι ταιριάζει στις άδειες των σχετικών έργων του. // BME280 // Αυτός ο κώδικας έχει σχεδιαστεί για να λειτουργεί με το Mini Module BME280_I2CS I2C διαθέσιμο από το ControlEverything.com. #include #include // BME280 I2C address is 0x76 (108) #define Addr 0x76 double cTemp = 0, fTemp = 0, πίεση = 0, υγρασία = 0; void setup () {// Ορισμός μεταβλητής Particle.variable ("i2cdevice", "BME280"); article.variable ("cTemp", cTemp); Particle.variable ("fTemp", fTemp); Particle.variable ("πίεση", πίεση). Particle.variable ("υγρασία", υγρασία). // Αρχικοποίηση επικοινωνίας I2C ως MASTER Wire.begin (); // Αρχικοποίηση σειριακής επικοινωνίας, ρυθμισμένος ρυθμός baud = 9600 Serial.begin (9600); καθυστέρηση (300)? } void loop () {unsigned int b1 [24]; ανυπόγραφα δεδομένα int [8]; int dig_H1 = 0; για (int i = 0; i <24; i ++) {// Έναρξη I2C Transmission Wire.beginTransmission (Addr); // Επιλέξτε μητρώο δεδομένων Wire.write ((136+i)); // Διακοπή I2C Transmission Wire.endTransmission (); // Αίτημα 1 byte δεδομένων Wire.requestFrom (Addr, 1); // Διαβάστε 24 byte δεδομένων εάν (Wire.available () == 1) {b1 = Wire.read (); }} // Μετατρέψτε τα δεδομένα // συντελεστές θερμοκρασίας int dig_T1 = (b1 [0] & 0xff) + ((b1 [1] & 0xff) * 256); int dig_T2 = b1 [2] + (b1 [3] * 256); int dig_T3 = b1 [4] + (b1 [5] * 256); // συντελεστές πίεσης int dig_P1 = (b1 [6] & 0xff) + ((b1 [7] & 0xff) * 256); int dig_P2 = b1 [8] + (b1 [9] * 256); int dig_P3 = b1 [10] + (b1 [11] * 256); int dig_P4 = b1 [12] + (b1 [13] * 256); int dig_P5 = b1 [14] + (b1 [15] * 256); int dig_P6 = b1 [16] + (b1 [17] * 256); int dig_P7 = b1 [18] + (b1 [19] * 256); int dig_P8 = b1 [20] + (b1 [21] * 256); int dig_P9 = b1 [22] + (b1 [23] * 256); για (int i = 0; i <7; i ++) {// Έναρξη I2C Transmission Wire.beginTransmission (Addr); // Επιλέξτε μητρώο δεδομένων Wire.write ((225+i)); // Διακοπή I2C Transmission Wire.endTransmission (); // Αίτημα 1 byte δεδομένων Wire.requestFrom (Addr, 1); // Διαβάστε 7 byte δεδομένων εάν (Wire.available () == 1) {b1 = Wire.read (); }} // Μετατρέψτε τα δεδομένα // συντελεστές υγρασίας int dig_H2 = b1 [0] + (b1 [1] * 256); int dig_H3 = b1 [2] & 0xFF; int dig_H4 = (b1 [3] * 16) + (b1 [4] & 0xF); int dig_H5 = (b1 [4] / 16) + (b1 [5] * 16); int dig_H6 = b1 [6]; // Έναρξη I2C Transmission Wire.beginTransmission (Addr); // Επιλέξτε μητρώο δεδομένων Wire.write (161); // Διακοπή I2C Transmission Wire.endTransmission (); // Αίτημα 1 byte δεδομένων Wire.requestFrom (Addr, 1); // Διαβάστε 1 byte δεδομένων εάν (Wire.available () == 1) {dig_H1 = Wire.read (); } // Έναρξη I2C Transmission Wire.beginTransmission (Addr); // Επιλέξτε μητρώο ελέγχου υγρασίας Wire.write (0xF2); // Υγρασία πάνω από το ρυθμό δειγματοληψίας = 1 Wire.write (0x01); // Διακοπή I2C Transmission Wire.endTransmission (); // Έναρξη I2C Transmission Wire.beginTransmission (Addr); // Επιλέξτε μητρώο μέτρησης ελέγχου Wire.write (0xF4); // Κανονική λειτουργία, θερμοκρασία και πίεση πάνω από το ρυθμό δειγματοληψίας = 1 Wire.write (0x27); // Διακοπή I2C Transmission Wire.endTransmission (); // Έναρξη I2C Transmission Wire.beginTransmission (Addr); // Επιλέξτε config register Wire.write (0xF5); // Χρόνος αναμονής = 1000ms Wire.write (0xA0); // Διακοπή I2C Transmission Wire.endTransmission (); για (int i = 0; i <8; i ++) {// Έναρξη I2C Transmission Wire.beginTransmission (Addr); // Επιλέξτε μητρώο δεδομένων Wire.write ((247+i)); // Διακοπή I2C Transmission Wire.endTransmission (); // Αίτημα 1 byte δεδομένων Wire.requestFrom (Addr, 1); // Διαβάστε 8 byte δεδομένων εάν (Wire.available () == 1) {data = Wire.read (); }} // Μετατροπή δεδομένων πίεσης και θερμοκρασίας σε 19-bit adc_p = (((long) (data [0] & 0xFF) * 65536) + ((long) (data [1] & 0xFF) * 256) + (μακρύ) (δεδομένα [2] & 0xF0)) / 16; long adc_t = (((long) (δεδομένα [3] & 0xFF) * 65536) + ((long) (δεδομένα [4] & 0xFF) * 256) + (long) (δεδομένα [5] & 0xF0)) / 16 ? // Μετατροπή δεδομένων υγρασίας long adc_h = ((long) (data [6] & 0xFF) * 256 + (long) (data [7] & 0xFF)); // Υπολογισμοί μετατόπισης θερμοκρασίας διπλό var1 = (((διπλό) adc_t) / 16384.0 - ((διπλό) dig_T1) / 1024.0) * ((διπλό) dig_T2); διπλό var2 = ((((διπλό) adc_t) / 131072.0 - ((διπλό) dig_T1) / 8192.0) * (((διπλό) adc_t) /131072.0 - ((διπλό) dig_T1) /8192.0)) * ((διπλό) dig_T3); διπλό t_fine = (μακρύ) (var1 + var2); διπλό cTemp = (var1 + var2) / 5120.0; διπλό fTemp = cTemp * 1,8 + 32; // Υπολογισμοί μετατόπισης πίεσης var1 = ((διπλό) t_fine / 2.0) - 64000.0; var2 = var1 * var1 * ((διπλό) dig_P6) / 32768.0; var2 = var2 + var1 * ((διπλό) dig_P5) * 2.0; var2 = (var2 / 4.0) + (((διπλό) dig_P4) * 65536.0); var1 = (((διπλό) dig_P3) * var1 * var1 / 524288.0 + ((διπλό) dig_P2) * var1) / 524288.0; var1 = (1.0 + var1 / 32768.0) * ((διπλό) dig_P1); διπλό p = 1048576.0 - (διπλό) adc_p; p = (p - (var2 / 4096.0)) * 6250.0 / var1; var1 = ((διπλό) dig_P9) * p * p / 2147483648.0; var2 = p * ((διπλό) dig_P8) / 32768.0; διπλή πίεση = (p + (var1 + var2 + ((διπλό) dig_P7)) / 16.0) / 100; // Υπολογισμοί αντιστάθμισης υγρασίας διπλός var_H = (((διπλός) t_fine) - 76800.0); var_H = (adc_h - (dig_H4 * 64.0 + dig_H5 / 16384.0 * var_H)) * (dig_H2 / 65536.0 * (1.0 + dig_H6 / 67108864.0 * var_H * (1.0 + dig_H3 / 67108864.0 * var_H))); διπλή υγρασία = var_H * (1.0 - dig_H1 * var_H / 524288.0); εάν (υγρασία> 100,0) {υγρασία = 100,0; } else if (υγρασία <0,0) {υγρασία = 0,0; } // Έξοδος δεδομένων στον πίνακα ελέγχου Particle.publish ("Θερμοκρασία σε Κελσίου:", String (cTemp)); Particle.publish ("Temperature in Fahrenheit:", String (fTemp)); Particle.publish ("Πίεση:", Χορδή (πίεση)); Particle.publish ("Relative Υγρασία:", String (υγρασία)); καθυστέρηση (1000)? }

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

Εφαρμογές
Εφαρμογές

Ο αισθητήρας θερμοκρασίας, πίεσης και σχετικής υγρασίας BME280 έχει διάφορες βιομηχανικές εφαρμογές όπως παρακολούθηση θερμοκρασίας, περιφερειακή θερμική προστασία υπολογιστή, παρακολούθηση πίεσης στη βιομηχανία. Έχουμε επίσης χρησιμοποιήσει αυτόν τον αισθητήρα σε εφαρμογές μετεωρολογικών σταθμών καθώς και σύστημα παρακολούθησης θερμοκηπίου.

Άλλες αιτήσεις ενδέχεται να περιλαμβάνουν:

  1. Επίγνωση του πλαισίου, π.χ. ανίχνευση δέρματος, ανίχνευση αλλαγής δωματίου.
  2. Παρακολούθηση / ευεξία φυσικής κατάστασης - Προειδοποίηση σχετικά με ξηρότητα ή υψηλές θερμοκρασίες.
  3. Μέτρηση όγκου και ροής αέρα.
  4. Έλεγχος αυτοματισμού σπιτιού.
  5. Έλεγχος θέρμανσης, εξαερισμού, κλιματισμού (HVAC).
  6. Το διαδίκτυο των πραγμάτων.
  7. Βελτίωση GPS (π.χ. βελτίωση χρόνου για την πρώτη διόρθωση, υπολογισμός νεκρών, ανίχνευση κλίσης).
  8. Εσωτερική πλοήγηση (αλλαγή ανίχνευσης δαπέδου, ανίχνευση ανελκυστήρα).
  9. Υπαίθριες εφαρμογές πλοήγησης, αναψυχής και αθλητισμού.
  10. Δελτίο καιρού.
  11. Ένδειξη κάθετης ταχύτητας (ταχύτητα ανόδου/βύθισης)..

Βήμα 6: Εκπαιδευτικό βίντεο

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

Μείνετε συντονισμένοι για τα μπλογκ διασύνδεσης και λειτουργίας άλλων αισθητήρων.