INHOUDSOPGAWE:
- Stap 1: Skep 'n Blynk -projek
- Stap 2: Laai programme af na FireBeetle Board-ESP32
- Stap 3: Hardewareverbinding
Video: Hoe om 'n stappenteller te maak?: 3 stappe (met foto's)
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:23
Ek het baie goed presteer by baie sportsoorte: stap, hardloop, fietsry, pluimbal speel, ens.
Ek hou daarvan om te ry om kort voor lank te reis. Kyk, kyk na my buik…
Wel, ek besluit om weer te begin oefen. Watter toerusting moet ek voorberei? Behalwe die sportfasiliteit, ja! Ek het 'n instrument nodig! Ek glo daarmee dat ek die nodige oefening kan behou. Hier word die instrument tot stand. Kom ons begin met 'n video ~
Die instrument kan nie net stappe (en kalorieë) intyds opneem nie, maar ook tyd wys. Wat besonders is, is dat die formaat van die vertoning wyser is ~ so gaaf! Ek hou regtig baie daarvan!
U kan u rekords na die internet oplaai
slegs met een klik. Alle rekords kan vertoon word deur Blynk ('n slimfoonsagteware wat voorheen bekendgestel is). Net soos 'n draagbare slim horlosie, kry die instrument tyd (u hoef dus nie bang te wees vir die krag en tydopdatering nie).
Hardeware in meed:
FireBeetle Board-ESP32
FireBeetle Covers-Proto Board
OLED12864 dispaly skerm
Versnellingsmodule
3.7V battery (aanlyn gekoop, die volume is ongeveer 600mAH)
3 bottels (aanlyn gekoop)
Dit is baie gerieflik om hierdie projek deur Blybk te bou.
Stap 1: Skep 'n Blynk -projek
Voeg twee kontroles by:
Waardevertoning * 1
Intydse klok * 1
Die naam van Value Display moet in stappe gestel word, maar geen instelling vir die eienskappe van Real-time klok nie. Kies V1 as die invoerpen om die uitleg van die kontroles reg te stel, soos hieronder getoon.
Stap 2: Laai programme af na FireBeetle Board-ESP32
Klik hier om die bronkode af te laai na esp32. Die bronkode bestaan uit biblioteeklêers en 3D -druklêers. U moet die biblioteeklêer stoor in lib of arduino. En die 3D -lêers kan korsies direk afdruk.
Hieronder is die hoofprogram
#include #include // Net nodig vir Arduino 1.6.5 en vroeër #include "SSD1306.h" // alias for "#include" SSD1306Wire.h "" #include "OLEDDisplayUi.h" #include "images.h" # sluit in #include #include #include #include #define POWER_KEY 1 #define MENU_KEY 2 #define UPLOAD_KEY 3 boolean upload = false; SSD1306 -skerm (0x3c, 18, 0); OLEDDisplayUi ui (& vertoon); SimpleTimer timer; WidgetRTC rtc; int skermW = 128; int skermH = 64; int clockCenterX = skermW/2; int clockCenterY = ((skermH-16)/2) +16; // die boonste geel deel is 16 px hoogte int clockRadius = 23; #define TOESTEL (0x53) // ADXL345 -toesteladres #define TO_READ (6) // aantal grepe wat ons elke keer gaan lees (twee grepe vir elke as) byte buff [TO_READ]; // 6 grepe buffer vir die stoor van data gelees vanaf die apparaat char str [100]; // string buffer om data te transformeer voordat dit na die seriële poort int regAddress = 0x32 gestuur word; // eerste as-versnellingsdataregister op die ADXL345 int xx, yy, zz; // drie -as versnellingsdata staties int currentValue = 0; statiese ongetekende lang stappeSum = 0; char auth = "YourAuthToken"; // U WiFi -geloofsbriewe. // Stel wagwoord op "" vir oop netwerke. char ssid = "Jou netwerknaam"; 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, 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, 0x00, 0x00, 0xFE, 0x03, 0x00, 0x00, 0x00, 0xF9, 0x03, 0x00, 0x00, 0x00, 0xFA, 0x03, 0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0xF4, 0x07, 0x00, 0x00, 0x00, 0xF4, 0x0F, 0x00, 0x00, 0x00, 0xF9, 0x0F, 0x00, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x80, 0x00, 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, 0x0, 0x0, 0x0, 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, 0x00, 0xE8, 0x0F, 0x00, 0xE8, 0x00, 0xF0, 0x09, 0x00, 0x60, 0x01, 0xF0, 0x04, 0x00, 0x00, 0x00,}; // nutfunksie vir digitale horlosie: druk voorste 0 string twee digte (int syfers) {if (syfers <10) {string i = '0'+string (syfers); terugkeer i; } anders {return String (syfers); }} void clockOverlay (OLEDDisplay * display, OLEDDisplayUiState * state) {if ((hour () == 0) && (minute () == 0) && (second () == 0)) stepsSum = 0; } void analogClockFrame (OLEDDisplay * display, OLEDDisplayUiState * state, int16_t x, int16_t y) {display-> drawCircle (clockCenterX + x, clockCenterY + y, 2); // uur merk vir (int z = 0; z drawLine (x2 + x, y2 + y, x3 + x, y3 + y);} // vertoon tweedehandse vlotterhoek = tweede () * 6; hoek = (hoek / 57.29577951); // Skakel grade om na radiale int x3 = (clockCenterX + (sin (hoek) * (clockRadius - (clockRadius / 5))))); int y3 = (clockCenterY - (cos (hoek) * (clockRadius - (clockRadius / 5))))); display-> drawLine (clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); // vertoon minuutwyserhoek = minuut () * 6; hoek = (hoek / 57.29577951); // Skakel grade om na radiale x3 = (clockCenterX + (sin (hoek) * (clockRadius - (clockRadius / 4))))); y3 = (clockCenterY - (cos (hoek) * (clockRadius - (clockRadius / 4))))); display-> drawLine (clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); // vertoon uurwyserhoek = uur () * 30 + int ((minuut () / 12) * 6); hoek = (hoek / 57.29577951); // Skakel grade om na radiale x3 = (clockCenterX + (sin (hoek) * (clockRadius - (clockRadius / 2))))); y3 = (clockCenterY - (cos (hoek) * (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, tydsnauw); display-> setFont (ArialMT_Plain_16); display-> drawString (60, 45, datum); } void writeTo (int device, byte address, byte val) {Wire.beginTransmission (device); // begin oordrag na Wire.write -toestel (adres); // stuur registeradres Wire.write (val); // stuur waarde om Wire.endTransmission () te skryf; // einde transmissie} // lees getalle grepe vanaf adresregister op toestel in na buff array leeg leesFrom (int toestel, byte adres, int num, byte buff ) {Wire.beginTransmission (toestel); // begin oordrag na Wire.write -toestel (adres); // stuur adres om te lees vanaf Wire.endTransmission (); // beëindig transmissie Wire.beginTransmission (toestel); // begin oordrag na toestel Wire.requestFrom (toestel, num); // versoek 6 grepe van die toestel int i = 0; terwyl (Wire.available ()) // toestel minder as versoek (abnormaal) {buff = Wire.read () kan stuur; // ontvang 'n greep i ++; } Wire.endTransmission (); // end transmission} void runningFrame (OLEDDisplay*display, OLEDDisplayUiState*state, 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 * display, OLEDDisplayUiState * state, int16_t x, int16_t y) {display-> setFont (ArialMT_Plain_16); display-> drawString (60, 45, "laai data op …"); } // Hierdie skikking hou funksieaanwysings na alle rame // rame is die enkele aansigte wat in FrameCallback -rame gly = {analogClockFrame, digitalClockFrame, runningFrame, uploadFrame}; // hoeveel rame is daar? int frameCount = 4; // Oorleggings word staties bo -op 'n raam geteken, bv. 'n klok OverlayCallback overlays = {clockOverlay}; int overlaysCount = 1; void uploadToBlynk (void) {if (upload == true) {Blynk.virtualWrite (V0, stepsSum); Blynk.virtualWrite (V1, stepSum); }} 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 (rame, frameCount); ui.setOverlays (overlays, overlaysCount); ui.disableAutoTransition (); ui.switchToFrame (2); ui.init (); display.flipScreenVertically (); } void adxl345Init (void) {writeTo (DEVICE, 0x2D, 0); writeTo (TOESTEL, 0x2D, 16); writeTo (TOESTEL, 0x2D, 8); } void updateAdxl345 (void) {readFrom (DEVICE, regAddress, TO_READ, buff); // lees die versnellingsdata van die ADXL345 xx = (((int) buff [1]) << 8) | buff [0]; jj = (((int) buff [3]) << 8) | buff [2]; zz = (((int) buff [5]) << 8) | buff [4]; if (xx 80) {if (xx <currentValue) {stepsSum ++; } huidige waarde = xx; } sprintf (str, "%d", stepsSum); } int getKeys (void) {if (digitalRead (D2) == LOW) {delay (5); if (digitalRead (D2) == LOW) {terwyl (digitalRead (D2) == LOW); stuur POWER_KEY terug; }} if (digitalRead (D3) == LOW) {vertraging (5); if (digitalRead (D3) == LOW) {terwyl (digitalRead (D3) == LOW); terugkeer MENU_KEY; }} if (digitalRead (D4) == LOW) {vertraging (5); if (digitalRead (D4) == LOW) {terwyl (digitalRead (D4) == LOW); stuur UPLOAD_KEY terug; }} gee 0 terug; } void doKeysFunction (void) {static int uiFrameIndex = 2; int sleutels = getKeys (); as (sleutels == POWER_KEY) {statiese karakter i = 0; as (i) {ui.init (); display.flipScreenVertically (); display.displayOn (); } anders {display.displayOff (); } i = ~ i; } if (sleutels == MENU_KEY) {if (oplaai == vals) {uiFrameIndex ++; as (uiFrameIndex == 3) uiFrameIndex = 0; ui.switchToFrame (uiFrameIndex); } anders {ui.switchToFrame (3); }} if (sleutels == UPLOAD_KEY) {if (oplaai == waar) {oplaai = vals; ui.switchToFrame (uiFrameIndex); } anders {oplaai = waar; ui.switchToFrame (3); }}} ongeldige opstelling () {pinMode (D2, INPUT); pinMode (D3, INVOER); pinMode (D4, INVOER); Blynk.begin (auth, ssid, pass); rtc.begin (); uiInit (); adxl345Init (); timer.setInterval (30, updateAdxl345); timer.setInterval (100, uploadToBlynk); } leemte -lus () {int stayingTimeBudget = ui.update (); static int testSum = 0; if ((testSum 0) {delay (stayingTimeBudget);} doKeysFunction (); timer.run ();}
Let op: U moet die Wi-Fi-instelling, paspoort en AUTHTOKENS vir u self verander.
char auth = "YourAuthToken"; // U WiFi -geloofsbriewe. // Stel wagwoord op "" vir oop netwerke. char ssid = "Jou netwerknaam"; char pass = "YourPassword";
Stap 3: Hardewareverbinding
Koppel OLED12864 en versnellingsmodule aan I2C, onderkant na D2, D3, D4. Voeg voorts 51k optrekweerstands by die onderkant om 3.3V te bereik, soos hieronder getoon.
Let op: dit is verkeerd om optrekweerstands aan AREF te koppel, die regte een op 3.3V
Die hardeware soldeerbeeld, soos hieronder getoon:
Na die soldeer, monteer die hardeware -module na die kors, soos hieronder getoon:
Omvattende effekbeeld ~
Aanbeveel:
Hoe om 'n hommeltuig te maak met Arduino UNO - Maak 'n quadcopter met behulp van mikrokontroller: 8 stappe (met foto's)
Hoe om 'n hommeltuig te maak met Arduino UNO | Maak 'n quadcopter met behulp van mikrobeheerder: inleiding Besoek my Youtube -kanaal 'n Drone is 'n baie duur apparaat (produk) om te koop. In hierdie pos gaan ek bespreek hoe ek dit goedkoop kan maak ?? En hoe kan u u eie goedkoop maak teen goedkoop pryse … In Indië is al die materiale (motors, ESC's
Hoe om 'n pasgemaakte PCB te maak met 'n lasergraveur met lae krag: 8 stappe (met foto's)
Hoe om 'n pasgemaakte PCB te maak met 'n lasergraveur met 'n lae krag: As u 'n tuisgemaakte PCB wil maak, kan u verskeie metodes aanlyn vind: van die mees basiese, met slegs 'n pen, tot die meer gesofistikeerde met behulp van 3D -drukkers en ander toerusting. En hierdie tutoriaal val op die laaste geval! In hierdie projek vertel ek
Hoe om 'n DIY Bartop -arcade vir twee spelers te maak met aangepaste markies, met 'n Pandora -boks: 17 stappe (met foto's)
Hoe om 'n DIY Bartop -arcade vir twee spelers te maak met aangepaste markiesmuntstukke, met behulp van 'n Pandora -boks: dit is 'n stap -vir -stap handleiding oor hoe om 'n boonste arcade -masjien vir twee spelers te bou met persoonlike muntstukke wat in die markie ingebou is. Die muntstukke sal so gemaak word dat dit slegs munte aanvaar wat die grootte van 'n kwartier of groter is. Hierdie arcade word aangedryf
Hoe om 'n polsband -stappenteller te maak: 5 stappe
Hoe om 'n polsbandmeter te maak: ek loop en hardloop graag in die distrik waarin ek woon. Ek geniet die tyd om alleen te wees, want daar kom altyd wonderlike idees in hierdie tyd. Onlangs het ek 'n 6-as traagheidsbewegingsensor by DFRobot gekoop. Dit kom dus by my op, hoekom nie
Musiekreaktiewe lig -- Hoe om 'n super -eenvoudige musiekreaktiewe lig te maak vir die maak van 'n tafelblad: 5 stappe (met foto's)
Musiekreaktiewe lig || Hoe om 'n super -eenvoudige musiekreaktiewe lig te maak om lessenaars te maak: Hallo ouens, vandag bou ons 'n baie interessante projek. Vandag gaan ons musiek reaktiewe lig bou. Die LED sal sy helderheid verander volgens die bas wat eintlik 'n lae-frekwensie klanksein is. Dit is baie eenvoudig om te bou. Ons sal