Sisukord:

Kuidas teha sammuloendurit?: 3 sammu (piltidega)
Kuidas teha sammuloendurit?: 3 sammu (piltidega)

Video: Kuidas teha sammuloendurit?: 3 sammu (piltidega)

Video: Kuidas teha sammuloendurit?: 3 sammu (piltidega)
Video: P32 SMART WATCH IP68: Things To Know Before Buy // For Android & iPhone 2024, Juuni
Anonim
Image
Image
Looge Blynk Project
Looge Blynk Project

Varem esinesin hästi paljudel spordialadel: kõndimine, jooksmine, jalgrattaga sõitmine, sulgpalli mängimine jne.

Armastan ratsutamist, et enne kaua ringi reisida. No vaadake mu kõhulist kõhtu ….

Noh, igatahes otsustan trenni teha. Milliseid seadmeid peaksin ette valmistama? Lisaks spordirajatistele jah! Vajan pilli! Usun, et saan sellega piisavalt treenida. Siin tekib instrument. Alustame videoga ~

Seade ei saa mitte ainult reaalajas samme (ja kaloreid) salvestada, vaid näitab ka aega. Eriline on see, et näitamise formaat on osuti ~ nii lahe! Mulle väga -väga meeldib!

Saate oma kirjed Internetti üles laadida

ainult ühe klõpsuga. Kõiki kirjeid saab kuvada Blynk (varem tutvustatud nutitelefoni tarkvara). Nagu kantav nutikell, saab instrument aega võrgus (nii et te ei pea kartma võimsust ja aja värskendamist).

Riistvara:

FireBeetle Board-ESP32

FireBeetle kaaneprotokoll

Displei OLED12864 ekraan

Kiirendusmoodul

3,7 V aku (ostetud veebist, maht on umbes 600 mAh)

3 pudelit (ostetud Internetist)

Selle projekti ehitamine Blybki poolt on väga mugav.

Samm: looge Blynk -projekt

Lisage kaks juhtelementi:

Väärtuse kuvamine * 1

Reaalajas kell * 1

Väärtuse kuvamise nimeks tuleks määrata sammud, kuid mitte reaalaja kella omaduste jaoks. Valige juhtseadiste paigutuse reguleerimiseks sisendnõelaks V1, nagu allpool näidatud.

Samm: laadige programmid FireBeetle Board-ESP32 alla

Lähtekoodi esp32 allalaadimiseks klõpsake siin. Lähtekood koosneb raamatukogu failidest ja 3D -printimisfailidest. Teekifail tuleks salvestada arduino libi. Ja 3D -failid saavad koorikuid otse printida.

Allpool on põhiprogramm

#include #include // Vajalik ainult Arduino 1.6.5 ja varasemate versioonide jaoks #include "SSD1306.h" // varjunimi "#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 boolean upload = false; SSD1306 ekraan (0x3c, 18, 0); OLEDDisplayUi ui (& kuva); SimpleTimer taimer; VidinRTC rtc; int ekraanW = 128; int ekraanH = 64; int clockCenterX = ekraanW/2; int clockCenterY = ((ekraanH-16)/2) +16; // ülemine kollane osa on 16 px kõrgus int clockRadius = 23; #define DEVICE (0x53) // ADXL345 seadme aadress #define TO_READ (6) // baitide arv, mida loeme iga kord (kaks baiti iga telje kohta) baitide buff [TO_READ]; // 6 baiti puhver seadmest loetud andmete salvestamiseks char str [100]; // stringipuhver andmete teisendamiseks enne jadaporti saatmist int regAddress = 0x32; // esimese telje kiirendusandmete register ADXL345 int xx, yy, zz; // kolmeteljelised kiirendusandmed staatiline int currentValue = 0; staatilised allkirjastamata pikad sammudSum = 0; char auth = "YourAuthToken"; // Teie WiFi volikirjad. // Määra avatud võrkude jaoks parool "". char ssid = "SinuVõrguNimi"; char pass = "Sinu parool"; 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, 0x00, 0x00 0xF8, 0x01, 0x00, 0x00, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x00, 0xFC, 0x01, 0x00, 0x00, 0x00, 0xFC, 0x05, 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,}; // utiliidifunktsioon digitaalse kella kuvamiseks: prindib esile 0 String twoDigits (int numbrid) {if (numbrid <10) {String i = '0'+String (numbrid); tagasta i; } else {return String (numbrid); }} void clockOverlay (OLEDDisplay * kuva, OLEDDisplayUiState * olek) {if ((tund () == 0) && (minut () == 0) && (teine () == 0)) sammudSumma = 0; } tühine analogClockFrame (OLEDDisplay * kuva, OLEDDisplayUiState * olek, int16_t x, int16_t y) {display-> drawCircle (clockCenterX + x, clockCenterY + y, 2); // tund tiksub (int z = 0; z drawLine (x2 + x, y2 + y, x3 + x, y3 + y);} // kuvab kasutatud ujuki nurga = second () * 6; nurk = (nurk / 57.29577951); // Teisenda kraadid radiaanideks int x3 = (clockCenterX + (sin (nurk) * (clockRadius - (clockRadius / 5))))); int y3 = (clockCenterY - (cos (nurk) * * (clockRadius - (clockRadius / 5)))); display-> drawLine (clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); // kuva minutikäe nurk = minut () * 6; nurk = (nurk / 57.29577951); // Teisenda kraadid radiaanideks x3 = (clockCenterX + (sin (nurk) * (clockRadius - (clockRadius / 4)))); y3 = (clockCenterY - (cos (nurk) * (clockRadius - (clockRadius / 4)))); display-> drawLine (clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); // kuvage tunni käe nurk = tund () * 30 + int ((minut () / 12) * 6); nurk = (nurk / 57.29577951); // Teisenda kraadid radiaanideks x3 = (clockCenterX + (sin (nurk) * (clockRadius - (clockRadius / 2))))); y3 = (clockCenterY - (cos (nurk) * * (clockRadius - (clockRa dius / 2)))); display-> drawLine (clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); } void digitalClockFrame (OLEDDisplay * kuva, OLEDDisplayUiState * olek, int16_t x, int16_t y) {String date = String (aasta ())+"/"+twoDigits (kuu ())+"/"+twoDigits (päev ()); String timenow = String (tund ())+":"+twoDigits (minut ())+":"+twoDigits (second ()); display-> setTextAlignment (TEXT_ALIGN_CENTER); kuva-> setFont (ArialMT_Plain_24); display-> drawString (clockCenterX + x, 20, timenow); kuva-> setFont (ArialMT_Plain_16); display-> drawString (60, 45, kuupäev); } void writeTo (int seade, baidi aadress, bait val) {Wire.beginTransmission (seade); // alusta edastamist seadmesse Wire.write (aadress); // registri aadressi saatmine Wire.write (val); // saada väärtus kirjutamiseks Wire.endTransmission (); // lõpeta edastamine} // loeb numbribaite, alustades seadme aadressiregistrist kuni puhvermassiivi void readFrom (int seade, bait -aadress, int number, baitpuhver ) {Wire.beginTransmission (seade); // alusta edastamist seadmesse Wire.write (aadress); // saadab aadressi lugemiseks Wire.endTransmission (); // lõpeta ülekanne Wire.beginTransmission (seade); // alusta edastamist seadmesse Wire.requestFrom (seade, number); // taotle seadmelt 6 baiti int i = 0; while (Wire.available ()) // seade võib saata vähem kui nõutud (ebanormaalne) {buff = Wire.read (); // baidi saamine i ++; } Wire.endTransmission (); // lõpeta ülekanne} void runningFrame (OLEDDisplay*kuva, OLEDDisplayUiState*olek, int16_t x, int16_t y) {float calValue = stepsSum*0.4487; display-> setTextAlignment (TEXT_ALIGN_CENTER); kuva-> setFont (ArialMT_Plain_24); display-> drawString (clockCenterX, clockCenterY, str); sprintf (str, "%.2fcal", calValue); kuva-> setTextAlignment (TEXT_ALIGN_CENTER); kuva-> setFont (ArialMT_Plain_10); display-> drawString (100, 20, str); display-> drawXbm (10, 14, 34, 50, running_Logo_bits); } void uploadFrame (OLEDDisplay * kuva, OLEDDisplayUiState * olek, int16_t x, int16_t y) {display-> setFont (ArialMT_Plain_16); display-> drawString (60, 45, "andmete üleslaadimine …"); } // See massiiv hoiab funktsioonide näpunäiteid kõikidele kaadritele // raamid on üksikud vaated, mis slaidid kaadris FrameCallback = {analogClockFrame, digitalClockFrame, runningFrame, uploadFrame}; // mitu raami on? int frameCount = 4; // Katted on staatiliselt joonistatud raami peale nt. kell OverlayCallback overlays = {clockOverlay}; int overlaysCount = 1; void uploadToBlynk (void) {if (upload == true) {Blynk.virtualWrite (V0, stepsSum); Blynk.virtualWrite (V1, stepsSum); }} tühine uiInit (tühine) {ui.setTargetFPS (30); //ui.setActiveSymbol(activeSymbol); //ui.setInactiveSymbol(inactiveSymbol); ui.setIndicatorPosition (TOP); ui.setIndicatorDirection (LEFT_RIGHT); ui.setFrameAnimation (SLIDE_LEFT); ui.setFrames (kaadrid, frameCount); ui.setOverlays (overlays, overlaysCount); ui.disableAutoTransition (); ui.switchToFrame (2); ui.init (); display.flipScreenVertically (); } void adxl345Init (void) {writeTo (DEVICE, 0x2D, 0); writeTo (DEVICE, 0x2D, 16); writeTo (DEVICE, 0x2D, 8); } void updateAdxl345 (void) {readFrom (DEVICE, regAddress, TO_READ, buff); // lugeda kiirendusandmeid ADXL345 -st 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 (void) {if (digitalRead (D2) == LOW) {delay (5); if (digitalRead (D2) == LOW) {while (digitalRead (D2) == LOW); tagastama POWER_KEY; }} if (digitalRead (D3) == LOW) {delay (5); if (digitalRead (D3) == LOW) {while (digitalRead (D3) == LOW); tagasi MENU_KEY; }} if (digitalRead (D4) == LOW) {delay (5); if (digitalRead (D4) == LOW) {while (digitalRead (D4) == LOW); tagastama UPLOAD_KEY; }} tagastama 0; } tühine doKeysFunction (tühine) {static int uiFrameIndex = 2; int võtmed = getKeys (); if (võtmed == POWER_KEY) {staatiline sümbol i = 0; kui (i) {ui.init (); display.flipScreenVertically (); display.displayOn (); } else {display.displayOff (); } i = ~ i; } if (võtmed == MENU_KEY) {if (upload == false) {uiFrameIndex ++; kui (uiFrameIndex == 3) uiFrameIndex = 0; ui.switchToFrame (uiFrameIndex); } else {ui.switchToFrame (3); }} kui (võtmed == UPLOAD_KEY) {kui (üleslaadimine == tõene) {üleslaadimine = vale; ui.switchToFrame (uiFrameIndex); } muu {üleslaadimine = tõsi; 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 järelejäänudKellaaegBudget = ui.update (); staatiline int testSum = 0; if ((testSum 0) {delay (ülejäänudTimeBudget);} doKeysFunction (); timer.run ();}

Ettevaatust: WiFi-seadet, passi ja AUTHTOKENS-i peaksite ise muutma.

char auth = "YourAuthToken"; // Teie WiFi volikirjad. // Määra avatud võrkude jaoks parool "". char ssid = "SinuVõrguNimi"; char pass = "Sinu parool";

Samm: riistvaraühendus

Riistvaraühendus
Riistvaraühendus
Riistvaraühendus
Riistvaraühendus
Riistvaraühendus
Riistvaraühendus

Ühendage OLED12864 ja kiirendusmoodul I2C -ga, põhjad D2, D3, D4 -ga. Lisaks lisage põhjadesse 51k tõmbetakistid, et jõuda 3,3 V-ni, nagu allpool näidatud.

Ettevaatust: Tõmbetakistite ühendamine AREF-iga on vale, õige on 3.3V

Riistvara jootmispilt, mis on näidatud allpool:

Pärast jootmist riistvara mooduli kokkupanek kooriku külge, nagu allpool näidatud:

Põhjalik efektpilt ~

Soovitan: