ዝርዝር ሁኔታ:

የእርምጃ ቆጣሪ እንዴት እንደሚደረግ? 3 ደረጃዎች (ከስዕሎች ጋር)
የእርምጃ ቆጣሪ እንዴት እንደሚደረግ? 3 ደረጃዎች (ከስዕሎች ጋር)

ቪዲዮ: የእርምጃ ቆጣሪ እንዴት እንደሚደረግ? 3 ደረጃዎች (ከስዕሎች ጋር)

ቪዲዮ: የእርምጃ ቆጣሪ እንዴት እንደሚደረግ? 3 ደረጃዎች (ከስዕሎች ጋር)
ቪዲዮ: She wants $40 million from Bad Bunny - for 3 words 2024, ታህሳስ
Anonim
Image
Image
ብሊንክ ፕሮጀክት ይፍጠሩ
ብሊንክ ፕሮጀክት ይፍጠሩ

እኔ በብዙ ስፖርቶች ላይ ጥሩ አፈፃፀም ነበረኝ -መራመድ ፣ መሮጥ ፣ ብስክሌት መንዳት ፣ ባድሚንተን መጫወት ወዘተ።

ብዙም ሳይቆይ በዙሪያዬ ለመጓዝ ማሽከርከር እወዳለሁ። ደህና ፣ የእኔን ሆዴን ይመልከቱ ……

ደህና ፣ ለማንኛውም ፣ የአካል ብቃት እንቅስቃሴን እንደገና ለመጀመር እወስናለሁ። ምን መሣሪያ ማዘጋጀት አለብኝ? ከስፖርት ተቋማት በተጨማሪ ፣ አዎ! መሣሪያ እፈልጋለሁ! በእሱ አምናለሁ ፣ ተገቢውን የአካል ብቃት እንቅስቃሴ መጠን ማቆየት እችላለሁ። እዚህ መሣሪያው ወደ ሕልውና ይመጣል። በቪዲዮ እንጀምር ~

መሣሪያው በእውነተኛ ጊዜ (እና ካሎሪዎችን) መመዝገብ ብቻ ሳይሆን ጊዜን ማሳየት ይችላል። ልዩ የሆነው የማሳያ ቅርጸት ጠቋሚ ነው ~ በጣም አሪፍ ነው! በእውነት ፣ በእውነት ወድጄዋለሁ!

መዝገቦችዎን ወደ በይነመረብ መስቀል ይችላሉ

በአንድ ጠቅታ ብቻ። ሁሉም መዝገቦች በብሊንክ (ከዚህ በፊት ያስተዋወቀው ስማርት ስልክ ሶፍትዌር) ሊታዩ ይችላሉ። እንደ ተለባሽ ስማርት ሰዓት ተመሳሳይ ፣ መሣሪያው በመስመር ላይ ጊዜ ያገኛል (ስለዚህ ኃይልን እና ጊዜን ማዘመን መፍራት የለብዎትም)።

በሜዳ ውስጥ ሃርድዌር;

FireBeetle ቦርድ- ESP32

FireBeetle ሽፋኖች-ፕሮቶ ቦርድ

OLED12864 የማይዛባ ማያ ገጽ

የፍጥነት ሞዱል

3.7V ባትሪ (በመስመር ላይ የተገዛ ፣ መጠኑ ወደ 600 mAH ነው)

3 ጠርሙሶች (በመስመር ላይ የተገዛ)

ይህንን ፕሮጀክት በቢሊቢክ ለመገንባት በጣም ምቹ ነው።

ደረጃ 1: ብሊንክ ፕሮጀክት ይፍጠሩ

ሁለት መቆጣጠሪያዎችን ያክሉ

የእሴት ማሳያ * 1

የእውነተኛ ሰዓት ሰዓት * 1

የእሴት ማሳያ ስም በደረጃዎች ላይ መዋቀር አለበት ፣ ግን ለእውነተኛ ሰዓት ሰዓት ባህሪዎች ምንም ቅንብር የለም። ከዚህ በታች እንደሚታየው የመቆጣጠሪያዎችን አቀማመጥ ለማስተካከል V1 ን እንደ የግቤት ፒን ይምረጡ።

ደረጃ 2 ፕሮግራሞችን ወደ FireBeetle Board-ESP32 ያውርዱ

የመነሻ ኮዱን ወደ esp32 ለማውረድ እዚህ ጠቅ ያድርጉ። የምንጭው ኮድ የቤተ -መጽሐፍት ፋይሎችን እና 3 -ል ማተሚያ ፋይሎችን ያካትታል። የቤተ መፃህፍቱን ፋይል በአርዲኖ ሊብ ውስጥ ማስቀመጥ አለብዎት። እና 3 ዲ ፋይሎች ቅርፊቶችን በቀጥታ ማተም ይችላሉ።

ከዚህ በታች ዋናው ፕሮግራም ነው

#አካትት #አካታች // ለአርዲኖ 1.6.5 ብቻ ያስፈልጋል እና ቀደም ሲል #SSD1306.h "// ተለዋጭ ስም ለ" #አካትት "SSD1306Wire.h" " # #ያካትቱ" OLEDDisplayUi.h " #ምስሎችን ያካትቱ። አካትት #አካትት #አካትት #አካትት #አካትት #መግለፅን ሀይል_ቁልፍ 1 #መግለፅ MENU_KEY 2 #ገላጭ UPLOAD_KEY 3 ቡሊያን ሰቀላ = ሐሰት; SSD1306 ማሳያ (0x3c ፣ 18 ፣ 0); OLEDDisplayUi ui (& ማሳያ); SimpleTimer ሰዓት ቆጣሪ; WidgetRTC rtc; int screenW = 128; int screenH = 64; int clockCenterX = screenW/2; int clockCenterY = ((screenH-16)/2) +16; // የላይኛው ቢጫ ክፍል 16 ፒክሰል ቁመት int clockRadius = 23; #ጥራት DEVICE (0x53) // ADXL345 የመሣሪያ አድራሻ #እያንዳንዱን እናነባለን (እያንዳንዱ ዘንግ ሁለት ባይት) ባይት ባፍ [TO_READ]; // ከመሣሪያው ቻር str [100] የተነበበ መረጃን ለመቆጠብ 6 ባይት ቋት። // ወደ ሕብረቁምፊ ወደብ int regAddress = 0x32 ከመላክዎ በፊት ውሂብን ለመለወጥ ሕብረቁምፊ ቋት። // በ ADXL345 int xx ፣ yy ፣ zz ላይ የመጀመሪያው ዘንግ-ማፋጠን-የውሂብ ምዝገባ። // የሶስት ዘንግ የፍጥነት መረጃ የማይንቀሳቀስ int currentValue = 0; የማይንቀሳቀስ ያልተፈረመ ረጅም ደረጃዎች Sum = 0; char auth = "YourAuthToken"; // የእርስዎ የ WiFi ምስክርነቶች። // ለተከፈቱ አውታረ መረቦች የይለፍ ቃልን ወደ “” ያዘጋጁ። char ssid = "YourNetworkName"; ቻር ማለፊያ = "የእርስዎ የይለፍ ቃል"; const charning_Logo_bits PROGMEM = {0x00 ፣ 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 ፣ 0x0 ፣ 0x0 0xFC ፣ 0x00 ፣ 0x00 ፣ 0x00 ፣ 0x00 ፣ 0xF8 ፣ 0x01 ፣ 0x00 ፣ 0x00 ፣ 0x00 ፣ 0xF8 ፣ 0x01 ፣ 0x00 ፣ 0x00 ፣ 0x00 ፣ 0xE0 ፣ 0x03 ፣ 0x00 ፣ 0x00 ፣ 0x60 ፣ 0xF1 ፣ 0x07 ፣ 0x0 0xF8 ፣ 0x17 ፣ 0x00 ፣ 0x00 ፣ 0xC0 ፣ 0xF8 ፣ 0x0F ፣ 0x00 ፣ 0x00 ፣ 0xE0 ፣ 0xFB ፣ 0x17 ፣ 0x00 ፣ 0x00 ፣ 0xC0 ፣ 0xFF ፣ 0x13 ፣ 0x00 ፣ 0x00 ፣ 0x00 ፣ 0x0 ፣ 0x0 ፣ 0x0 0xFE ፣ 0x03 ፣ 0x00 ፣ 0x00 ፣ 0x00 ፣ 0xF9 ፣ 0x03 ፣ 0x00 ፣ 0x00 ፣ 0x00 ፣ 0xFA ፣ 0x03 ፣ 0x00 ፣ 0x00 ፣ 0x00 ፣ 0xF8 ፣ 0x03 ፣ 0x00 ፣ 0x00 ፣ 0x00 ፣ 0xF0 ፣ 0x0 0xF4 ፣ 0x07 ፣ 0x00 ፣ 0x00 ፣ 0x00 ፣ 0xF4 ፣ 0x0F ፣ 0x00 ፣ 0x00 ፣ 0x00 ፣ 0xF9 ፣ 0x0F ፣ 0x00 ፣ 0x00 ፣ 0x00 ፣ 0xFC ፣ 0x1F ፣ 0x00 ፣ 0x00 ፣ 0x80 ፣ 0xF ፣ 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 0x00 ፣ 0xC0 ፣ 0x01 ፣ 0xF0 ፣ 0x03 ፣ 0x00 ፣ 0xC0 ፣ 0x03 ፣ 0xE8 ፣ 0x07 ፣ 0x00 ፣ 0xC0 ፣ 0x03 ፣ 0x88 ፣ 0x6F ፣ 0x00 ፣ 0x80 ፣ 0x03 ፣ 0x40 ፣ 0x0 ፣ 0x0 ፣ 0x0 ፣ 0x0 0x00 ፣ 0x80 ፣ 0x03 ፣ 0x00 ፣ 0xF8 ፣ 0x01 ፣ 0x00 ፣ 0x07 ፣ 0x00 ፣ 0xF4 ፣ 0x00 ፣ 0x00 ፣ 0x07 ፣ 0x00 ፣ 0xE8 ፣ 0x00 ፣ 0x80 ፣ 0x0F ፣ 0x00 ፣ 0xE8 ፣ 0x0 ፣ 0x0 ፣ 0x90 0x00 ፣ 0xE8 ፣ 0x0F ፣ 0x00 ፣ 0xE8 ፣ 0x00 ፣ 0xF0 ፣ 0x09 ፣ 0x00 ፣ 0x60 ፣ 0x01 ፣ 0xF0 ፣ 0x04 ፣ 0x00 ፣ 0x00 ፣ 0x00 ፣}; // ለዲጂታል ሰዓት ማሳያ የመገልገያ ተግባር 0 ህትመት የሚመራ ህትመቶች ሁለት ዲጂት (ኢን አሃዝ) {ከሆነ (አሃዞች <10) {String i = '0'+String (አሃዞች) ፤ መመለስ i; } ሌላ {ሕብረቁምፊን ይመልሱ (አሃዞች) ፤ }} ባዶ ሰዓት ኦቨርላይ (OLEDDisplay * ማሳያ ፣ OLEDDisplayUiState * ሁኔታ) {ከሆነ ((ሰዓት () == 0) && (ደቂቃ () == 0) && (ሁለተኛ () == 0)) stepsSum = 0; } ባዶ analogClockFrame (OLEDDisplay * ማሳያ ፣ OLEDDisplayUiState * ግዛት ፣ int16_t x ፣ int16_t y) {display-> drawCircle (clockCenterX + x ፣ clockCenterY + y, 2); // የሰዓት መዥገሮች ለ (int z = 0; z drawLine (x2 + x ፣ y2 + y ፣ x3 + x ፣ y3 + y) ፤} // ማሳያ ሁለተኛ እጅ ተንሳፋፊ አንግል = ሁለተኛ () * 6 ፤ አንግል = (አንግል) / 57.29577951); // ዲግሪዎች ወደ ራዲያን int x3 = (ሰዓት ማእከል + (ኃጢአት (አንግል) * (ሰዓት ራዲየስ - (ሰዓት ራዲየስ / 5)))) ፤ int y3 = (ሰዓት ማእከል - (cos (አንግል)) (ሰዓት ራዲየስ - (clockRadius / 5))))); ማሳያ-> drawLine (clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); // የማሳያ ደቂቃ የእጅ አንግል = ደቂቃ () * 6; አንግል = (አንግል / 57.29577951); // ዲግሪዎች ወደ ራዲያን x3 = (ሰዓት ማእከልX + (ኃጢአት (አንግል) * (ሰዓት ራዲየስ - (ሰዓት ራዲየስ / 4)))));)); ማሳያ-> drawLine (የሰዓት ማእከልX + x ፣ የሰዓት ማእከል + y ፣ x3 + x ፣ y3 + y) ፤ // የማሳያ ሰዓት የእጅ አንግል = ሰዓት () * 30 + int ((ደቂቃ () / 12) * 6); አንግል = (አንግል / 57.29577951); // ዲግሪዎች ወደ ራዲያን x3 = (ሰዓት ማእከልX + (ኃጢአት (አንግል) * (ሰዓት ራዲየስ - (ሰዓት ራዲየስ / 2))))); clockRadius - (clockRa dius / 2))))); ማሳያ-> drawLine (clockCenterX + x ፣ clockCenterY + y ፣ x3 + x ፣ y3 + y); } ባዶነት digitalClockFrame (OLEDDisplay * ማሳያ ፣ OLEDDisplayUiState * ግዛት ፣ int16_t x ፣ int16_t y) {ሕብረቁምፊ ቀን = ሕብረቁምፊ (ዓመት ())+"/"+ሁለት ዲጂቶች (ወር ())+"/"+ሁለት ዲጂቶች (ቀን ()); ሕብረቁምፊ timenow = ሕብረቁምፊ (ሰዓት ())+":"+twoDigits (ደቂቃ ())+":"+twoDigits (ሁለተኛ ()); ማሳያ-> setTextAlignment (TEXT_ALIGN_CENTER); ማሳያ-> setFont (ArialMT_Plain_24); ማሳያ-> drawString (clockCenterX + x, 20 ፣ timenow); ማሳያ-> setFont (ArialMT_Plain_16); ማሳያ-> drawString (60 ፣ 45 ፣ ቀን); } ባዶ መጻፍ ለ (int መሣሪያ ፣ ባይት አድራሻ ፣ ባይት ቫል) {Wire.beginTransmission (መሣሪያ) ፤ // ወደ መሣሪያ ማስተላለፍ ይጀምሩ Wire.write (አድራሻ); // የመመዝገቢያ አድራሻ ላክ Wire.write (val); // Wire.endTransmission () ለመፃፍ እሴት ይላኩ ፤ // ማብቂያ ማስተላለፍ} // የቁጥር ባይት ያነባል በመሣሪያ ላይ ከአድራሻ መመዝገቢያ ወደ ባዶ ድርድር ባዶ ንባብFF (int መሣሪያ ፣ ባይት አድራሻ ፣ int num ፣ ባይት ቡፍ ) {Wire.beginTransmission (መሣሪያ) ፤ // ወደ መሣሪያ ማስተላለፍ ይጀምሩ Wire.write (አድራሻ); // ከ Wire.endTransmission () ለማንበብ አድራሻ ይልካል ፤ // መጨረሻ ማስተላለፍ Wire.begin ማስተላለፊያ (መሣሪያ); // ወደ መሣሪያ ማስተላለፍ ይጀምሩ Wire.requestFrom (መሣሪያ ፣ ቁጥር) ፤ // ከመሣሪያ int i = 0 6 ባይት ይጠይቁ። (Wire.available ()) // መሣሪያ ከተጠየቀው (ያልተለመደ) ሊልክ ይችላል {buff = Wire.read (); // ባይት i ++ ተቀበል; } Wire.endTransmission (); // ማብቂያ ማስተላለፍ} ባዶ ሩጫ ፍሬም (OLEDDisplay*ማሳያ ፣ OLEDDisplayUiState*ግዛት ፣ int16_t x ፣ int16_t y) {float calValue = stepsSum*0.4487; ማሳያ-> setTextAlignment (TEXT_ALIGN_CENTER); ማሳያ-> setFont (ArialMT_Plain_24); ማሳያ-> drawString (clockCenterX ፣ clockCenterY ፣ str); sprintf (str ፣ “%.2fcal” ፣ calValue); ማሳያ-> setTextAlignment (TEXT_ALIGN_CENTER); ማሳያ-> setFont (ArialMT_Plain_10); ማሳያ-> drawString (100 ፣ 20 ፣ str); ማሳያ-> drawXbm (10 ፣ 14 ፣ 34 ፣ 50 ፣ ሩጫ_ሎጎ_ቢቶች); } ባዶ ሰቀላ ፍሬም (OLEDDisplay * ማሳያ ፣ OLEDDisplayUiState * ግዛት ፣ int16_t x ፣ int16_t y) {display-> setFont (ArialMT_Plain_16) ፤ ማሳያ-> drawString (60 ፣ 45 ፣ “ውሂብ ስቀል…”); } // ይህ ድርድር ለሁሉም ጠቋሚዎች የተግባር ጠቋሚዎችን ያስቀምጣል // ፍሬሞች በ FrameCallback ክፈፎች ውስጥ የሚንሸራተቱ ነጠላ እይታዎች ናቸው = {analogClockFrame ፣ digitalClockFrame ፣ runFrame ፣ uploadFrame}; // ስንት ክፈፎች አሉ? int frameCount = 4; // ተደራቢዎች በስታቲስቲክስ በፍሬም አናት ላይ ተቀርፀዋል ለምሳሌ። የሰዓት ተደራራቢ ደውል ተደራቢዎች = {clockOverlay}; int overlaysCount = 1; ባዶነት uploadToBlynk (ባዶ) {if (upload == true) {Blynk.virtualWrite (V0, stepsSum); Blynk.virtualWrite (V1 ፣ stepsSum); }} ባዶ uiInit (ባዶ) {ui.setTargetFPS (30) ፤ //ui.setActiveSymbol (ንቁ ምልክት); //ui.setInactiveSymbol (የማይነቃነቅ ምልክት); ui.setIndicatorPosition (TOP); ui.setIndicatorDirection (LEFT_RIGHT); ui.setFrameAnimation (SLIDE_LEFT); ui.setFrames (ክፈፎች ፣ frameCount); ui.setOverlays (ተደራቢዎች ፣ ተደራራቢ ቆጠራ); ui.disableAutoTransition (); ui.switchToFrame (2); ui.init (); display.flipScreenVertically (); } ባዶነት adxl345Init (ባዶ) {writeTo (DEVICE ፣ 0x2D ፣ 0) ፤ ጻፍ ለ (መሣሪያ ፣ 0x2 ዲ ፣ 16); ጻፍ ለ (መሣሪያ ፣ 0x2 ዲ ፣ 8); } ባዶነት ዝመና Adxl345 (ባዶ) {readFrom (DEVICE ፣ regAddress ፣ TO_READ ፣ buff) ፤ // ከ ADXL345 xx = (((int) buff [1]) << 8) የፍጥነት መረጃን ያንብቡ | ቡፍ [0]; yy = (((int) buff [3]) << 8) | ቡፍ [2]; zz = (((int) buff [5]) << 8) | ቡፍ [4]; ከሆነ (xx 80) {ከሆነ (xx <currentValue) {stepsSum ++; } የአሁኑ እሴት = xx; } sprintf (str ፣ "%d" ፣ stepsSum); } int getKeys (ባዶ) {ከሆነ (digitalRead (D2) == LOW) {መዘግየት (5); ከሆነ (digitalRead (D2) == LOW) {እያለ (digitalRead (D2) == LOW); ተመለስ POWER_KEY; }} ከሆነ (digitalRead (D3) == LOW) {መዘግየት (5); ከሆነ (digitalRead (D3) == LOW) {እያለ (digitalRead (D3) == LOW); MENU_KEY ን መመለስ; }} ከሆነ (digitalRead (D4) == LOW) {መዘግየት (5); ከሆነ (digitalRead (D4) == LOW) {እያለ (digitalRead (D4) == LOW); ተመለስ UPLOAD_KEY; }} መመለስ 0; } ባዶ doKeysFunction (ባዶ) {static int uiFrameIndex = 2; int ቁልፎች = getKeys (); ከሆነ (ቁልፎች == POWER_KEY) {static char i = 0; ከሆነ (i) {ui.init (); display.flipScreenVertically (); display.displayOn (); } ሌላ {display.displayOff (); } i = ~ i; } ከሆነ (ቁልፎች == MENU_KEY) {if (upload == false) {uiFrameIndex ++; ከሆነ (uiFrameIndex == 3) uiFrameIndex = 0; ui.switchToFrame (uiFrameIndex); } ሌላ {ui.switchToFrame (3); }} ከሆነ (ቁልፎች == UPLOAD_KEY) {if (upload == true) {upload = false; ui.switchToFrame (uiFrameIndex); } ሌላ {upload = true; ui.switchToFrame (3); }}} ባዶነት ማዋቀር () {pinMode (D2 ፣ INPUT) ፤ pinMode (D3 ፣ ማስገቢያ); pinMode (D4 ፣ ማስገቢያ); ብሊንክ.ጀጊን (auth ፣ ssid ፣ pass); rtc.begin (); uiInit (); adxl345Init (); timer.setInterval (30 ፣ updateAdxl345); timer.setInterval (100 ፣ uploadToBlynk); } ባዶነት loop () {int ቀረTimeBudget = ui.update (); የማይንቀሳቀስ int testSum = 0; ከሆነ ((testSum 0) {መዘግየት (restTimeBudget);} doKeysFunction (); timer.run ();}

ጥንቃቄ-የ Wi-Fi ቅንብሮችን ፣ ፓስፖርትን እና ጽሑፎችን ለራስዎ መለወጥ አለብዎት።

char auth = "YourAuthToken"; // የእርስዎ የ WiFi ምስክርነቶች። // ለተከፈቱ አውታረ መረቦች የይለፍ ቃልን ወደ “” ያዘጋጁ። char ssid = "YourNetworkName"; ቻር ማለፊያ = "የእርስዎ የይለፍ ቃል";

ደረጃ 3 የሃርድዌር ግንኙነት

የሃርድዌር ግንኙነት
የሃርድዌር ግንኙነት
የሃርድዌር ግንኙነት
የሃርድዌር ግንኙነት
የሃርድዌር ግንኙነት
የሃርድዌር ግንኙነት

OLED12864 ን እና የፍጥነት ሞዱሉን ከ I2C ፣ ከታች ወደ D2 ፣ D3 ፣ D4 ያገናኙ። በተጨማሪም ፣ ከዚህ በታች እንደሚታየው ወደ 3.3 ቪ ለመድረስ 51k የመጎተት ተከላካዮች ወደ ታችኛው ክፍል ይጨምሩ።

ጥንቃቄ-የሚጎትቱ ተከላካዮችን ከ AREF ጋር ማገናኘት ስህተት ነው ፣ ትክክለኛው ወደ 3.3 ቪ ነው

ከዚህ በታች እንደሚታየው የሃርድዌር መሸጫ ምስል

ከዚህ በታች እንደሚታየው ከሽያጭ በኋላ የሃርድዌር ሞዱሉን ወደ ክሬን በማሰባሰብ

ሁሉን አቀፍ ውጤት ምስል ~

የሚመከር: