Πίνακας περιεχομένων:
- Βήμα 1: Δημιουργήστε ένα έργο Blynk
- Βήμα 2: Λήψη προγραμμάτων στο FireBeetle Board-ESP32
- Βήμα 3: Σύνδεση υλικού
Βίντεο: Πώς να φτιάξετε έναν μετρητή βημάτων ;: 3 βήματα (με εικόνες)
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:32
Συνήθιζα να παίζω καλά σε πολλά αθλήματα: περπάτημα, τρέξιμο, ποδήλατο, παιχνίδι μπάντμιντον κλπ.
Μου αρέσει να ταξιδεύω πολύ πριν. Λοιπόν, κοίτα την κοιλιακή μου κοιλιά ……
Λοιπόν, έτσι κι αλλιώς, αποφασίζω να ξαναρχίσω για άσκηση. Τι εξοπλισμό πρέπει να ετοιμάσω; Εκτός από αθλητικές εγκαταστάσεις, ναι! Χρειάζομαι ένα όργανο! Πιστεύω ότι με αυτό, μπορώ να διατηρήσω την κατάλληλη ποσότητα άσκησης. Εδώ δημιουργείται το όργανο. Ας ξεκινήσουμε με ένα βίντεο
Το όργανο όχι μόνο μπορεί να καταγράφει βήματα (και θερμίδες) σε πραγματικό χρόνο, αλλά να δείχνει χρόνο. Αυτό που είναι ιδιαίτερο είναι ότι η μορφή προβολής είναι δείκτης - πολύ ωραία! Μου αρέσει πολύ, πολύ!
Μπορείτε να ανεβάσετε τα αρχεία σας στο Διαδίκτυο
μόνο με ένα κλικ. Όλες οι εγγραφές μπορούν να εμφανιστούν από το Blynk (ένα λογισμικό έξυπνων τηλεφώνων που είχε εισαχθεί πριν). Το ίδιο με το φορητό έξυπνο ρολόι, το όργανο παίρνει χρόνο on line (οπότε δεν χρειάζεται να φοβάστε την ενημέρωση ισχύος και χρόνου).
Υλικό στο meed:
FireBeetle Board-ESP32
FireBeetle Covers-Proto Board
Οθόνη διανομής OLED12864
Ενότητα επιτάχυνσης
Μπαταρία 3,7V (αγοράστηκε online, η ένταση είναι περίπου 600mAH
3 μπουκάλια (αγοράστηκαν online)
Είναι πολύ βολικό να κατασκευάσετε αυτό το έργο από τον Blybk.
Βήμα 1: Δημιουργήστε ένα έργο Blynk
Προσθέστε δύο στοιχεία ελέγχου:
Εμφάνιση τιμής * 1
Ρολόι σε πραγματικό χρόνο * 1
Το όνομα της ένδειξης τιμής θα πρέπει να οριστεί σε βήματα, αλλά καμία ρύθμιση για τις ιδιότητες του ρολογιού σε πραγματικό χρόνο. Επιλέξτε V1 ως τον πείρο εισόδου για να προσαρμόσετε τη διάταξη των χειριστηρίων, όπως φαίνεται παρακάτω.
Βήμα 2: Λήψη προγραμμάτων στο FireBeetle Board-ESP32
Κάντε κλικ εδώ για να κατεβάσετε τον πηγαίο κώδικα στο esp32. Ο πηγαίος κώδικας περιλαμβάνει αρχεία βιβλιοθήκης και αρχεία τρισδιάστατης εκτύπωσης. Θα πρέπει να αποθηκεύσετε το αρχείο της βιβλιοθήκης στο lib of arduino. Και τα τρισδιάστατα αρχεία μπορούν να εκτυπώσουν κρούστες απευθείας.
Παρακάτω είναι το κύριο πρόγραμμα
#include #include // Απαιτείται μόνο για το Arduino 1.6.5 και νωρίτερα #include "SSD1306.h" // ψευδώνυμο για "#include" SSD1306Wire.h "" #include "OLEDDisplayUi.h" #include "images.h" # περιλαμβάνουν #include #include #include #include #define POWER_KEY 1 #define MENU_KEY 2 #define UPLOAD_KEY 3 boolean upload = false? Οθόνη SSD1306 (0x3c, 18, 0). OLEDDisplayUi ui (& εμφάνιση); Χρονοδιακόπτης SimpleTimer. WidgetRTC rtc; int screenW = 128; int screenH = 64; int clockCenterX = screenW/2; int clockCenterY = ((οθόνηH-16)/2) +16; // πάνω κίτρινο μέρος είναι 16 px ύψος int clockRadius = 23; #define DEVICE (0x53) // ADXL345 διεύθυνση συσκευής #define TO_READ (6) // αριθμός byte που θα διαβάσουμε κάθε φορά (δύο byte για κάθε άξονα) byte buff [TO_READ]; // 6 bytes buffer για την αποθήκευση δεδομένων που διαβάζονται από το str char της συσκευής [100]. // buffer string για μετατροπή δεδομένων πριν τα στείλετε στη σειριακή θύρα int regAddress = 0x32; // πρώτος άξονας-επιτάχυνση-μητρώο δεδομένων στο ADXL345 int xx, yy, zz; // στατικά δεδομένα τριών αξόνων στατική int currentValue = 0; στατικά ανυπόγραφα μεγάλα βήματαSum = 0; char auth = "YourAuthToken"; // Τα διαπιστευτήριά σας WiFi. // Ορίστε τον κωδικό πρόσβασης σε "" για ανοιχτά δίκτυα. char ssid = "YourNetworkName"; char pass = "YourPassword"; const char running_Logo_bits PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x03, 0x00, 0x00 0xF8, 0x01, 0x00, 0x00, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x00, 0xFC, 0x01, 0x00, 0x00, 0x00, 0xFC, 0x05, 0x00, 0x00, 0x00, 0xFC, 0x01, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x60, 0xF1, 0x0, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xF8, 0X17, 0x00, 0x00, 0xC0, 0xF8, 0x0F, 0x00, 0x00, 0xE0 ως, 0xFB, 0X17, 0x00, 0x00, 0xC0, 0xFF, 0x13, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x80, 0xFE, 0x03, 0x00, 0x00, 0x00, 0xF9, 0x03, 0x00, 0x00, 0x00, 0xFA, 0x03, 0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0x00, 0xF0, 0x07, 0x07, 0x07, 0x07, 0x07, 0x00, 0x00, 0x07, 0x07 0xF4, 0x07, 0x00, 0x00, 0x00, 0xF4, 0x0F, 0x00, 0x00, 0x00, 0xF9, 0x0F, 0x00, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x80, 0xFE, 0x00, 0x1F, 0xFF, 0x1F, 0x00, 0x00, 0xA0, 0xFF, 0x5F, 0x00, 0x00, 0xC0, 0x3F, 0x3F, 0x00, 0x0 1 0x00, 0xC0, 0x01, 0xF0, 0x03, 0x00, 0xC0, 0x03, 0xE8, 0x07, 0x00, 0xC0, 0x03, 0x88, 0x6F, 0x00, 0x80, 0x03, 0x40, 0x1E, 0x00, 0xA0, 0x03, 0x40, 0xFC, 0x00, 0x80, 0x03, 0x00, 0xF8, 0x01, 0x00, 0x07, 0x00, 0xF4, 0x00, 0x00, 0x07, 0x00, 0xE8, 0x00, 0x80, 0x0F, 0x00, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0 0x00, 0xE8, 0x0F, 0x00, 0xE8, 0x00, 0xF0, 0x09, 0x00, 0x60, 0x01, 0xF0, 0x04, 0x00, 0x00, 0x00,} · // βοηθητική λειτουργία για ψηφιακή ένδειξη ρολογιού: εκτυπώνει τον αριθμό 0 String twoDigits (int ψηφία) {if (ψηφία <10) {String i = '0'+String (ψηφία); επιστροφή i? } else {return String (ψηφία); }} void clockOverlay (οθόνη OLEDDisplay *, OLEDDisplayUiState * κατάσταση) {if ((ώρα () == 0) && (λεπτό () == 0) && (δεύτερο () == 0)) βήματα Άθροισμα = 0; } void analogClockFrame (οθόνη OLEDDisplay *, κατάσταση OLEDDisplayUiState *, int16_t x, int16_t y) {display-> drawCircle (clockCenterX + x, clockCenterY + y, 2); // κρότωνες ώρας για (int z = 0; z drawLine (x2 + x, y2 + y, x3 + x, y3 + y);} // εμφάνιση μεταχειρισμένης γωνίας πλωτήρα = δεύτερο () * 6; γωνία = (γωνία / 57.29577951); // Μετατροπή βαθμών σε ακτίνια int x3 = (clockCenterX + (sin (γωνία) * (clockRadius - (clockRadius / 5)))); int y3 = (clockCenterY - (cos (γωνία) * (clockRadius - (clockRadius / 5)))); display-> drawLine (clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); // εμφάνιση γωνίας δείκτη χεριού = λεπτό () * 6; γωνία = (γωνία / 57.29577951); // Μετατροπή βαθμών σε ακτίνια x3 = (clockCenterX + (sin (γωνία) * (clockRadius - (clockRadius / 4)))); y3 = (clockCenterY - (cos (γωνία) * (clockRadius - (clockRadius / 4)))). γωνία = (γωνία / 57.29577951) clockRadius - (clockRa dius / 2)))); display-> drawLine (clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); } void digitalClockFrame (OLEDDisplay * display, OLEDDisplayUiState * state, int16_t x, int16_t y) {String date = String (year ())+"/"+twoDigits (month ())+"/"+twoDigits (day ()) ? String timenow = String (hour ())+":"+twoDigits (minute ())+":"+twoDigits (second ()); display-> setTextAlignment (TEXT_ALIGN_CENTER); display-> setFont (ArialMT_Plain_24); display-> drawString (clockCenterX + x, 20, timenow); display-> setFont (ArialMT_Plain_16); display-> drawString (60, 45, ημερομηνία); } void writeTo (int συσκευή, διεύθυνση byte, byte val) {Wire.beginTransmission (συσκευή); // ξεκινήστε τη μετάδοση στη συσκευή Wire.write (διεύθυνση); // αποστολή διεύθυνσης καταχώρισης Wire.write (val); // αποστολή τιμής για εγγραφή Wire.endTransmission (); // τερματισμός μετάδοσης} // διαβάζει num byte ξεκινώντας από την καταχώριση διευθύνσεων στη συσκευή στο buff array void readFrom (int συσκευή, διεύθυνση byte, int num, byte buff ) {Wire.beginTransmission (συσκευή); // ξεκινήστε τη μετάδοση στη συσκευή Wire.write (διεύθυνση); // στέλνει διεύθυνση για ανάγνωση από το Wire.endTransmission (); // τερματισμός μετάδοσης Wire.beginTransmission (συσκευή); // ξεκινήστε τη μετάδοση στη συσκευή Wire.requestFrom (συσκευή, αριθ.) // ζητήστε 6 byte από τη συσκευή int i = 0; ενώ η (Wire.available ()) // συσκευή μπορεί να στείλει λιγότερα από τα ζητούμενα (μη φυσιολογικά) {buff = Wire.read (); // λάβετε ένα byte i ++; } Wire.endTransmission (); // τερματισμός μετάδοσης} void runningFrame (οθόνη OLEDDisplay*, κατάσταση OLEDDisplayUiState*, int16_t x, int16_t y) {float calValue = stepsSum*0.4487; display-> setTextAlignment (TEXT_ALIGN_CENTER); display-> setFont (ArialMT_Plain_24); display-> drawString (clockCenterX, clockCenterY, str); sprintf (str, "%.2fcal", calValue); display-> setTextAlignment (TEXT_ALIGN_CENTER); display-> setFont (ArialMT_Plain_10); display-> drawString (100, 20, str); display-> drawXbm (10, 14, 34, 50, running_Logo_bits); } void uploadFrame (οθόνη OLEDDisplay *, κατάσταση OLEDDisplayUiState *, int16_t x, int16_t y) {display-> setFont (ArialMT_Plain_16); display-> drawString (60, 45, "μεταφόρτωση δεδομένων …"); } // Αυτός ο πίνακας διατηρεί δείκτες λειτουργιών σε όλα τα πλαίσια // πόσα καρέ υπάρχουν; int frameCount = 4; // Οι επικαλύψεις σχεδιάζονται στατικά πάνω από ένα πλαίσιο, π.χ. επικάλυψη ρολογιού OverlayCallback = {clockOverlay}; int overlaysCount = 1; void uploadToBlynk (void) {if (upload == true) {Blynk.virtualWrite (V0, stepsSum); Blynk.virtualWrite (V1, stepsSum); }} void uiInit (άκυρο) {ui.setTargetFPS (30); //ui.setActiveSymbol(activeSymbol); //ui.setInactiveSymbol(inactiveSymbol); ui.setIndicatorPosition (TOP); ui.setIndicatorDirection (LEFT_RIGHT); ui.setFrameAnimation (SLIDE_LEFT); ui.setFrames (frames, frameCount); ui.setOverlays (επικαλύψεις, overlaysCount); ui.disableAutoTransition (); ui.switchToFrame (2); ui.init (); display.flipScreenVertically (); } void adxl345Init (void) {writeTo (DEVICE, 0x2D, 0); writeTo (ΣΥΣΚΕΥΗ, 0x2D, 16); writeTo (ΣΥΣΚΕΥΗ, 0x2D, 8); } void updateAdxl345 (void) {readFrom (DEVICE, regAddress, TO_READ, buff); // διαβάστε τα δεδομένα επιτάχυνσης από το ADXL345 xx = (((int) buff [1]) << 8) | buff [0]; yy = (((int) buff [3]) << 8) | buff [2]; zz = (((int) buff [5]) << 8) | buff [4]; if (xx 80) {if (xx <currentValue) {stepsSum ++; } currentValue = xx; } sprintf (str, "%d", stepsSum); } int getKeys (άκυρο) {if (digitalRead (D2) == LOW) {καθυστέρηση (5); εάν (digitalRead (D2) == LOW) {while (digitalRead (D2) == LOW)? επιστροφή POWER_KEY }} if (digitalRead (D3) == LOW) {καθυστέρηση (5); εάν (digitalRead (D3) == LOW) {while (digitalRead (D3) == LOW)? επιστροφή MENU_KEY; }} if (digitalRead (D4) == LOW) {καθυστέρηση (5); εάν (digitalRead (D4) == LOW) {while (digitalRead (D4) == LOW)? επιστροφή UPLOAD_KEY; }} επιστροφή 0; } void doKeysFunction (void) {static int uiFrameIndex = 2; κλειδιά int = getKeys (); if (κλειδιά == POWER_KEY) {στατικός χαρακτήρας i = 0; εάν (i) {ui.init (); display.flipScreenVertically (); display.displayOn (); } else {display.displayOff (); } i = ~ i; } if (κλειδιά == MENU_KEY) {if (upload == false) {uiFrameIndex ++; εάν (uiFrameIndex == 3) uiFrameIndex = 0; ui.switchToFrame (uiFrameIndex); } else {ui.switchToFrame (3); }} if (κλειδιά == UPLOAD_KEY) {if (upload == true) {upload = false; ui.switchToFrame (uiFrameIndex); } else {upload = true; ui.switchToFrame (3); }}} void setup () {pinMode (D2, INPUT); pinMode (D3, INPUT); pinMode (D4, INPUT); Blynk.begin (auth, ssid, pass); rtc.begin (); uiInit (); adxl345Init (); timer.setInterval (30, updateAdxl345); timer.setInterval (100, uploadToBlynk); } void loop () {int დარჩენილიTimeBudget = ui.update (); στατικό int testSum = 0; if ((testSum 0) {delay (დარჩენილიTimeBudget);} doKeysFunction (); timer.run ();}
Προσοχή: Θα πρέπει να τροποποιήσετε τη ρύθμιση Wi-Fi, το διαβατήριο και το AUTHTOKENS στον εαυτό σας.
char auth = "YourAuthToken"; // Τα διαπιστευτήριά σας WiFi. // Ορίστε τον κωδικό πρόσβασης σε "" για ανοιχτά δίκτυα. char ssid = "YourNetworkName"; char pass = "YourPassword";
Βήμα 3: Σύνδεση υλικού
Συνδέστε το OLED12864 και τη μονάδα επιτάχυνσης στο I2C, στο κάτω μέρος στο D2, D3, D4. Επιπλέον, προσθέστε 51k pull-up αντιστάσεις στους πυθμένες για να φτάσετε τα 3.3V, όπως φαίνεται παρακάτω.
Προσοχή: Είναι λάθος να συνδέσετε αντιστάσεις έλξης στο AREF, το σωστό είναι στα 3.3V
Η εικόνα συγκόλλησης υλικού, όπως φαίνεται παρακάτω:
Μετά τη συγκόλληση, συναρμολόγηση μονάδας υλικού σε κρούστα, όπως φαίνεται παρακάτω:
Ολοκληρωμένη εικόνα εφέ
Συνιστάται:
Πώς να φτιάξετε έναν μετρητή νομισμάτων: 3 βήματα
Πώς να φτιάξετε έναν μετρητή νομισμάτων: Αυτό το εγχειρίδιο θα περιγράψει πώς να δημιουργήσετε έναν μετρητή κουμπαράς με ένα GreenPAK. Αυτός ο μετρητής κουμπαράς θα χρησιμοποιεί τρία κύρια στοιχεία: GreenPAK SLG46531V: Το GreenPAK χρησιμεύει ως διερμηνέας μεταξύ των αισθητήρων και της οθόνης
Πώς να φτιάξετε έναν μετρητή ανθρώπων με Raspberry Pi και Ubidots: 6 βήματα
Πώς να δημιουργήσετε έναν μετρητή ανθρώπων με Raspberry Pi και Ubidots: Σε αυτό το απλό έργο θα χρησιμοποιήσουμε έναν αισθητήρα κίνησης για να ανιχνεύσουμε εάν ένα αντικείμενο περνά μπροστά από το Raspberry Pi. Στη συνέχεια, θα μετρήσουμε πόσες φορές συμβαίνει αυτό και θα στείλουμε αυτήν την τιμή στο Ubidots. Οι μετρητές ανθρώπων είναι συνήθως ακριβές συσκευές που χρησιμοποιούνται σε
Πώς να φτιάξετε έναν μετρητή Vu διπλού καναλιού χρησιμοποιώντας το LM3914: 3 βήματα
Πώς να φτιάξετε έναν μετρητή Vu διπλού καναλιού χρησιμοποιώντας το LM3914: Σε αυτήν την ανάρτηση θα μοιραστώ πώς να φτιάξετε έναν μετρητή Vu διπλού καναλιού χρησιμοποιώντας το LM3914 IC. Μπορείτε να παρακολουθήσετε το βίντεο που επισυνάπτεται μαζί με την ανάρτηση για πλήρη κατασκευή & εργάζεστε στο έργο ή συνεχίστε να διαβάζετε την ανάρτηση
Πώς να φτιάξετε έναν προσαρμοσμένο μετρητή θερμοκρασίας DIY χρησιμοποιώντας το Graph Bar & Atmega328p: 3 βήματα (με εικόνες)
Πώς να φτιάξετε έναν προσαρμοσμένο μετρητή θερμοκρασίας DIY χρησιμοποιώντας το Graph Bar & Atmega328p: Σε αυτήν την ανάρτηση θα σας δείξω πώς να φτιάξετε ένα μετρητή θερμοκρασίας χρησιμοποιώντας το Bar Graph & Atmega328σ. Η ανάρτηση θα περιλαμβάνει όλες τις λεπτομέρειες όπως διάγραμμα κυκλώματος, κατασκευή PCB, κωδικοποίηση, συναρμολόγηση & Δοκιμές. Έχω συμπεριλάβει επίσης ένα βίντεο που περιέχει όλα τα
Πώς να φτιάξετε έναν μετρητή VU χρησιμοποιώντας το Arduino: 3 βήματα (με εικόνες)
Πώς να φτιάξετε έναν μετρητή VU χρησιμοποιώντας το Arduino: Ο μετρητής VU είναι μετρητής μονάδας έντασης (VU) ή ο τυπικός δείκτης έντασης (SVI) είναι μια συσκευή που εμφανίζει μια αναπαράσταση του επιπέδου σήματος στον εξοπλισμό ήχου. Χρησιμοποιείται για την απεικόνιση του αναλογικού σήματος. Τώρα θα σας καθοδηγήσω πώς να φτιάξετε έναν μετρητή VU χρησιμοποιώντας