Përmbajtje:

Si të bëni një numërues hapash ?: 3 hapa (me fotografi)
Si të bëni një numërues hapash ?: 3 hapa (me fotografi)

Video: Si të bëni një numërues hapash ?: 3 hapa (me fotografi)

Video: Si të bëni një numërues hapash ?: 3 hapa (me fotografi)
Video: Gjeniu i matematikës, 13-vjeçari që zgjidh ushtrimet më shpejt së makina llogaritëse 2024, Qershor
Anonim
Image
Image
Krijoni një projekt Blynk
Krijoni një projekt Blynk

Më parë performoja mirë në shumë sporte: ecje, vrapim, ngasja biçikletë, duke luajtur badminton etj.

Më pëlqen shumë të udhëtoj për të udhëtuar. Epo, shiko barkun tim portual ……

Epo, gjithsesi, vendos të rifilloj të stërvitem. Çfarë pajisje duhet të përgatis? Përveç objektit sportiv, po! Kam nevojë për një instrument! Unë besoj se me të, unë mund të mbaj sasinë e duhur të stërvitjes. Këtu instrumenti vjen në ekzistencë. Le të fillojmë me një video

Instrumenti jo vetëm që mund të regjistrojë hapa (dhe kalori) në kohë reale, por të tregojë kohën. E veçanta është se formati i shfaqjes është tregues ~ aq i lezetshëm! Me të vërtetë, me të vërtetë më pëlqen!

Ju mund t'i ngarkoni të dhënat tuaja në internet

vetëm me një klikim. Të gjitha regjistrimet mund të shfaqen nga Blynk (një softuer i telefonave inteligjentë i prezantuar më parë). Ashtu si ora inteligjente e veshshme, instrumenti merr kohë në linjë (Pra, nuk keni nevojë të keni frikë nga përditësimi i fuqisë dhe kohës).

Pajisjet kompjuterike në bar:

Bordi FireBeetle-ESP32

FireBeetle Covers-Proto Board

Ekrani i shpërndarjes OLED12864

Moduli i përshpejtimit

Bateri 3.7V (e blerë në internet, vëllimi është rreth 600mAH)

3 shishe (blerë në internet

Shtë shumë i përshtatshëm për të ndërtuar këtë projekt nga Blybk.

Hapi 1: Krijoni një Projekt Blynk

Shtoni dy kontrolle:

Shfaqja e vlerës * 1

Ora në kohë reale * 1

Emri i ekranit të vlerës duhet të vendoset në hapa, por asnjë cilësim për vetitë e orës në kohë reale. Zgjidhni V1 si pin hyrje për të rregulluar paraqitjen e kontrolleve, të treguar si më poshtë.

Hapi 2: Shkarkoni Programet në FireBeetle Board-ESP32

Klikoni këtu për të shkarkuar kodin burimor në esp32. Kodi burim përbëhet nga skedarë bibliotekash dhe skedarë printimi 3D. Duhet ta ruani skedarin e bibliotekës në lib of arduino. Dhe skedarët 3D mund të printojnë kore direkt.

Më poshtë është programi kryesor

#include #include // Nevojitet vetëm për Arduino 1.6.5 dhe më herët #përfshi "SSD1306.h" // alias për `#include" SSD1306Wire.h "` # #include "OLEDDisplayUi.h" #include "images.h" # përfshijnë #përfshijnë #përfshijnë #përfshijnë #përfshijnë #përcaktojnë POWER_KEY 1 #përcaktojnë MENU_KEY 2 #përcaktojnë UPLOAD_KEY 3 ngarkim boolean = false; Ekran SSD1306 (0x3c, 18, 0); OLEDDisplayUi ui (& shfaq); Kohëmatësi SimpleTimer; WidgetRTC rtc; int ekranW = 128; int screenH = 64; int clockCenterX = ekranW/2; int clockCenterY = ((ekranH-16)/2) +16; // pjesa e verdhë e sipërme është 16 px lartësi int clockRadius = 23; #define DEVICE (0x53) // Adresa e pajisjes ADXL345 #përcakto TO_READ (6) // numrin e bajtëve që do të lexojmë çdo herë (dy byte për secilin aks) byte buff [TO_READ]; // 6 bytes tampon për ruajtjen e të dhënave të lexuara nga pajisja char str [100]; // string buffer për të transformuar të dhënat para se t'i dërgoni në portin serik int regAddress = 0x32; // regjistri i parë i aksit-nxitimit-të dhënave në ADXL345 int xx, yy, zz; // të dhëna të nxitimit me tre boshte statike int currentValue = 0; hapa të gjatë të panënshkruar statikëSum = 0; char auth = "YourAuthToken"; // Kredencialet tuaja WiFi. // Vendosni fjalëkalimin në "" për rrjetet e hapura. char ssid = "Emri juaj i rrjetit"; char pass = "Fjalëkalimi juaj"; 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, 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, 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, 0xF, 0x03, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x03 0xFE, 0x03, 0x00, 0x00, 0x00, 0xF9, 0x03, 0x00, 0x00, 0x00, 0xFA, 0x03, 0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x07, 0x07, 0x07, 0x00, 0x07, 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 0.5 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, 0x3 0x00, 0xE8, 0x0F, 0x00, 0xE8, 0x00, 0xF0, 0x09, 0x00, 0x60, 0x01, 0xF0, 0x04, 0x00, 0x00, 0x00,}; // funksioni i shërbimit për shfaqjen e orës dixhitale: printon në krye 0 String twoDigits (shifrat int) {if (shifrat <10) {String i = '0'+String (shifra); kthehem i; } else {kthimi i vargut (shifrat); }} void clockOverlay (ekrani OLEDDisplay *, gjendja * OLEDDisplayUiState *) {if ((orë () == 0) && (minuta () == 0) && (e dyta () == 0)) hapaSum = 0; } void analogClockFrame (ekrani OLEDDisplay *, gjendja * OLEDDisplayUiState *, int16_t x, int16_t y) {display-> drawCircle (clockCenterX + x, clockCenterY + y, 2); // rriqrat e orës për (int z = 0; z drawLine (x2 + x, y2 + y, x3 + x, y3 + y);} // shfaq këndin e notimit të dorës së dytë = e dytë () * 6; kënd = (kënd / 57.29577951); // Shndërroni gradat në radianë int x3 = (clockCenterX + (sin (këndi) * (clockRadius - (clockRadius / 5)))); int y3 = (clockCenterY - (cos (këndi) * (clockRadius - (clockRadius / 5)))); ekran-> drawLine (clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); // shfaq këndin e dorës së minutës = minutë () * 6; kënd = (kënd / 57.29577951); // Shndërroni gradë në radian x3 = (clockCenterX + (sin (kënd) * (clockRadius - (clockRadius / 4)))); y3 = (clockCenterY - (cos (kënd) * (clockRadius - (clockRadius / 4)))); display-> drawLine (clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); // shfaq këndin e dorës së orës = orë () * 30 + int ((minutë () / 12) * 6); kënd = (këndi / 57.29577951); // Shndërroni gradat në radian x3 = (clockCenterX + (sin (kënd) * (clockRadius - (clockRadius / 2))))); y3 = (clockCenterY - (cos (kënd) * (clockRadius - (clockRa dius / 2)))); display-> drawLine (clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); } void digitalClockFrame (ekrani OLEDDisplay *, gjendja * OLEDDisplayUiState *, int16_t x, int16_t y) {Data e vargut = String (vit ())+"/"+dyDigra (muaj ())+"/"+dyDigra (ditë ()); String timenow = String (orë ())+":"+twoDigits (minute ())+":"+twoDigits (e dyta ()); shfaqje-> setTextAlignment (TEXT_ALIGN_CENTER); shfaqje-> setFont (ArialMT_Plain_24); ekran-> drawString (clockCenterX + x, 20, ora më poshtë); ekran-> setFont (ArialMT_Plain_16); display-> drawString (60, 45, data); } void writeTo (pajisja int, adresa e bajtit, byte val) {Wire.beginTransmission (pajisje); // filloni transmetimin në pajisjen Wire.write (adresa); // dërgoni adresën e regjistrit Wire.write (val); // dërgoni vlerë për të shkruar Wire.endTransmission (); // përfundimi i transmetimit} // lexon numra byte duke filluar nga regjistri i adresave në pajisje në array buff void readFrom (pajisja int, adresa e bajtit, int num, byte buff ) {Wire.beginTransmission (pajisje); // filloni transmetimin në pajisjen Wire.write (adresa); // dërgon adresën për të lexuar nga Wire.endTransmission (); // përfundoni transmetimin Wire.beginTransmission (pajisje); // filloni transmetimin në pajisjen Wire.requestFrom (pajisje, num); // të kërkojë 6 bajt nga pajisja int i = 0; ndërsa (Wire.available ()) // pajisja mund të dërgojë më pak nga sa kërkohet (jonormale) {buff = Wire.read (); // merrni një byte i ++; } Wire.endTransmission (); // përfundimi i transmetimit} void runningFrame (ekrani OLEDDisplay*, gjendja OLEDDisplayUiState*, int16_t x, int16_t y) {float calValue = hapaSum*0.4487; shfaqje-> setTextAlignment (TEXT_ALIGN_CENTER); ekran-> setFont (ArialMT_Plain_24); display-> drawString (clockCenterX, clockCenterY, str); sprintf (str, "%.2fcal", calValue); shfaqje-> setTextAlignment (TEXT_ALIGN_CENTER); ekran-> setFont (ArialMT_Plain_10); display-> drawString (100, 20, str); ekran-> barazimXbm (10, 14, 34, 50, running_Logo_bits); } void uploadFrame (ekrani OLEDDisplay *, gjendja * OLEDDisplayUiState *, int16_t x, int16_t y) {display-> setFont (ArialMT_Plain_16); display-> drawString (60, 45, "ngarkoni të dhënat …"); } // Ky grup mban treguesit e funksionit në të gjitha kornizat // kornizat janë pamjet e vetme që rrëshqasin në kornizat FrameCallback = {analogClockFrame, digitalClockFrame, runningFrame, uploadFrame}; // sa korniza ka? int frameCount = 4; // Mbivendosjet vizatohen në mënyrë statike mbi një kornizë p.sh. një mbivendosje mbivendosjesh të orës = {clockOverlay}; int overlaysCount = 1; void uploadToBlynk (pavlefshme) {if (upload == true) {Blynk.virtualWrite (V0, hapatSum); Blynk.virtualWrite (V1, hapaSum); }} void uiInit (i pavlefshëm) {ui.setTargetFPS (30); //ui.setActiveSymbol(activeSymbol); //ui.setInactiveSymbol(inactiveSymbol); ui.setIndicatorPosition (TOP); ui.setIndicatorDirection (LEFT_RIGHT); ui.setFrameAnimation (SLIDE_LEFT); ui.setFrames (korniza, frameCount); ui.setOvelays (mbivendosje, overlaysCount); ui.disableAutoTransition (); ui.switchToFrame (2); ui.init (); display.flipScreenVertical (); } void adxl345Init (i pavlefshëm) {writeTo (Pajisje, 0x2D, 0); writeTo (Pajisje, 0x2D, 16); writeTo (Pajisje, 0x2D, 8); } void updateAdxl345 (pavlefshme) {readFrom (Pajisje, regAddress, TO_READ, buff); // lexoni të dhënat e nxitimit nga ADXL345 xx = ((((int) buff [1]) << 8) | buff [0]; yy = (((int) buff [3]) << 8) | buff [2]; zz = (((int) buff [5]) << 8) | buff [4]; nëse (xx 80) {nëse (xx <vlera aktuale) {hapaSum ++; } currentValue = xx; } sprintf (str, "%d", stepsSum); } int getKeys (pavlefshme) {if (digitalRead (D2) == LOW) {vonesë (5); nëse (digitalRead (D2) == LOW) {ndërsa (digitalRead (D2) == LOW); kthe POWER_KEY; }} if (digitalRead (D3) == LOW) {vonesë (5); nëse (digitalRead (D3) == LOW) {ndërsa (digitalRead (D3) == LOW); kthehu MENU_KEY; }} if (digitalRead (D4) == LOW) {vonesë (5); nëse (digitalRead (D4) == LOW) {ndërsa (digitalRead (D4) == LOW); kthe UPLOAD_KEY; }} kthimi 0; } void doKeysFunction (void) {static int uiFrameIndex = 2; çelësat int = getKeys (); nëse (çelësat == POWER_KEY) {karikatori statik i = 0; nëse (i) {ui.init (); display.flipScreenVertical (); display.displayOn (); } else {display.displayOff (); } i = ~ i; } if (çelësat == MENU_KEY) {nëse (ngarkoni == false) {uiFrameIndex ++; nëse (uiFrameIndex == 3) uiFrameIndex = 0; ui.switchToFrame (uiFrameIndex); } tjetër {ui.switchToFrame (3); }} nëse (çelësat == UPLOAD_KEY) {nëse (ngarkoni == e vërtetë) {ngarkoni = false; ui.switchToFrame (uiFrameIndex); } tjetër {ngarkoni = e vërtetë; ui.switchToFrame (3); }}} void setup () {pinMode (D2, INPUT); pinMode (D3, INPUT); pinMode (D4, INPUT); Blynk.begin (auth, ssid, pass); rtc.filloj (); uiInit (); adxl345Init (); timer.setInterval (30, updateAdxl345); timer.setInterval (100, uploadToBlynk); } void loop () {int დარჩენილიTimeBudget = ui.update (); test statik intSum = 0; if ((testSum 0) {vonesë (დარჩენილიTimeBudget);} doKeysFunction (); timer.run ();}

Kujdes: Duhet të modifikoni cilësimet e Wi-Fi, pasaportën dhe AUTHTOKENS për veten tuaj.

char auth = "YourAuthToken"; // Kredencialet tuaja WiFi. // Vendosni fjalëkalimin në "" për rrjetet e hapura. char ssid = "Emri juaj i rrjetit"; char pass = "Fjalëkalimi juaj";

Hapi 3: Lidhja e harduerit

Lidhja e harduerit
Lidhja e harduerit
Lidhja e harduerit
Lidhja e harduerit
Lidhja e harduerit
Lidhja e harduerit

Lidhni OLED12864 dhe modulin e përshpejtimit me I2C, në fund me D2, D3, D4. Për më tepër, shtoni 51k rezistencë tërheqëse në fund për të arritur 3.3V, të treguar si më poshtë.

Kujdes: wrongshtë e gabuar lidhja e rezistencave tërheqëse me AREF, e drejta është në 3.3V

Imazhi i bashkimit të harduerit, i treguar si më poshtë:

Pas bashkimit, montimi i modulit të harduerit në kore, treguar si më poshtë:

Imazh i efektit gjithëpërfshirës

Recommended: