Satura rādītājs:

Kā izveidot soļu skaitītāju?: 3 soļi (ar attēliem)
Kā izveidot soļu skaitītāju?: 3 soļi (ar attēliem)

Video: Kā izveidot soļu skaitītāju?: 3 soļi (ar attēliem)

Video: Kā izveidot soļu skaitītāju?: 3 soļi (ar attēliem)
Video: Kā 5 minūtēs iztīrīt mēnesalu 2024, Jūnijs
Anonim
Image
Image
Izveidojiet Blynk projektu
Izveidojiet Blynk projektu

Es labi uzstājos daudzos sporta veidos: ejot, skrienot, braucot ar velosipēdu, spēlējot badmintonu utt.

Man patīk braukt, lai pirms tam ceļotu apkārt. Nu paskaties uz manu vēdera vēderu ….

Nu, jebkurā gadījumā es nolemju atsākt vingrot. Kādu aprīkojumu man vajadzētu sagatavot? Bez sporta iespējām, jā! Man vajag instrumentu! Es uzskatu, ka ar to es varu saglabāt atbilstošu vingrinājumu daudzumu. Šeit rodas instruments. Sāksim ar video ~

Instruments ne tikai var ierakstīt soļus (un kalorijas) reālā laikā, bet arī parāda laiku. Īpašais ir tas, ka demonstrēšanas formāts ir rādītājs ~ tik foršs! Man ļoti, ļoti patīk!

Jūs varat augšupielādēt savus ierakstus internetā

tikai ar vienu klikšķi. Visus ierakstus var parādīt Blynk (iepriekš ieviesta viedtālruņa programmatūra). Tāpat kā valkājams viedpulkstenis, instruments saņem laiku tiešsaistē (tāpēc jums nav jābaidās no jaudas un laika atjaunināšanas).

Aparatūra:

FireBeetle dēlis-ESP32

FireBeetle vāku proto dēlis

Displeja OLED12864 ekrāns

Paātrinājuma modulis

3,7 V akumulators (iegādāts tiešsaistē, apjoms ir aptuveni 600 mAh)

3 pudeles (pirktas tiešsaistē)

Ir ļoti ērti izveidot šo Blybk projektu.

1. darbība: izveidojiet Blynk projektu

Pievienojiet divas vadīklas:

Vērtības attēlojums * 1

Reālā laika pulkstenis * 1

Vērtības attēlojuma nosaukumam jābūt iestatītam uz soļiem, bet ne reāllaika pulksteņa rekvizītiem. Izvēlieties V1 kā ievades tapu, lai pielāgotu vadības ierīču izkārtojumu, kā parādīts zemāk.

2. darbība: lejupielādējiet programmas FireBeetle Board-ESP32

Noklikšķiniet šeit, lai lejupielādētu avota kodu uz esp32. Avota kods sastāv no bibliotēkas failiem un 3D drukas failiem. Jums vajadzētu saglabāt bibliotēkas failu arduino lib. Un 3D faili var drukāt garozas tieši.

Zemāk ir galvenā programma

#include #include // Nepieciešams tikai Arduino 1.6.5 un vecākām versijām #include "SSD1306.h" // aizstājvārds "#include" SSD1306Wire.h "" #include "OLEDDisplayUi.h" #include "images.h" # include #include #include #include #include #define POWER_KEY 1 #define MENU_KEY 2 #define UPLOAD_KEY 3 Būla augšupielāde = false; SSD1306 displejs (0x3c, 18, 0); OLEDDisplayUi ui (& displejs); SimpleTimer taimeris; WidgetRTC rtc; int ekrānsW = 128; int ekrānsH = 64; int clockCenterX = ekrānsW/2; int clockCenterY = ((ekrānsH-16)/2) +16; // augšējā dzeltenā daļa ir 16 px augstumā int clockRadius = 23; #define DEVICE (0x53) // ADXL345 ierīces adrese #define TO_READ (6) // baitu skaits, ko mēs lasīsim katru reizi (divi baiti katrai asij) baitu bufs [TO_READ]; // 6 baitu buferis no ierīces nolasīto datu saglabāšanai char str [100]; // virknes buferis, lai pārveidotu datus pirms to nosūtīšanas uz seriālo portu int regAddress = 0x32; // pirmās ass paātrinājuma datu reģistrs ADXL345 int xx, yy, zz; // trīs asu paātrinājuma dati static int currentValue = 0; statiski neparakstīti garie soļiSum = 0; char auth = "YourAuthToken"; // Jūsu WiFi akreditācijas dati. // Iestatiet paroli uz "" atvērtiem tīkliem. char ssid = "Jūsu tīkla nosaukums"; char pass = "Jūsu parole"; const char running_Logo_bits PROGMĒMA = {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 0xFC, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x60, 0xF1, 0x07, 0x00 0xF8, 0x17, 0x00, 0x00, 0xC0, 0xF8, 0x0F, 0x00, 0x00, 0xE0, 0xFB, 0x17, 0x00, 0x00, 0xC0, 0xFF, 0x13, 0x00, 0x00, 0x00, 0xFF, 0x03 0xFE, 0x03, 0x00, 0x00, 0x00, 0xF9, 0x03, 0x00, 0x00, 0x00, 0xFA, 0x03, 0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00 0xF4, 0x07, 0x00, 0x00, 0x00, 0xF4, 0x0F, 0x00, 0x00, 0x00, 0xF9, 0x0F, 0x00, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x80, 0xFE, 0x00, 0x00 0xFF, 0x1F, 0x00, 0x00, 0xA0, 0xFF, 0x5F, 0x00, 0x00, 0xC0, 0x3F, 0x3F, 0x00, 0x0 0, 0xE8, 0x1F, 0x3F, 0x00, 0x00, 0xE8, 0xA7, 0x3E, 0x00, 0x00, 0xF0, 0x03, 0x7C, 0x00, 0x00, 0xE0, 0x05, 0x7C, 0x00, 0x00, 0x00, 0x0 0x00, 0xC0, 0x01, 0xF0, 0x03, 0x00, 0xC0, 0x03, 0xE8, 0x07, 0x00, 0xC0, 0x03, 0x88, 0x6F, 0x00, 0x80, 0x03, 0x40, 0x1E, 0x0, 0x0, 0x0 0x00, 0x80, 0x03, 0x00, 0xF8, 0x01, 0x00, 0x07, 0x00, 0xF4, 0x00, 0x00, 0x07, 0x00, 0xE8, 0x00, 0x80, 0x0F, 0x00, 0xE8, 0x00, 0x0, 0x0, 0x0 0x00, 0xE8, 0x0F, 0x00, 0xE8, 0x00, 0xF0, 0x09, 0x00, 0x60, 0x01, 0xF0, 0x04, 0x00, 0x00, 0x00,}; // lietderības funkcija digitālajam pulksteņa displejam: izdrukā vadošo 0 String twoDigits (int cipari) {if (cipari <10) {String i = '0'+String (cipari); atgriezties i; } else {return String (cipari); }} void clockOverlay (OLEDDisplay * displejs, OLEDDisplayUiState * stāvoklis) {if ((stunda () == 0) && (minūte () == 0) && (otrā () == 0)) soļiSum = 0; } void analogClockFrame (OLEDDisplay * displejs, OLEDDisplayUiState * stāvoklis, int16_t x, int16_t y) {display-> drawCircle (clockCenterX + x, clockCenterY + y, 2); // stundas atzīmes (int z = 0; z drawLine (x2 + x, y2 + y, x3 + x, y3 + y);} // parādīt lietoto pludiņa leņķi = second () * 6; angle = (leņķis / 57.29577951); // Pārvērst grādus par radiāniem int x3 = (clockCenterX + (sin (leņķis) * (clockRadius - (clockRadius / 5))))); int y3 = (clockCenterY - (cos (leņķis) * * (clockRadius - (clockRadius / 5)))); display-> drawLine (clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); // displeja minūtes rokas leņķis = minūte () * 6; leņķis = (leņķis / 57.29577951); // Pārvērst grādus par radiāniem x3 = (clockCenterX + (sin (leņķis) * (clockRadius - (clockRadius / 4)))); y3 = (clockCenterY - (cos (leņķis) * (clockRadius - (clockRadius / 4)))); display-> drawLine (clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); // displejs stundas rokas leņķis = stunda () * 30 + int ((minūte () / 12) * 6); leņķis = (leņķis / 57.29577951); // Pārvērst grādus par radiāniem x3 = (clockCenterX + (sin (leņķis) * (clockRadius - (clockRadius / 2))))); y3 = (clockCenterY - (cos (leņķis) * * (clockRadius - (clockRa dius / 2)))); displejs-> drawLine (clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); } void digitalClockFrame (OLEDDisplay * displejs, OLEDDisplayUiState * stāvoklis, int16_t x, int16_t y) {String date = String (year ())+"/"+twoDigits (month ())+"/"+twoDigits (day ()); String timenow = String (stunda ())+":"+twoDigits (minute ())+":"+twoDigits (second ()); displejs-> setTextAlignment (TEXT_ALIGN_CENTER); displejs-> setFont (ArialMT_Plain_24); displejs-> drawString (clockCenterX + x, 20, timenow); displejs-> setFont (ArialMT_Plain_16); displejs-> drawString (60, 45, datums); } void writeTo (int ierīce, baitu adrese, baitu val) {Wire.beginTransmission (ierīce); // sākt pārraidi uz ierīci Wire.write (adrese); // nosūtīt reģistra adresi Wire.write (val); // nosūtīt vērtību, lai rakstītu Wire.endTransmission (); // beigt pārraidi} // nolasa numurbaitus, sākot no ierīču adrešu reģistra līdz bufera masīvam void readFrom (int ierīce, baitu adrese, int numurs, baitu buferis ) {Wire.beginTransmission (ierīce); // sākt pārraidi uz ierīci Wire.write (adrese); // nosūta lasāmo adresi no Wire.endTransmission (); // beigu pārraide Wire.beginTransmission (ierīce); // sākt pārraidi uz ierīci Wire.requestFrom (ierīce, numurs); // pieprasīt 6 baitus no ierīces int i = 0; while (Wire.available ()) // ierīce var nosūtīt mazāk nekā pieprasīts (nenormāli) {buff = Wire.read (); // saņemt baitu i ++; } Wire.endTransmission (); // beigt pārraidi} void runningFrame (OLEDDisplay*displejs, OLEDDisplayUiState*stāvoklis, int16_t x, int16_t y) {float calValue = stepsSum*0.4487; displejs-> setTextAlignment (TEXT_ALIGN_CENTER); displejs-> setFont (ArialMT_Plain_24); displejs-> drawString (clockCenterX, clockCenterY, str); sprintf (str, "%.2fcal", calValue); displejs-> setTextAlignment (TEXT_ALIGN_CENTER); displejs-> setFont (ArialMT_Plain_10); displejs-> drawString (100, 20, str); displejs-> drawXbm (10, 14, 34, 50, running_Logo_bits); } void uploadFrame (OLEDDisplay * displejs, OLEDDisplayUiState * stāvoklis, int16_t x, int16_t y) {display-> setFont (ArialMT_Plain_16); display-> drawString (60, 45, "augšupielādēt datus …"); } // Šis masīvs saglabā funkciju norādes uz visiem kadriem // rāmji ir atsevišķi skati, kas slīd FrameCallback kadros = {analogClockFrame, digitalClockFrame, runningFrame, uploadFrame}; // cik tur ir kadru? int frameCount = 4; // Pārklājumi ir statiski uzzīmēti virs rāmja, piem. a clock OverlayCallback overlays = {clockOverlay}; int overlaysCount = 1; void uploadToBlynk (void) {if (upload == true) {Blynk.virtualWrite (V0, stepsSum); Blynk.virtualWrite (V1, stepsSum); }} void uiInit (void) {ui.setTargetFPS (30); //ui.setActiveSymbol(activeSymbol); //ui.setInactiveSymbol(inactiveSymbol); ui.setIndicatorPosition (TOP); ui.setIndicatorDirection (LEFT_RIGHT); ui.setFrameAnimation (SLIDE_LEFT); ui.setFrames (kadri, frameCount); ui.setOverlays (pārklājumi, overlaysCount); ui.disableAutoTransition (); ui.switchToFrame (2); ui.init (); display.flipScreenVertically (); } void adxl345Init (void) {writeTo (DEVICE, 0x2D, 0); writeTo (IERĪCE, 0x2D, 16); writeTo (IERĪCE, 0x2D, 8); } void updateAdxl345 (void) {readFrom (DEVICE, regAddress, TO_READ, buff); // nolasīt paātrinājuma datus no ADXL345 xx = (((int) buff [1]) << 8) | bufs [0]; yy = (((int) buff [3]) << 8) | buff [2]; zz = (((int) buff [5]) << 8) | bifeļ [4]; if (xx 80) {if (xx <currentValue) {stepsSum ++; } currentValue = xx; } sprintf (str, "%d", stepsSum); } int getKeys (void) {if (digitalRead (D2) == LOW) {kavēšanās (5); ja (digitalRead (D2) == LOW) {while (digitalRead (D2) == LOW); atgriezt POWER_KEY; }} ja (digitalRead (D3) == LOW) {kavēšanās (5); ja (digitalRead (D3) == LOW) {while (digitalRead (D3) == LOW); atgriezt MENU_KEY; }} ja (digitalRead (D4) == LOW) {kavēšanās (5); ja (digitalRead (D4) == LOW) {while (digitalRead (D4) == LOW); atgriezt UPLOAD_KEY; }} atgriezties 0; } void doKeysFunction (void) {static int uiFrameIndex = 2; int taustiņi = getKeys (); ja (taustiņi == POWER_KEY) {static char i = 0; ja (i) {ui.init (); display.flipScreenVertically (); display.displayOn (); } cits {display.displayOff (); } i = ~ i; } ja (atslēgas == MENU_KEY) {ja (augšupielādēt == false) {uiFrameIndex ++; ja (uiFrameIndex == 3) uiFrameIndex = 0; ui.switchToFrame (uiFrameIndex); } cits {ui.switchToFrame (3); }} ja (atslēgas == UPLOAD_KEY) {ja (augšupielādēt == taisnība) {augšupielādēt = nepatiess; ui.switchToFrame (uiFrameIndex); } cits {augšupielādēt = 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 livingTimeBudget = ui.update (); static int testSum = 0; if ((testSum 0) {delay (livingTimeBudget);} doKeysFunction (); timer.run ();}

Uzmanību: jums ir jāmaina Wi-Fi iestatījums, pase un AUTHTOKENS.

char auth = "YourAuthToken"; // Jūsu WiFi akreditācijas dati. // Iestatiet paroli uz "" atvērtiem tīkliem. char ssid = "Jūsu tīkla nosaukums"; char pass = "Jūsu parole";

3. darbība. Aparatūras savienojums

Aparatūras savienojums
Aparatūras savienojums
Aparatūras savienojums
Aparatūras savienojums
Aparatūras savienojums
Aparatūras savienojums

Pievienojiet OLED12864 un paātrinājuma moduli I2C, apakšas - D2, D3, D4. Turklāt pievienojiet apakšā 51k pievilkšanas rezistorus, lai sasniegtu 3.3V, kā parādīts zemāk.

Uzmanību: AREF ir nepareizi savienot pievilkšanas rezistorus, pareizais ir 3.3V

Aparatūras lodēšanas attēls, kas parādīts zemāk:

Pēc lodēšanas aparatūras moduļa salikšana pie garozas, kā parādīts zemāk:

Visaptveroša efekta attēls ~

Ieteicams: