Sisukord:
- Samm: looge Blynk -projekt
- Samm: laadige programmid FireBeetle Board-ESP32 alla
- Samm: riistvaraühendus
Video: Kuidas teha sammuloendurit?: 3 sammu (piltidega)
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:46
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
Ü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:
Kuidas teha traadita plekk-telefoni! (Arduino Walkie Talkie): 7 sammu (koos piltidega)
Kuidas teha traadita plekk-telefoni! (Arduino Walkie Talkie): Just teisel päeval olin keset väga olulist telefonikõnet, kui mu banaanitelefon lakkas töötamast! Ma olin nii pettunud. See on viimane kord, kui ma selle rumala telefoni tõttu kõnest ilma jäin! (Tagantjärele mõeldes olin ma võib -olla natuke liiga vihane
Kuidas teha toonikontrolli LM358 võimendi 2.1 jaoks: 7 sammu (piltidega)
Kuidas teha toonikontrolli LM358 võimendi 2.1 jaoks: Nii et minu Youtube'i kanalil küsivad paljud inimesed, kuidas ühendada kaks võimendit üheks. Esimest võimendit kasutatakse satelliitkõlarite jaoks ja teist võimendit subwoofer kõlarite jaoks. Seda võimendi paigalduskonfiguratsiooni võib nimetada võimendiks
Kuidas teha kodus kevadvibratsiooniandurit!: 5 sammu (piltidega)
Kuidas teha kodus vedruvibratsiooniandurit!: Töötasin uue projekti kallal, mis hõlmab vedruvibratsiooniandurit ehk "vaese mehe". kiirendusmõõtur/liikumisandur! Need vedruvibratsioonilülitid on suure tundlikkusega suunaga vibratsioonist põhjustatud käivituslülitid. Sees on
Kuidas teha Attiny85 konsooli - ArduPlay: 5 sammu (piltidega)
Kuidas teha Attiny85 konsooli - ArduPlay: See oli selline: sirvisin sihitult YouTube'i videoid, et lõõgastuda tassi tee ääres. Võib -olla jalgpallimängude tipphetked või naljakate videote kogumik? Järsku sain telefoni märguande - uus video kanalil Electronoobs. Õnnetu
Kuidas teha vanavanemate kalendrit & Külalisteraamat (isegi kui te ei tea, kuidas külalisteraamatut teha): 8 sammu (piltidega)
Kuidas teha vanavanemate kalendrit & Külalisteraamat (isegi kui te ei tea, kuidas külalisteraamatut teha): see on väga ökonoomne (ja väga tänuväärne!) Puhkusekink vanavanematele. Ma tegin sel aastal 5 kalendrit hinnaga vähem kui 7 dollarit. Materjalid: 12 suurepärast fotot teie lapsest, lastest, õetütardest, vennapoegadest, koertest, kassidest või muudest sugulastest12 erinevat tükki