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

Μετρήστε την πίεση με το μικρόφωνό σας: bit: 5 βήματα (με εικόνες)
Μετρήστε την πίεση με το μικρόφωνό σας: bit: 5 βήματα (με εικόνες)

Βίντεο: Μετρήστε την πίεση με το μικρόφωνό σας: bit: 5 βήματα (με εικόνες)

Βίντεο: Μετρήστε την πίεση με το μικρόφωνό σας: bit: 5 βήματα (με εικόνες)
Βίντεο: Mitsi VAR με διψασμένη Κοσσιώνη, φαντάρο Κασσελάκη, Τσουκαλά, Μπακογιάννη, Γ. Αυτιά & Sin Boy 2024, Νοέμβριος
Anonim
Μετρήστε την πίεση με το μικρόφωνό σας: bit
Μετρήστε την πίεση με το μικρόφωνό σας: bit
Μετρήστε την πίεση με το μικρόφωνό σας: bit
Μετρήστε την πίεση με το μικρόφωνό σας: bit

Το παρακάτω διδακτικό περιγράφει μια εύχρηστη και ανέξοδη συσκευή για την εκτέλεση μετρήσεων πίεσης και την επίδειξη του νόμου του Boyle, χρησιμοποιώντας το micro: bit σε συνδυασμό με τον αισθητήρα πίεσης/θερμοκρασίας BMP280.

Ενώ αυτός ο συνδυασμός σύριγγας/αισθητήρα πίεσης έχει ήδη περιγραφεί σε μία από τις προηγούμενες οδηγίες μου, ο συνδυασμός με το micro: bit προσφέρει νέες ευκαιρίες, π.χ. για έργα αίθουσας τάξης.

Επιπλέον, ο αριθμός των περιγραφών εφαρμογών στις οποίες χρησιμοποιείται το micro: bit σε συνδυασμό με αισθητήρα που κινείται με I2C είναι μάλλον περιορισμένος μέχρι στιγμής. Ελπίζω ότι αυτό το διδακτικό μπορεί να είναι ένα σημείο εκκίνησης για άλλα έργα.

Η συσκευή επιτρέπει την εκτέλεση ποσοτικών μετρήσεων της πίεσης του αέρα και την εμφάνιση των αποτελεσμάτων στη συστοιχία LED micro: bit ή σε έναν συνδεδεμένο υπολογιστή, για την τελευταία χρήση της σειριακής οθόνης ή των σειριακών λειτουργιών του Arduino IDE. Επιπλέον, έχετε μια απτική ανατροφοδότηση, καθώς θα πιέσετε ή θα τραβήξετε μόνοι σας το έμβολο της σύριγγας και έτσι θα νιώσετε την απαιτούμενη ισχύ.

Από προεπιλογή, η οθόνη σάς επιτρέπει να εκτιμάτε την πίεση με την ένδειξη στάθμης που εμφανίζεται στη μήτρα LED. Ο σειριακός σχεδιαστής του Arduino IDE επιτρέπει το ίδιο, αλλά με πολύ καλύτερη ανάλυση (δείτε βίντεο). Διατίθενται επίσης πιο περίπλοκες λύσεις, π.χ. στη γλώσσα επεξεργασίας. Μπορείτε επίσης να εμφανίσετε τις ακριβείς μετρημένες τιμές πίεσης και θερμοκρασίας στη μήτρα LED αφού πατήσετε τα κουμπιά Α ή Β αντίστοιχα, αλλά η σειριακή οθόνη του Arduino IDE είναι πολύ πιο γρήγορη, επιτρέποντας την εμφάνιση τιμών σε σχεδόν πραγματικό χρόνο.

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

Η αρχή χρησιμοποιήθηκε για την κατασκευή ενός πολύ απλού μικροσυστήματος: bit dive-o-meter, μια συσκευή για τη μέτρηση του πόσο βαθιά βουτάτε.

Προσθήκη 27-Μαΐου-2018:

Καθώς η Pimoroni έχει αναπτύξει μια βιβλιοθήκη MakeCode για τον αισθητήρα BMP280, αυτό μου έδωσε την ευκαιρία να αναπτύξω ένα σενάριο που θα χρησιμοποιηθεί για τη συσκευή που περιγράφεται εδώ. Το σενάριο και το αντίστοιχο αρχείο HEX μπορούν να βρεθούν στο τελευταίο βήμα αυτού του εκπαιδευτικού. Για να το χρησιμοποιήσετε, απλώς φορτώστε το αρχείο HEX στο micro: bit σας. Δεν χρειάζεται ειδικό λογισμικό και μπορείτε να χρησιμοποιήσετε το διαδικτυακό πρόγραμμα επεξεργασίας MakeCode για την επεξεργασία του σεναρίου.

Βήμα 1: Χρησιμοποιημένα υλικά

Μεταχειρισμένα Υλικά
Μεταχειρισμένα Υλικά
Μεταχειρισμένα Υλικά
Μεταχειρισμένα Υλικά
Μεταχειρισμένα Υλικά
Μεταχειρισμένα Υλικά
Μεταχειρισμένα Υλικά
Μεταχειρισμένα Υλικά
  • Ένα μικρό: λίγο, πήρε το δικό μου από την Πιμωνόνη - 13,50 GBP
  • Kitronic Edge Connector for micro: bit - via Pimoroni - 5 GBP, Παρατήρηση: Η Pimorini προσφέρει τώρα ένα φιλικό προς το breadboard συνδετήρα άκρων που ονομάζεται pin: bit με καρφίτσες στις θύρες I2C.
  • 2 ταινίες κεφαλίδας 2 ακίδων
  • Μπαταρία ή LiPo για το μικρό: bit (δεν είναι απαραίτητο, αλλά χρήσιμο), καλώδιο μπαταρίας με διακόπτη (dito) - Pimoroni
  • καλώδια βραχυκυκλωτή για σύνδεση αισθητήρων στο βύσμα Edge
  • μακριά (!) καλώδια άλματος για τον αισθητήρα, τουλάχιστον όσο η σύριγγα,, f/f ή f/m
  • Αισθητήρας πίεσης & θερμοκρασίας BMP280 - Banggood - 5 US $ για τρεις μονάδες Το εύρος μέτρησης για αυτόν τον αισθητήρα είναι μεταξύ 550 και 1537 hPa.
  • Πλαστική σύριγγα καθετήρα 150 ml με ελαστικό παρέμβυσμα - Amazon ή καταστήματα υλικού και κήπου - περίπου 2 - 3 US $
  • πιστόλι θερμής κόλλας/θερμής κόλλας
  • συγκολλητικό σίδερο
  • έναν υπολογιστή με εγκατεστημένο το Arduino IDE

Βήμα 2: Οδηγίες συναρμολόγησης

Οδηγίες συναρμολόγησης
Οδηγίες συναρμολόγησης
Οδηγίες συναρμολόγησης
Οδηγίες συναρμολόγησης
Οδηγίες συναρμολόγησης
Οδηγίες συναρμολόγησης

Κολλήσεις επικεφαλίδων στο ξεμπλοκάρισμα αισθητήρα BMP280.

Συγκολλήστε τις δύο κεφαλίδες 2 ακίδων στον ακροδέκτη 19 και τον ακροδέκτη 20 του συνδετήρα Edge (δείτε την εικόνα).

Συνδέστε το micro: bit στην υποδοχή Edge και στον υπολογιστή σας.

Προετοιμάστε λογισμικό και micro: bit όπως περιγράφεται στις οδηγίες Adafruit micro: bit. Διαβάστε τα προσεκτικά.

Εγκαταστήστε τις απαιτούμενες βιβλιοθήκες στο Arduino IDE.

Ανοίξτε το σενάριο BMP280 που επισυνάπτεται σε μεταγενέστερο βήμα.

Συνδέστε τον αισθητήρα στην υποδοχή Edge. GND σε 0V, VCC σε 3V, SCL στο pin 19, SDA στο pin 20.

Ανεβάστε το σενάριο στο micro: bit.

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

Απενεργοποιήστε το micro: bit, αφαιρέστε τον αισθητήρα.

Περάστε τα καλώδια του βραχυκυκλωτήρα από την έξοδο της σύριγγας. Σε περίπτωση που χρειαστεί να διευρύνετε το άνοιγμα. Προσέξτε να παραλείψετε να καταστραφούν τα καλώδια.

Συνδέστε τον αισθητήρα στα καλώδια του βραχυκυκλωτήρα. Βεβαιωθείτε ότι οι συνδέσεις είναι σωστές και καλές. Σύνδεση στο micro: bit.

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

Τοποθετήστε το έμβολο και μετακινήστε το λίγο πιο πέρα από την επιθυμητή θέση ανάπαυσης (100 ml).

Προσθέστε ζεστή κόλλα στο άκρο της εξόδου της σύριγγας και μετακινήστε το έμβολο λίγο πίσω. Ελέγξτε εάν η σύριγγα είναι κλειστή στον αέρα, διαφορετικά προσθέστε περισσότερη θερμή κόλλα. Αφήνουμε να κρυώσει η ζεστή κόλλα.

Ελέγξτε ξανά ότι ο αισθητήρας λειτουργεί. Εάν μετακινήσετε το έμβολο, οι αριθμοί της σειριακής οθόνης και της οθόνης του micro: bit πρέπει να αλλάξουν.

Εάν απαιτείται, μπορείτε να ρυθμίσετε την ένταση της σύριγγας πιέζοντάς την κοντά στο παρέμβυσμα και μετακινώντας το έμβολο.

Βήμα 3: Λίγη θεωρία και μερικές πρακτικές μετρήσεις

Λίγη θεωρία και μερικές πρακτικές μετρήσεις
Λίγη θεωρία και μερικές πρακτικές μετρήσεις
Λίγη θεωρία και μερικές πρακτικές μετρήσεις
Λίγη θεωρία και μερικές πρακτικές μετρήσεις

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

Η θεωρία πίσω από αυτήν: Σύμφωνα με τον νόμο του Boyle, [Όγκος * Πίεση] είναι μια σταθερή τιμή για ένα αέριο σε μια δεδομένη θερμοκρασία.

Αυτό σημαίνει ότι εάν συμπιέσετε έναν δεδομένο όγκο αερίου N-fold, δηλαδή ο τελικός όγκος είναι 1/N διπλάσιο του αρχικού, η πίεσή του θα ανέβει N-fold, όπως: P0*V0 = P1*V1 = cons t. Για περισσότερες λεπτομέρειες, ρίξτε μια ματιά στο άρθρο της Wikipedia σχετικά με τους νόμους για το φυσικό αέριο. Στο επίπεδο της θάλασσας, η βαρομετρική πίεση είναι συνήθως στην περιοχή των 1010 hPa (hecto Pascal).

Ξεκινώντας λοιπόν σε σημεία ανάπαυσης π.χ. V0 = 100 ml και P0 = 1000 hPa, μια συμπίεση του αέρα σε περίπου 66 ml (δηλ. V1 = 2/3 * V0) θα οδηγήσει σε πίεση περίπου 1500 hPa (P1 = 3/2 του P0). Τραβώντας το έμβολο στα 125 ml (5/4 φορές όγκος) έχει ως αποτέλεσμα πίεση περίπου 800 hPa (πίεση 4/5). Οι μετρήσεις είναι εκπληκτικά ακριβείς για μια τόσο απλή συσκευή.

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

Αλλά μπορούμε επίσης να εκτελέσουμε κάποιους υπολογισμούς και να τους ελέγξουμε πειραματικά. Ας υποθέσουμε ότι συμπιέζουμε τον αέρα στα 1500 hPa, σε βασική βαρομετρική πίεση 1000 hPa. Έτσι, η διαφορά πίεσης είναι 500 hPa, ή 50, 000 Pa. Για τη σύριγγά μου, η διάμετρος (d) του εμβόλου είναι περίπου 4 cm ή 0,04 μέτρα.

Τώρα μπορείτε να υπολογίσετε τη δύναμη που απαιτείται για να κρατήσετε το έμβολο σε αυτή τη θέση. Δίνεται P = F/A (Η πίεση είναι δύναμη διαιρούμενη με εμβαδόν), ή μετασχηματισμένη F = P*A. Η μονάδα SI για δύναμη είναι "Newton" N, για μήκος "Meter" m, και 1 Pa είναι 1N ανά τετραγωνικό μέτρο. Για ένα στρογγυλό έμβολο, η περιοχή μπορεί να υπολογιστεί χρησιμοποιώντας A = ((d/2)^2)*pi, το οποίο δίνει 0,00125 τετραγωνικά μέτρα για τη σύριγγά μου. Έτσι

50, 000 Pa * 0,00125 m^2 = 63 Β.

Στη Γη, το 1 Ν συσχετίζεται με βάρος 100 gr, άρα 63 N είναι ίσα με το βάρος 6,3 kg.

Αυτό μπορεί να ελεγχθεί εύκολα χρησιμοποιώντας μια κλίμακα. Σπρώξτε τη σύριγγα με το έμβολο πάνω στην ζυγαριά, έως ότου επιτευχθεί πίεση περίπου 1500 hPa και, στη συνέχεια, διαβάστε την κλίμακα. Or πιέστε μέχρι η κλίμακα να δείχνει περίπου 6-7 κιλά, στη συνέχεια πατήστε το κουμπί "A" και διαβάστε την τιμή που εμφανίζεται στη μήτρα LED του micro: bit. Όπως αποδείχθηκε, η εκτίμηση βάσει των παραπάνω υπολογισμών δεν ήταν κακή. Μια πίεση ελαφρώς πάνω από 1500 hPa συσχετίζεται με ένα εμφανιζόμενο "βάρος" περίπου 7 kg σε κλίμακα σώματος (δείτε εικόνες). Θα μπορούσατε επίσης να ανατρέψετε αυτήν την ιδέα και να χρησιμοποιήσετε τη συσκευή για να δημιουργήσετε μια απλή ψηφιακή κλίμακα βασισμένη σε μετρήσεις πίεσης.

Λάβετε υπόψη ότι το ανώτατο όριο για τον αισθητήρα είναι περίπου 1540 hPa, οπότε οποιαδήποτε πίεση πάνω από αυτήν δεν μπορεί να μετρηθεί και μπορεί να προκαλέσει ζημιά στον αισθητήρα.

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

Βήμα 4: Το σενάριο MicroPython

Επισυνάπτεται το σενάριο BMP280 για το micro: bit. Είναι παράγωγο ενός σεναρίου BMP/BME280 που βρήκα κάπου στον ιστότοπο Banggood, σε συνδυασμό με τη βιβλιοθήκη Microbit της Adafruit. Το πρώτο σας επιτρέπει να χρησιμοποιήσετε τον αισθητήρα Banggood, το δεύτερο απλοποιεί τον χειρισμό της οθόνης LED 5x5. Ευχαριστώ τους προγραμματιστές και των δύο.

Από προεπιλογή, το σενάριο εμφανίζει τα αποτελέσματα των μετρήσεων της πίεσης σε 5 βήματα στην οθόνη LED του micro: bit 5x5, επιτρέποντας να δείτε τις αλλαγές με μικρή καθυστέρηση. Οι ακριβείς τιμές μπορούν να εμφανιστούν παράλληλα στη σειριακή οθόνη του Arduino IDE, ή ένα πιο λεπτομερές γράφημα μπορεί να εμφανιστεί με το σχετικό σχέδιο του Arduino IDE.

Εάν πατήσετε το κουμπί Α, οι μετρημένες τιμές πίεσης εμφανίζονται στη συστοιχία LED του micro: bit 5x5. Εάν πατήσετε το κουμπί Β, εμφανίζονται οι τιμές θερμοκρασίας. Ενώ αυτό επιτρέπει την ανάγνωση των ακριβών δεδομένων, επιβραδύνει σημαντικά τους κύκλους μέτρησης.

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

#συμπεριλάβετε xxx

#include Adafruit_Microbit_Matrix microbit; #define BME280_ADDRESS 0x76 unsigned long int hum_raw, temp_raw, pres_raw; υπογεγραμμένο long int t_fine? uint16_t dig_T1; int16_t dig_T2; int16_t dig_T3; uint16_t dig_P1; int16_t dig_P2; int16_t dig_P3; int16_t dig_P4; int16_t dig_P5; int16_t dig_P6; int16_t dig_P7; int16_t dig_P8; int16_t dig_P9; int8_t dig_H1; int16_t dig_H2; int8_t dig_H3; int16_t dig_H4; int16_t dig_H5; int8_t dig_H6; // δοχεία για μετρημένες τιμές int value0; int τιμή 1; int τιμή2; int value3; int value4; // ---------------------------------------------------- ------------------------------------------------------ ------------------ void setup () {uint8_t osrs_t = 1; // Υπερ δειγματοληψία θερμοκρασίας x 1 uint8_t osrs_p = 1; // Υπερ δειγματοληψία πίεσης x 1 uint8_t osrs_h = 1; // Υγρασία υπερ -δειγματοληψία x 1 uint8_t mode = 3; // Κανονική λειτουργία uint8_t t_sb = 5; // Προστασία 1000ms uint8_t φίλτρο = 0; // Απενεργοποίηση φίλτρου uint8_t spi3w_en = 0; // 3-wire SPI Απενεργοποίηση uint8_t ctrl_meas_reg = (osrs_t << 5) | (osrs_p << 2) | τρόπος; uint8_t config_reg = (t_sb << 5) | (φίλτρο << 2] | spi3w_en; uint8_t ctrl_hum_reg = osrs_h; pinMode (PIN_BUTTON_A, INPUT); pinMode (PIN_BUTTON_B, INPUT); Serial.begin (9600); // Serial.println ("Θερμοκρασία [βαθμός C]"); // Serial.print ("\ t"); Serial.print ("Πίεση [hPa]"); // κεφαλίδα Wire.begin (); writeReg (0xF2, ctrl_hum_reg); writeReg (0xF4, ctrl_meas_reg); writeReg (0xF5, config_reg); readTrim (); // microbit.begin (); // microbit.print ("x"); καθυστέρηση (1000)? } // --------------------------------------------------- ------------------------------------------------------ -------- void loop () {double temp_act = 0.0, press_act = 0.0, hum_act = 0.0; υπογεγραμμένο long int temp_cal? ανυπόγραφο long int press_cal, hum_cal; int N; // ορίστε τιμές κατωφλίου για οθόνη μήτρας LED, σε hPa διπλό max_0 = 1100; διπλό max_1 = 1230; διπλό max_2 = 1360; διπλό max_3 = 1490; readData (); temp_cal = calibration_T (temp_raw); press_cal = calibration_P (pres_raw); hum_cal = calibration_H (hum_raw); temp_act = (διπλό) temp_cal / 100.0; press_act = (διπλό) press_cal / 100.0; hum_act = (διπλό) hum_cal / 1024.0; microbit.clear (); // επαναφορά μήτρας LED /* Serial.print ("PRESS:"); Serial.println (press_act); Serial.print ("hPa"); Serial.print ("TEMP:"); Serial.print ("\ t"); Serial.println (temp_act); */ if (! digitalRead (PIN_BUTTON_B)) {// η εμφάνιση τιμών σε αριθμούς καθυστερεί τη μέτρηση των κύκλων microbit.print ("T:"); microbit.print (temp_act, 1); microbit.print ("'C"); // Serial.println (""); } else if (! digitalRead (PIN_BUTTON_A)) {microbit.print ("P:"); microbit.print (press_act, 0); microbit.print ("hPa"); } else {// εμφανίζει τιμές πίεσης ως εικονοστοιχεία ή γραμμές σε ένα συγκεκριμένο επίπεδο // 5 βήματα: 1490 hPa // κατώφλια που ορίζονται από τις τιμές max_n εάν (press_act> max_3) {(N = 0); // επάνω σειρά} else if (press_act> max_2) {(N = 1); } else if (press_act> max_1) {(N = 2); } else if (press_act> max_0) {(N = 3); } else {(N = 4); // βασική σειρά} // Serial.println (N); // για σκοπούς ανάπτυξης // microbit.print (N); // ως Γραμμή // microbit.drawLine (Ν, 0, 0, 4, LED_ON); // μετατόπιση τιμών στην επόμενη τιμή τιμή4 = τιμή3; value3 = value2; value2 = value1; value1 = value0; τιμή0 = Ν; // σχεδίαση εικόνας, στήλη ανά στήλη microbit.drawPixel (0, τιμή0, LED_ON); // ως Pixel: στήλη, σειρά. 0, 0 αριστερή γωνία microbit.drawPixel (1, τιμή1, LED_ON); microbit.drawPixel (2, τιμή2, LED_ON); microbit.drawPixel (3, τιμή3, LED_ON); microbit.drawPixel (4, τιμή4, LED_ON); } // αποστολή δεδομένων σε σειριακή οθόνη και σειριακό σχεδιαστή // Serial.println (press_act); // αποστολή τιμών (ών) στη σειριακή θύρα για αριθμητική εμφάνιση, προαιρετικά

Serial.print (press_act); // αποστολή τιμής στη σειριακή θύρα για plotter

// σχεδιάστε γραμμές ενδείξεων και διορθώστε το εμφανιζόμενο εύρος Serial.print ("\ t"); Serial.print (600); Serial.print ("\ t"); Serial.print (1100), Serial.print ("\ t"); Serial.println (1600); καθυστέρηση (200)? // Μετρήστε τρεις φορές το δευτερόλεπτο} // -------------------------------------------- ------------------------------------------------------ ------------------------------------------------------ - // τα ακόλουθα απαιτούνται για τον αισθητήρα bmp/bme280, διατηρήστε το ως άκυρο readTrim () {uint8_t data [32], i = 0; // Επιδιόρθωση 2014/Wire.beginTransmission (BME280_ADDRESS); Wire.write (0x88); Wire.endTransmission (); Wire.requestFrom (BME280_ADDRESS, 24); // Επιδιόρθωση 2014/ενώ (Wire.available ()) {data = Wire.read (); i ++? } Wire.beginTransmission (BME280_ADDRESS); // Προσθήκη 2014/Wire.write (0xA1); // Προσθήκη 2014/Wire.endTransmission (); // Προσθήκη 2014/Wire.requestFrom (BME280_ADDRESS, 1); // Προσθήκη 2014/data = Wire.read (); // Προσθήκη 2014/i ++; // Προσθήκη 2014/Wire.beginTransmission (BME280_ADDRESS); Wire.write (0xE1); Wire.endTransmission (); Wire.requestFrom (BME280_ADDRESS, 7); // Επιδιόρθωση 2014/ενώ (Wire.available ()) {data = Wire.read (); i ++? } dig_T1 = (δεδομένα [1] << 8) | δεδομένα [0]; dig_P1 = (δεδομένα [7] << 8) | δεδομένα [6]; dig_P2 = (δεδομένα [9] << 8) | δεδομένα [8]; dig_P3 = (δεδομένα [11] << 8) | δεδομένα [10]; dig_P4 = (δεδομένα [13] << 8) | δεδομένα [12]; dig_P5 = (δεδομένα [15] << 8) | δεδομένα [14]; dig_P6 = (δεδομένα [17] << 8) | δεδομένα [16]; dig_P7 = (δεδομένα [19] << 8) | δεδομένα [18]; dig_T2 = (δεδομένα [3] << 8) | δεδομένα [2]; dig_T3 = (δεδομένα [5] << 8) | δεδομένα [4]; dig_P8 = (δεδομένα [21] << 8) | δεδομένα [20]; dig_P9 = (δεδομένα [23] << 8) | δεδομένα [22]; dig_H1 = δεδομένα [24]; dig_H2 = (δεδομένα [26] << 8) | δεδομένα [25]; dig_H3 = δεδομένα [27]; dig_H4 = (δεδομένα [28] << 4) | (0x0F & δεδομένα [29]); dig_H5 = (δεδομένα [30] 4) & 0x0F); // Επιδιόρθωση 2014/dig_H6 = δεδομένα [31]; // Διόρθωση 2014/} void writeReg (uint8_t reg_address, uint8_t data) {Wire.beginTransmission (BME280_ADDRESS); Wire.write (reg_address); Wire.write (δεδομένα); Wire.endTransmission (); }

void readData ()

{int i = 0; uint32_t δεδομένα [8]; Wire.beginTransmission (BME280_ADDRESS); Wire.write (0xF7); Wire.endTransmission (); Wire.requestFrom (BME280_ADDRESS, 8); while (Wire.available ()) {data = Wire.read (); i ++? } pres_raw = (δεδομένα [0] << 12) | (δεδομένα [1] 4) · temp_raw = (δεδομένα [3] << 12) | (δεδομένα [4] 4) · hum_raw = (δεδομένα [6] << 8) | δεδομένα [7]; }

υπογεγραμμένο long int calibration_T (sign long int adc_T)

{υπέγραψε long int var1, var2, T; var1 = ((((adc_T >> 3) - ((υπογεγραμμένο μεγάλο int) dig_T1 11; var2 = (((((adc_T >> 4) - ((υπογεγραμμένο μεγάλο int) dig_T1)) * ((adc_T >> 4) - ((υπογεγραμμένο μεγάλο int) dig_T1))) >> 12) * ((υπογεγραμμένο long int) dig_T3)) >> 14; t_fine = var1 + var2; T = (t_fine * 5 + 128) >> 8; επιστροφή T;} unsigned long int calibration_P (signature long int adc_P) {signature long int var1, var2; unsigned long int P; var1 = (((signature long int) t_fine) >> 1) - (υπογραφή long int) 64000; var2 = (((var1 >> 2) * (var1 >> 2)) >> 11) * ((υπογεγραμμένο long int) dig_P6); var2 = var2 + ((var1 * ((υπογεγραμμένο μακρύ int) dig_P5)) 2) + (((υπογεγραμμένο μεγάλο int) dig_P4) 2) * (var1 >> 2)) >> 13)) >> 3) + ((((υπογεγραμμένο long int) dig_P2) * var1) >> 1)) >> 18; var1 = ((((32768+var1))*((υπογεγραμμένο μακρύ int) dig_P1)) >> 15); if (var1 == 0) {return 0? } P = (((χωρίς υπογραφή long int) (((υπογεγραμμένο long int) 1048576) -adc_P)-(var2 >> 12)))*3125; εάν (P <0x80000000) {P = (P << 1) / ((χωρίς υπογραφή long int) var1); } else {P = (P / (unsigned long int) var1) * 2; } var1 = (((υπογεγραμμένο μεγάλο int) dig_P9) * ((υπογεγραμμένο long int) (((P >> 3) * (P >> 3)) >> 13))] >> 12; var2 = (((υπογεγραμμένο μεγάλο int) (P >> 2)) * ((υπογεγραμμένο long int) dig_P8)) >> 13; P = (χωρίς υπογραφή long int) ((υπογεγραμμένο long int) P + ((var1 + var2 + dig_P7) >> 4)); επιστροφή P? } unsigned long int calibration_H (signature long int adc_H) {signature long int v_x1; v_x1 = (t_fine - ((υπογραφή long int) 76800)); v_x1 = (((((adc_H << 14) -(((υπογράφηκε μακρά int) dig_H4) 15) * ((((((v_x1 * ((υπογράφηκε μακρά int) dig_H6)) >> 10) *) (((v_x1 * ((υπογεγραμμένο μεγάλο int) dig_H3)) >> 11) + ((υπογεγραμμένο long int) 32768))) >> 10) + ((υπογεγραμμένο long int) 2097152)) * ((υπογεγραμμένο long int) dig_H2) + 8192) >> 14)); v_x1 = (v_x1 - ((((((v_x1 >> 15) * (v_x1 >> 15)) >> 7) * ((υπογεγραμμένο πολύ int) dig_H1)) >> 4)); v_x1 = (v_x1 419430400? 419430400: v_x1); επιστροφή (χωρίς υπογραφή long int) (v_x1 >> 12);}

Βήμα 5: Σενάρια MakeCode/JavaScript

Σενάρια MakeCode/JavaScript
Σενάρια MakeCode/JavaScript

Η Pimoroni κυκλοφόρησε πρόσφατα το enviro: bit, που συνοδεύεται από αισθητήρα πίεσης BMP280, αισθητήρα φωτός/χρώματος και μικρόφωνο MEMS. Προσφέρουν επίσης ένα MicroPython και μια βιβλιοθήκη MakeCode/JavaScript.

Χρησιμοποίησα το τελευταίο για να γράψω ένα σενάριο MakeCode για τον αισθητήρα πίεσης. Το αντίστοιχο hex αρχείο μπορεί να αντιγραφεί απευθείας στο micro: bit σας. Ο κώδικας εμφανίζεται παρακάτω και ενδέχεται να τροποποιηθεί χρησιμοποιώντας το διαδικτυακό πρόγραμμα επεξεργασίας MakeCode.

Είναι μια παραλλαγή του σεναρίου για το micro: bit dive-o-meter. Από προεπιλογή εμφανίζει τη διαφορά πίεσης ως γράφημα ράβδων. Πατώντας το κουμπί A ορίζεται η πίεση αναφοράς, πατώντας το κουμπί Β εμφανίζεται η διαφορά μεταξύ της πραγματικής και της πίεσης αναφοράς σε hPa.

Εκτός από τη βασική έκδοση γραμμωτού κώδικα, θα βρείτε επίσης μια έκδοση "X", διασταυρούμενη τρίχα και μια έκδοση "L", που προορίζονται για να κάνουν την ανάγνωση ευκολότερη.

ας στήλη = 0

let stay = 0 let Row = 0 let Meter = 0 let Delta = 0 let Ref = 0 let Is = 0 Is = 1012 basic.showLeds (` # # # # # # # #. # #. #. # # #.. # # # # # # `) Ref = 1180 basic.clearScreen () basic.forever (() => {basic.clearScreen () if (input.buttonIsPressed (Button. A)) {Ref = envirobit.getPressure () Basic.showLeds (` #. #. #. #. #. # # # # #. #. #. #. #. #`) Basic.pause (1000)} αλλιώς εάν (input.buttonIsPressed (Button. B)) {basic.showString ("" + Delta + "hPa") basic.pause (200) basic.clearScreen ()} else {Is = envirobit.getPressure () Delta = Is - Ref Meter = Math.abs (Delta) αν (Meter> = 400) {Row = 4} else if (Meter> = 300) {Row = 3} else if (Meter> = 200) {Row = 2} else if (Meter> = 100) {Row = 1} else {Row = 0} stay = Meter - Row * 100 if (stay> = 80) {Column = 4} else if (stay> = 60) {Column = 3} else if (stay> = 40) {Column = 2 } else if (stay> = 20) {Column = 1} else {Column = 0} for (ας ColA = 0; ColA <= Column; ColA ++) {led.plot (ColA, Row)} Basic.pause (500)}})

Συνιστάται: