Innehållsförteckning:
- Steg 1: Skapa ett Blynk -projekt
- Steg 2: Ladda ner program till FireBeetle Board-ESP32
- Steg 3: Maskinvaruanslutning
Video: Hur man gör en stegräknare?: 3 steg (med bilder)
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:37
Jag brukade prestera bra på många sporter: promenader, löpning, cykling, badminton etc.
Jag älskar att åka för att resa runt innan länge. Titta, titta på min mage …
Tja, i alla fall bestämmer jag mig för att starta om för att träna. Vilken utrustning ska jag förbereda? Förutom idrottsanläggning, ja! Jag behöver ett instrument! Jag tror med det, jag kan behålla lämplig mängd träning. Här blir instrumentet till. Låt oss börja med en video ~
Instrumentet kan inte bara registrera steg (och kalorier) i realtid, utan visa tid. Det som är speciellt är att visningsformatet är pekare ~ så coolt! Jag gillar det verkligen, verkligen!
Du kan ladda upp dina poster till Internet
bara med ett klick. Alla poster kan visas av Blynk (en smarttelefonprogramvara som introducerades tidigare). Samma som bärbar smart klocka, instrumentet får tid på nätet (Så du behöver inte vara rädd för kraften och tiduppdateringen).
Hårdvara i meed:
FireBeetle Board-ESP32
FireBeetle Covers-Proto Board
OLED12864 dispaly -skärm
Accelerationsmodul
3.7V batteri (köpt online, volymen är cirka 600mAH)
3 bottnar (köpt online)
Det är mycket bekvämt att bygga detta projekt av Blybk.
Steg 1: Skapa ett Blynk -projekt
Lägg till två kontroller:
Värdevisning * 1
Realtidsklocka * 1
Namnet på Value Display bör anges i steg, men ingen inställning för egenskaperna för realtidsklocka. Välj V1 som ingångsstift för att justera layouten på kontrollerna, som visas nedan.
Steg 2: Ladda ner program till FireBeetle Board-ESP32
Klicka här för att ladda ner källkoden till esp32. Källkoden består av biblioteksfiler och 3D -utskriftsfiler. Du bör spara biblioteksfilen till lib of arduino. Och 3D -filerna kan skriva ut skorpor direkt.
Nedan är huvudprogrammet
#include #include // Behövs endast för Arduino 1.6.5 och tidigare #include "SSD1306.h" // alias för "#include" SSD1306Wire.h "" #include "OLEDDisplayUi.h" #include "images.h" # inkludera #include #include #include #include #define POWER_KEY 1 #define MENU_KEY 2 #define UPLOAD_KEY 3 boolean upload = false; SSD1306 -skärm (0x3c, 18, 0); OLEDDisplayUi ui (& display); SimpleTimer -timer; WidgetRTC rtc; int screenW = 128; int screenH = 64; int clockCenterX = skärmW/2; int clockCenterY = ((screenH-16)/2) +16; // den övre gula delen är 16 px höjd int clockRadius = 23; #define DEVICE (0x53) // ADXL345 enhetsadress #define TO_READ (6) // antal byte som vi ska läsa varje gång (två byte för varje axel) byte buff [TO_READ]; // 6 bytes buffert för att spara data läst från enhetens char str [100]; // strängbuffert för att transformera data innan den skickas till serieporten int regAddress = 0x32; // första axel-accelerationsdataregister på ADXL345 int xx, yy, zz; // accelerationsdata med tre axlar statisk int currentValue = 0; statiska osignerade långa stegSum = 0; char auth = "YourAuthToken"; // Dina WiFi -uppgifter. // Ställ in lösenordet på "" för öppna nätverk. char ssid = "Ditt nätverksnamn"; char pass = "Ditt lösenord"; 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, 0x00, 0x00 0xF8, 0x17, 0x00, 0x00, 0xC0, 0xF8, 0x0F, 0x00, 0x00, 0xE0, 0xFB, 0x17, 0x00, 0x00, 0xC0, 0xFF, 0x13, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x0, 0xFE, 0x03, 0x00, 0x00, 0x00, 0xF9, 0x03, 0x00, 0x00, 0x00, 0xFA, 0x03, 0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0x00, 0x00, 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, 0x1, 0x0, 0x0, 0x, 0x00, 0x80, 0x03, 0x00, 0xF8, 0x01, 0x00, 0x07, 0x00, 0xF4, 0x00, 0x00, 0x07, 0x00, 0xE8, 0x00, 0x80, 0x0F, 0x00, 0xE8, 0x0, 0x0, 0x0, 0x00, 0xE8, 0x0F, 0x00, 0xE8, 0x00, 0xF0, 0x09, 0x00, 0x60, 0x01, 0xF0, 0x04, 0x00, 0x00, 0x00,}; // verktygsfunktion för digital klockdisplay: skriver ut ledande 0 sträng tvåDigits (int siffror) {if (siffror <10) {String i = '0'+String (siffror); återvända i; } annat {retursträng (siffror); }} 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); // timme bockar för (int z = 0; z drawLine (x2 + x, y2 + y, x3 + x, y3 + y);} // visa andrahands flottörvinkel = sekund () * 6; vinkel = (vinkel / 57.29577951); // Konvertera grader till radianer int x3 = (clockCenterX + (sin (vinkel) * (clockRadius - (clockRadius / 5))))); int y3 = (clockCenterY - (cos (vinkel) * (clockRadius - (clockRadius / 5))))); display-> drawLine (clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); // visa minutvisare = minut () * 6; vinkel = (vinkel / 57.29577951); // Konvertera grader till radianer x3 = (clockCenterX + (sin (vinkel) * (clockRadius - (clockRadius / 4)))); y3 = (clockCenterY - (cos (vinkel) * (clockRadius - (clockRadius / 4))))); display-> drawLine (clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); // visa timvisare = timme () * 30 + int ((minut () / 12) * 6); vinkel = (vinkel / 57.29577951); // Konvertera grader till radianer x3 = (clockCenterX + (sin (vinkel) * (clockRadius - (clockRadius / 2)))); y3 = (clockCenterY - (cos (vinkel) * (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, timenow); display-> setFont (ArialMT_Plain_16); display-> drawString (60, 45, datum); } void writeTo (int enhet, byte adress, byte val) {Wire.beginTransmission (enhet); // starta överföring till enhet Wire.write (adress); // skicka registeradress Wire.write (val); // skicka värde för att skriva Wire.endTransmission (); // slutöverföring} // läser num bytes från adressregister på enhet in till buff array void readFrom (int enhet, byte adress, int num, byte buff ) {Wire.beginTransmission (enhet); // starta överföring till enhet Wire.write (adress); // skickar adress att läsa från Wire.endTransmission (); // avsluta överföring Wire.beginTransmission (enhet); // starta överföring till enhet Wire.requestFrom (enhet, num); // begär 6 byte från enhet int i = 0; medan (Wire.available ()) // -enheten kan skicka mindre än begärd (onormal) {buff = Wire.read (); // ta emot en byte 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, "ladda upp data …"); } // Denna array håller funktionspekare till alla ramar // ramar är de enda vyer som glider i FrameCallback -ramar = {analogClockFrame, digitalClockFrame, runningFrame, uploadFrame}; // hur många ramar finns det? int frameCount = 4; // Överlägg ritas statiskt ovanpå en ram t.ex. a clock 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 (ramar, frameCount); ui.setOverlays (overlays, overlaysCount); ui.disableAutoTransition (); ui.switchToFrame (2); ui.init (); display.flipScreenVertically (); } void adxl345Init (void) {writeTo (DEVICE, 0x2D, 0); writeTo (ENHET, 0x2D, 16); writeTo (ENHET, 0x2D, 8); } void updateAdxl345 (void) {readFrom (DEVICE, regAddress, TO_READ, buff); // läs accelerationsdata från ADXL345 xx = (((int) buff [1]) << 8) | buff [0]; åå = (((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); retur POWER_KEY; }} if (digitalRead (D3) == LOW) {delay (5); if (digitalRead (D3) == LOW) {while (digitalRead (D3) == LOW); gå tillbaka MENU_KEY; }} if (digitalRead (D4) == LOW) {delay (5); if (digitalRead (D4) == LOW) {while (digitalRead (D4) == LOW); returnera UPLOAD_KEY; }} returnera 0; } void doKeysFunction (void) {static int uiFrameIndex = 2; int nycklar = getKeys (); if (nycklar == POWER_KEY) {statisk karaktär i = 0; om (i) {ui.init (); display.flipScreenVertically (); display.displayOn (); } annat {display.displayOff (); } i = ~ i; } if (keys == MENU_KEY) {if (upload == false) {uiFrameIndex ++; om (uiFrameIndex == 3) uiFrameIndex = 0; ui.switchToFrame (uiFrameIndex); } annat {ui.switchToFrame (3); }} if (keys == UPLOAD_KEY) {if (upload == true) {upload = false; ui.switchToFrame (uiFrameIndex); } annat {upload = 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 stayingTimeBudget = ui.update (); static int testSum = 0; if ((testSum 0) {delay (stayingTimeBudget);} doKeysFunction (); timer.run ();}
Varning: Du bör ändra Wi-Fi-inställning, pass och AUTHTOKENS för dig själv.
char auth = "YourAuthToken"; // Dina WiFi -uppgifter. // Ställ in lösenordet på "" för öppna nätverk. char ssid = "Ditt nätverksnamn"; char pass = "Ditt lösenord";
Steg 3: Maskinvaruanslutning
Anslut OLED12864 och accelerationsmodul till I2C, bottnar till D2, D3, D4. Lägg dessutom till 51k uppdragningsmotstånd till bottnarna för att nå 3,3V, som visas nedan.
Varning: Det är fel att ansluta uppdragningsmotstånd till AREF, det rätta är 3,3V
Hårdvarulödningsbilden, som visas nedan:
Efter lödningen, montering av hårdvarumodul till skorpa, som visas nedan:
Omfattande effektbild ~
Rekommenderad:
Stegräknare - Micro: Bit: 12 steg (med bilder)
Stegräknare - Micro: Bit: Detta projekt kommer att vara en stegräknare. Vi kommer att använda accelerometersensorn som är inbyggd i Micro: Bit för att mäta våra steg. Varje gång Micro: Bit skakar kommer vi att lägga till 2 till räkningen och visa den på skärmen
Hur man gör en drönare med Arduino UNO - Gör en quadcopter med mikrokontroller: 8 steg (med bilder)
Hur man gör en drönare med Arduino UNO | Gör en Quadcopter Med Microcontroller: Introduktion Besök min Youtube -kanal En Drone är en mycket dyr gadget (produkt) att köpa. I det här inlägget ska jag diskutera, hur gör jag det billigt ?? Och hur kan du göra din egen så här till billigt pris … Tja i Indien alla material (motorer, ESC
HUR MAN GÖR ARDUINO NANO/MINI - Hur man bränner bootloader: 5 steg
HUR MAN GÖR ARDUINO NANO/MINI | Hur man bränner bootloader: I denna instruktionsbok kommer jag att visa dig hur man gör en Arduino MINI från Scratch.Förfarandet som skrivs i denna instruktion kan användas för att göra alla arduino -brädor för dina anpassade projektkrav.Se videon för bättre förståelse
Hur man gör en delad skärmvideo med fyra steg: 4 steg (med bilder)
Hur man gör en delad skärmvideo med fyra steg: Vi ser ofta samma person visa i en scen två gånger i ett tv -spel. Och så vitt vi vet har skådespelaren ingen tvillingbror. Vi har också sett att två sångvideor läggs på en skärm för att jämföra deras sångkunskaper. Detta är kraften i spl
Hur man gör en morföräldrars kalender & Klippbok (även om du inte vet hur du ska klippbok): 8 steg (med bilder)
Hur man gör en morföräldrars kalender & Klippbok (även om du inte vet hur du ska klippbok): Detta är en mycket ekonomisk (och mycket uppskattad!) Semestergåva till morföräldrar. Jag gjorde 5 kalendrar i år för mindre än $ 7 styck. Material: 12 fina bilder på ditt barn, barn, syskonbarn, brorson, hundar, katter eller andra släktingar 12 olika bitar