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

A Micro: bit Dive-O-Meter: 8 βήματα (με εικόνες)
A Micro: bit Dive-O-Meter: 8 βήματα (με εικόνες)

Βίντεο: A Micro: bit Dive-O-Meter: 8 βήματα (με εικόνες)

Βίντεο: A Micro: bit Dive-O-Meter: 8 βήματα (με εικόνες)
Βίντεο: Τι είσαι?! 2024, Ιούλιος
Anonim
A Micro: bit Dive-O-Meter
A Micro: bit Dive-O-Meter
A Micro: bit Dive-O-Meter
A Micro: bit Dive-O-Meter
A Micro: bit Dive-O-Meter
A Micro: bit Dive-O-Meter

Το καλοκαίρι είναι εδώ, η ώρα της πισίνας του!

Μια καλή ευκαιρία να πάρετε τον εαυτό σας και το μικρό σας: λίγο έξω, και σε αυτή την περίπτωση ακόμη και στην πισίνα.

Το micro: bit dive-o-meter που περιγράφεται εδώ είναι ένας απλός μετρητής βάθους DIY που σας επιτρέπει να μετρήσετε πόσο βαθιά ή καταδυθείτε. Αποτελείται από ένα micro: bit, μια μπαταρία ή LiPo, έναν ακροδέκτη για το micro: bit, έναν αισθητήρα βαρομετρικής πίεσης BMP280 ή BME280 και μερικά καλώδια βραχυκυκλωτήρων. Χρησιμοποιώντας το Pimoroni enviro: το bit κάνει τα πράγματα ακόμα πιο απλά. Όλα αυτά είναι συσκευασμένα σε δύο στρώματα από υδατοστεγείς διαφανείς πλαστικές σακούλες ή σιλικόνη, με κάποια βάρη να προστίθενται για να αντισταθμίσουν την πλευστή δύναμη.

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

Μπορείτε να χρησιμοποιήσετε τη συσκευή e. σολ. για αγώνες κατάδυσης με φίλους και οικογένεια, ή για να μάθετε πόσο βαθιά είναι αυτή η λίμνη. Το δοκίμασα χρησιμοποιώντας τη βαθύτερη πισίνα στη γειτονιά μου και διαπίστωσα ότι λειτουργεί τουλάχιστον σε βάθος 3,2 μέτρων. Περίπου πέντε μέτρα είναι το θεωρητικό μέγιστο. Μέχρι στιγμής δεν έχω δοκιμάσει με ακρίβεια την ακρίβειά του, αλλά οι αναφερόμενοι αριθμοί ήταν τουλάχιστον στο αναμενόμενο εύρος.

Μερικές παρατηρήσεις: Αυτό δεν προορίζεται να είναι ένα εργαλείο για πραγματικούς δύτες. Το micro: bit θα χαλάσει αν βραχεί. Χρησιμοποιείτε αυτό το διδακτικό με δική σας ευθύνη.

Ενημέρωση 27 Μαΐου: Τώρα μπορείτε να βρείτε ένα σενάριο MakeCode HEX που μπορείτε να φορτώσετε απευθείας στο micro: bit σας. Δείτε βήμα 6. Ενημέρωση 13 Ιουνίου: Προστέθηκε ένα Enviro: bit και μια έκδοση καλωδίου. Δείτε τα βήματα 7 & 8

Βήμα 1: Η θεωρία πίσω από τη συσκευή

Ζούμε στον πάτο ενός ωκεανού αέρα. Η πίεση εδώ είναι περίπου 1020 hPa (hectoPascal) καθώς το βάρος της στήλης αέρα που σχηματίζεται εδώ στο διάστημα είναι περίπου 1 kg ανά τετραγωνικό εκατοστό.

Η πυκνότητα του νερού είναι πολύ μεγαλύτερη, καθώς ένα λίτρο αέρα ζυγίζει περίπου 1,2 g και ένα λίτρο νερό 1 kg, δηλαδή περίπου 800 φορές. Έτσι, καθώς η πτώση της βαρομετρικής πίεσης είναι περίπου 1 hPa για κάθε 8 μέτρα ύψος, η αύξηση πίεσης είναι 1 hPa για κάθε εκατοστό κάτω από την επιφάνεια του νερού. Σε βάθος περίπου 10 m, η πίεση είναι 2000 hPa, ή δύο ατμόσφαιρες.

Ο αισθητήρας πίεσης που χρησιμοποιείται εδώ έχει εύρος μέτρησης μεταξύ 750 και 1500 hPa σε ανάλυση περίπου 1 hPa. Αυτό σημαίνει ότι μπορούμε να μετρήσουμε βάθη έως και 5 μέτρα σε ανάλυση περίπου 1 cm.

Η συσκευή θα ήταν μετρητής βάθους τύπου Boyle Marriotte. Η συναρμολόγησή του είναι αρκετά απλή και περιγράφεται σε μεταγενέστερο βήμα. Ο αισθητήρας χρησιμοποιεί το πρωτόκολλο I2C, επομένως ένας βύσμα ακμής για το micro: bit είναι βολικό. Το πιο κρίσιμο μέρος είναι οι αδιάβροχες σακούλες, καθώς οποιαδήποτε υγρασία θα βλάψει το μικρό: bit, τον αισθητήρα ή την μπαταρία. Καθώς θα παγιδευτεί λίγος αέρας μέσα στις σακούλες, η προσθήκη βαρών βοηθά στην αντιστάθμιση της πλευστής δύναμης.

Βήμα 2: Χρήση της συσκευής

Χρήση της Συσκευής
Χρήση της Συσκευής
Χρήση της Συσκευής
Χρήση της Συσκευής
Χρήση της Συσκευής
Χρήση της Συσκευής
Χρήση της Συσκευής
Χρήση της Συσκευής

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

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

Χρησιμοποιώντας το κουμπί A στο micro: bit, θα ορίσετε την τρέχουσα πίεση ως τιμή πίεσης αναφοράς. Για επιβεβαίωση της καταχώρισης, η μήτρα αναβοσβήνει μία φορά.

Μπορείτε να το χρησιμοποιήσετε είτε για να δείτε πόσο βαθιά βουτάτε, είτε για να καταγράψετε πόσο βαθιά βουτήξατε.

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

Βήμα 3: Απαιτούμενα υλικά

Απαιτούμενα υλικά
Απαιτούμενα υλικά
Απαιτούμενα υλικά
Απαιτούμενα υλικά
Απαιτούμενα υλικά
Απαιτούμενα υλικά

Ένα μικρό: λίγο. Π.χ. στα 13 GBP/16 ευρώ στο Pimoroni UK/DE.

Υποδοχή ακμής (Kitronic ή Pimoroni), 5 GBP. Χρησιμοποίησα την έκδοση Kitronic.

Αισθητήρας BMP/BME280. Χρησιμοποίησα έναν αισθητήρα BMP280 από το Banggood, 4,33 Ευρώ για τρεις μονάδες.

Καλώδια βραχυκυκλωτήρα για σύνδεση αισθητήρα και ακροδέκτη ακμής.

Μια εξαιρετική εναλλακτική λύση για τον συνδυασμό ακροδεκτών/αισθητήρων παραπάνω θα μπορούσε να είναι το Pimoroni enviro: bit (δεν έχει δοκιμαστεί μέχρι τώρα, δείτε το τελευταίο βήμα).

Μπαταρία ή LiPo για το micro: bit.

Καλώδιο τροφοδοσίας με διακόπτη (προαιρετικό αλλά βοηθητικό). Σαφείς στεγανές σακούλες. Χρησιμοποίησα μια θήκη σιλικόνης για ένα κινητό τηλέφωνο και μία ή δύο μικρές τσάντες ziploc. Βεβαιωθείτε ότι το υλικό είναι αρκετά παχύ, έτσι ώστε οι καρφίτσες στο σύνδεσμο άκρων να μην καταστρέψουν τις τσάντες.

Κάποια βάρη. Χρησιμοποίησα κομμάτια μολύβδου που χρησιμοποιούνται για ψάρεμα.

Arduino IDE και αρκετές βιβλιοθήκες.

Βήμα 4: Συναρμολόγηση

Συνέλευση
Συνέλευση
Συνέλευση
Συνέλευση
Συνέλευση
Συνέλευση
Συνέλευση
Συνέλευση

Εγκαταστήστε το Arduino IDE και τις απαιτούμενες βιβλιοθήκες. Οι λεπτομέρειες περιγράφονται εδώ.

(Δεν απαιτείται για το σενάριο MakeCode.) Δεδομένου ότι χρησιμοποιείτε το σύνδεσμο ακμής Kitronik, συγκολλήστε καρφίτσες στις θύρες I2C 19 & 20. Αυτό δεν απαιτείται για τον ακροδέκτη ακμής Pimoroni. Συγκολλήστε την κεφαλίδα στον αισθητήρα που σπάει και συνδέστε τον αισθητήρα και τον ακροδέκτη ακμής χρησιμοποιώντας καλώδια βραχυκυκλωτήρων. Συνδέστε το VCC σε 3V, το GND στο 0 V, το SCL στη θύρα 19 και το SDA στη θύρα 20. Εναλλακτικά, κολλήστε τα καλώδια απευθείας στη διάσπαση. Συνδέστε το micro: bit στον υπολογιστή μας μέσω καλωδίου USB. Ανοίξτε το παρεχόμενο σενάριο και μετακινήστε το στο micro: bit. Χρησιμοποιήστε τη σειριακή οθόνη ή το σχεδιαστή, ελέγξτε αν ο αισθητήρας παρέχει λογικά δεδομένα. Αποσυνδέστε το micro: bit από τον υπολογιστή σας. Συνδέστε την μπαταρία ή το LiPo στο micro: bit. Πατήστε το κουμπί B, διαβάστε την τιμή Πατήστε το κουμπί A. Πατήστε το κουμπί B, διαβάστε την τιμή. Τοποθετήστε τη συσκευή σε δύο στρώματα αεροστεγείς σακούλες, αφήνοντας πολύ λίγο αέρα στις σακούλες. Σε περίπτωση, τοποθετήστε ένα βάρος για να αντισταθμίσετε τη δύναμη άνωσης. Ελέγξτε αν όλα είναι στεγανά. Πηγαίνετε στην πισίνα και παίξτε.

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

Το σενάριο απλώς παίρνει την τιμή πίεσης από τον αισθητήρα, τη συγκρίνει με την τιμή αναφοράς και στη συνέχεια υπολογίζει το βάθος από τη διαφορά. Για την εμφάνιση των τιμών ως γράφημα ράβδων, λαμβάνεται ο ακέραιος και το υπόλοιπο μέρος της τιμής βάθους. Το πρώτο καθορίζει το ύψος της γραμμής. Το υπόλοιπο χωρίζεται σε πέντε κάδους, οι οποίοι ορίζουν το μήκος των ράβδων. Το ανώτερο επίπεδο είναι 0 - 1 m, το χαμηλότερο 4 - 5 m. Όπως αναφέρθηκε προηγουμένως, το πάτημα του κουμπιού Α ορίζει την πίεση αναφοράς, το κουμπί Β εμφανίζει το "σχετικό βάθος" σε μέτρα, που εμφανίζεται ως αριθμητική τιμή. Μέχρι τώρα, οι αρνητικές και θετικές τιμές παρουσιάζονται ως bargraph στη μήτρα LED με τον ίδιο τρόπο. Μη διστάσετε να βελτιστοποιήσετε το σενάριο για τις ανάγκες σας. Μπορείτε να καταργήσετε τη σίγαση ορισμένων γραμμών για να εμφανίσετε τις τιμές στη σειριακή οθόνη ή στο σχεδιαστή του Arduino IDE. Για να μιμηθείτε τη λειτουργία, μπορείτε να δημιουργήσετε τη συσκευή που περιέγραψα σε προηγούμενες οδηγίες.

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

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

#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; διπλό πάτημα_norm = 1015; // τιμή εκκίνησης διπλό βάθος. // υπολογισμένο βάθος // ------------------------------------------------ ------------------------------------------------------ ---------------------- 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.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; int M; διπλό πάτημα_δέλτα? // σχετική πίεση int βάθος_m; // βάθος σε μέτρα, ακέραιο μέρος διπλό βάθος_cm; // υπόλοιπο σε cm 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 // Το κουμπί A ορίζει την πραγματική τιμή ως αναφορά (P μηδέν) // Το κουμπί B εμφανίζει την τρέχουσα τιμή ως βάθος σε μέτρα (υπολογίζεται από τη διαφορά πίεσης) εάν (! digitalRead (PIN_BUTTON_A)) {// ρυθμίσει την κανονική πίεση αέρα ως μηδέν press_norm = press_act; // microbit.print ("P0:"); // microbit.print (press_norm, 0); // microbit.print ("hPa"); microbit.fillScreen (LED_ON); // αναβοσβήνει μία φορά για επιβεβαίωση καθυστέρησης (100). } else if (! digitalRead (PIN_BUTTON_B)) {// εμφάνιση βάθους σε μέτρα microbit.print (βάθος, 2); microbit.print ("m"); // Serial.println (""); } else {// υπολογίστε το βάθος από τη διαφορά πίεσης press_delta = (press_act - press_norm); // υπολογίστε το σχετικό βάθος πίεσης = (press_delta/100); // βάθος σε μέτρα βάθος_m = int (abs (βάθος)); // βάθος im μέτρα βάθος_cm = (abs (βάθος) - βάθος_m); // υπόλοιπο /* // χρησιμοποιείται για ανάπτυξη Serial.println (βάθος); Serial.println (βάθος_μ); Serial.println (βάθος_cm); */ // Βήματα για bargraph εάν (βάθος_cm> 0,8) {// ορίστε το μήκος των ράβδων (N = 4). } else if (βάθος_cm> 0,6) {(N = 3); } else if (βάθος_cm> 0,4) {(N = 2); } else if (βάθος_cm> 0,2) {(N = 1); } else {(N = 0); }

εάν (βάθος_μ == 4) {// ορίστε επίπεδο == μέτρο

(Μ = 4); } else if (deep_m == 3) {(M = 3); } else if (deep_m == 2) {(M = 2); } else if (deep_m == 1) {(M = 1); } else {(M = 0); // επάνω σειρά} /* // χρησιμοποιείται για σκοπούς ανάπτυξης Serial.print ("m:"); Serial.println (βάθος_μ); Serial.print ("cm:"); Serial.println (βάθος_cm); Serial.print ("M:"); Serial.println (M); // για σκοπούς ανάπτυξης Serial.print ("N:"); Serial.println (N); // για λόγους ανάπτυξης καθυστέρηση (500). */ // draw bargraph microbit.drawLine (0, M, N, M, LED_ON); }

// αποστολή τιμής στη σειριακή θύρα για plotter

Serial.print (press_delta); // σχεδιάστε γραμμές ενδείξεων και διορθώστε το εμφανιζόμενο εύρος Serial.print ("\ t"); Serial.print (0); Serial.print ("\ t"); Serial.print (-500); Serial.print ("\ t"); Serial.println (500); καθυστέρηση (500)? // Μετρήστε δύο φορές το δευτερόλεπτο} // --------------------------------------------- ------------------------------------------------------ ------------------------------------------------------ -------- // τα ακόλουθα απαιτούνται για τον αισθητήρα 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] 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 * ((υπογεγραμμένο long int) dig_P5)) 2) + (((υπογεγραμμένο long int) dig_P4) 2) * (var1 >> 2)) >> 13)) >> 3) + ((((υπογεγραμμένο για μεγάλο διάστημα 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);

Βήμα 6: Μια σημαντική απλοποίηση: ο κώδικας MakeCode/JavaScript

Μια σημαντική απλοποίηση: ο κώδικας MakeCode/JavaScript
Μια σημαντική απλοποίηση: ο κώδικας MakeCode/JavaScript
Μια σημαντική απλοποίηση: ο κώδικας MakeCode/JavaScript
Μια σημαντική απλοποίηση: ο κώδικας MakeCode/JavaScript

Τον Μάιο του 2018, η Pimoroni κυκλοφόρησε το enviro: bit, το οποίο συνοδεύεται από αισθητήρα πίεσης/υγρασίας/θερμοκρασίας BME280, αισθητήρα φωτός και χρώματος TCS3472 και μικρόφωνο MEMS. Επιπλέον, προσφέρουν μια βιβλιοθήκη JavaScript για τον επεξεργαστή MakeCode και μια βιβλιοθήκη MicroPython για αυτούς τους αισθητήρες.

Έχω χρησιμοποιήσει τη βιβλιοθήκη MakeCode για να αναπτύξω σενάρια για τη συσκευή μου. Επισυνάπτεται το αντίστοιχο εξάγωνο αρχείο, το οποίο μπορείτε να αντιγράψετε απευθείας στο micro: bit σας.

Παρακάτω θα βρείτε τον αντίστοιχο κώδικα JavaScript. Οι δοκιμές στην πισίνα λειτούργησαν καλά με μια παλαιότερη έκδοση του σεναρίου, οπότε υποθέτω ότι θα λειτουργήσουν επίσης. Εκτός από τη βασική έκδοση, bargraph, υπάρχει επίσης μια διασταυρούμενη έκδοση (X) και μια έκδοση L, που προορίζονται για να κάνουν την ανάγνωση ευκολότερη, ειδικά σε συνθήκες χαμηλού φωτισμού. Επιλέξτε αυτό που προτιμάτε.

ας στήλη = 0

let Meter = 0 let stay = 0 let Row = 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 ("" + Row + "." + stay + "m") basic.pause (200) basic.clearScreen ()} else {Is = envirobit.getPressure () Delta = Is - Ref Meter = Math.abs (Delta) if (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 (let ColA = 0; ColA <= Column; ColA ++) {led.plot (C olA, Row)} Basic.pause (500)}})

Βήμα 7: Η έκδοση Enviro: bit

The Enviro: bit Version
The Enviro: bit Version
The Enviro: bit Version
The Enviro: bit Version
The Enviro: bit Version
The Enviro: bit Version

Εν τω μεταξύ έλαβα το enviro: bit (20 GBP) και την ισχύ: bit (6 GBP), και τα δύο από το Pimoroni.

Όπως προαναφέρθηκε, το enviro: bit συνοδεύεται από τον αισθητήρα πίεσης, υγρασίας και θερμοκρασίας BME280, αλλά και έναν αισθητήρα φωτός και χρώματος (δείτε μια εφαρμογή εδώ) και ένα μικρόφωνο MEMS.

Το power: bit είναι μια ωραία λύση για την τροφοδοσία του micro: bit και συνοδεύεται από διακόπτη on/off.

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

Σε αυτήν την περίπτωση χρησιμοποίησα το micro, power και enviro: bit, τα τοποθέτησα σε μια τσάντα Ziploc, το τοποθέτησα σε μια διαφανή πλαστική σακούλα για κινητά τηλέφωνα, έτοιμο. Μια πολύ γρήγορη και τακτοποιημένη λύση. Δείτε τις εικόνες. Ο διακόπτης είναι αρκετά μεγάλος για να τον χρησιμοποιήσετε μέσω των προστατευτικών στρωμάτων.

Έχει δοκιμαστεί σε νερό, λειτουργεί καλά. Σε βάθος περίπου 1,8 m η μετρημένη τιμή ήταν περίπου 1,7 m. Δεν είναι πολύ κακό για μια γρήγορη και φθηνή λύση, αλλά πολύ μακριά από το να είναι τέλειο. Χρειάζεται λίγος χρόνος για να προσαρμοστεί, οπότε ίσως χρειαστεί να μείνετε σε ένα συγκεκριμένο βάθος για περίπου 10-15 δευτερόλεπτα.

Βήμα 8: Έκδοση καλωδίου και αισθητήρα αισθητήρα

Έκδοση καλωδίου και αισθητήρα αισθητήρα
Έκδοση καλωδίου και αισθητήρα αισθητήρα
Έκδοση καλωδίου και αισθητήρα αισθητήρα
Έκδοση καλωδίου και αισθητήρα αισθητήρα

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

Εδώ κόλλησα τον αισθητήρα BMP280 σε 5 μέτρα καλωδίου 4 συρμάτων και τοποθέτησα θηλυκό άλτη στο άλλο άκρο. Για να προστατεύσει τον αισθητήρα από το νερό, το καλώδιο περνούσε μέσα από ένα φελλό μεταχειρισμένου κρασιού. Τα άκρα του φελλού σφραγίστηκαν με θερμή κόλλα. Πριν είχα κόψει δύο εγκοπές στον φελλό, και οι δύο τριγύρω. Στη συνέχεια, έβαλα τον αισθητήρα σε ένα σφουγγαράκι, τοποθέτησα ένα μπαλόνι γύρω του και στερέωσα το άκρο του μπαλονιού στον φελλό (κάτω εγκοπή). έπειτα τοποθέτησα 3 40 γραμμάρια βάρη μολύβδου σε ένα δεύτερο μπαλόνι, το τύλιξα γύρω από το πρώτο, βάρη τοποθετήθηκαν στην εξωτερική πλευρά και στερέωσα το τέλος του μπαλονιού στη δεύτερη εγκοπή. Ο αέρας αφαιρέθηκε από το δεύτερο μπαλόνι και στη συνέχεια τα πάντα διορθώθηκαν με κολλητική ταινία. Δείτε εικόνες, μπορεί να ακολουθήσουν πιο λεπτομερείς.

Οι βραχυκυκλωτήρες συνδέθηκαν με το micro: bit μέσω ενός ακροδέκτη ακμής, η συσκευή ενεργοποιήθηκε και η πίεση αναφοράς ορίστηκε. Στη συνέχεια, η κεφαλή του αισθητήρα απελευθερώθηκε αργά στον πυθμένα της πισίνας (πύργος άλματος 10 μέτρων, βάθος περίπου 4,5 μέτρων).

Αποτελέσματα:

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

Πιθανές εφαρμογές:

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

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

Εξωτερική προπόνηση γυμναστικής
Εξωτερική προπόνηση γυμναστικής
Εξωτερική προπόνηση γυμναστικής
Εξωτερική προπόνηση γυμναστικής

Δρομέας στο Outdoor Fitness Challenge

Συνιστάται: