Სარჩევი:

როგორ გავაკეთოთ ნაბიჯების მრიცხველი?: 3 ნაბიჯი (სურათებით)
როგორ გავაკეთოთ ნაბიჯების მრიცხველი?: 3 ნაბიჯი (სურათებით)

ვიდეო: როგორ გავაკეთოთ ნაბიჯების მრიცხველი?: 3 ნაბიჯი (სურათებით)

ვიდეო: როგორ გავაკეთოთ ნაბიჯების მრიცხველი?: 3 ნაბიჯი (სურათებით)
ვიდეო: ზურა ყიფშიძე და ლელა წურწუმია 2024, ივნისი
Anonim
Image
Image
შექმენით ბლინკის პროექტი
შექმენით ბლინკის პროექტი

მე კარგად ვთამაშობდი ბევრ სპორტში: სიარული, სირბილი, ველოსიპედით სიარული, ბადმინტონის თამაში და ა.

მე მიყვარს ცხენოსნობა მოგზაურობამდე. აბა, შეხედე ჩემს პორტიულ მუცელს …

ყოველ შემთხვევაში, მე გადავწყვიტე ვარჯიშის განახლება. რა აღჭურვილობა უნდა მოვამზადო? სპორტული ობიექტის გარდა, დიახ! მე მჭირდება ინსტრუმენტი! მე მჯერა, რომ მას შეუძლია შეინარჩუნოს შესაბამისი ვარჯიში. აქ ჩნდება ინსტრუმენტი. დავიწყოთ ვიდეოთი

ინსტრუმენტს არა მხოლოდ შეუძლია ჩაწეროს ნაბიჯები (და კალორია) რეალურ დროში, არამედ აჩვენოს დრო. განსაკუთრებული ის არის, რომ ჩვენების ფორმატი მაჩვენებელია ~ ძალიან მაგარია! მე ნამდვილად, ძალიან მომწონს!

თქვენ შეგიძლიათ ატვირთოთ თქვენი ჩანაწერები ინტერნეტში

მხოლოდ ერთი დაწკაპუნებით. ყველა ჩანაწერის ჩვენება შესაძლებელია ბლინკის მიერ (სმარტფონის პროგრამული უზრუნველყოფა, რომელიც ადრე იყო დანერგილი). იგივე, რაც აცვიათ ჭკვიანი საათი, ინსტრუმენტი იღებს დროს ონლაინ რეჟიმში (ასე რომ თქვენ არ უნდა შეგეშინდეთ ენერგიისა და დროის განახლების).

აპარატურა მედეში:

FireBeetle Board-ESP32

FireBeetle ფარავს-პროტო დაფა

OLED12864 გაფანტული ეკრანი

აჩქარების მოდული

3.7 ვ ბატარეა (ნაყიდია ინტერნეტით, მოცულობა დაახლოებით 600 mAH)

3 ბოთლი (ნაყიდია ინტერნეტით)

ძალიან მოსახერხებელია ამ პროექტის აშენება ბლიბკის მიერ.

ნაბიჯი 1: შექმენით ბლინკის პროექტი

დაამატეთ ორი კონტროლი:

მნიშვნელობის ჩვენება * 1

რეალურ დროში საათი * 1

მნიშვნელობის ჩვენების სახელი უნდა იყოს მითითებული საფეხურებად, მაგრამ არა რეალურ დროში საათის მახასიათებლებისთვის. შეარჩიეთ V1, როგორც შეყვანის პინი, რათა შეცვალოთ კონტროლის განლაგება, ნაჩვენებია ქვემოთ.

ნაბიჯი 2: ჩამოტვირთეთ პროგრამები FireBeetle Board-ESP32– ზე

დააწკაპუნეთ აქ, რომ გადმოწეროთ კოდის esp32. საწყისი კოდი შეიცავს ბიბლიოთეკის ფაილებს და 3D ბეჭდვის ფაილებს. თქვენ უნდა შეინახოთ ბიბლიოთეკის ფაილი lib of arduino– ში. და 3D ფაილებს შეუძლიათ პირდაპირ ქერქების დაბეჭდვა.

ქვემოთ მოცემულია ძირითადი პროგრამა

#მოიცავს #მოიცავს // საჭიროა მხოლოდ Arduino 1.6.5 და უფრო ადრე #მოიცავს "SSD1306.h" // მეტსახელად " #მოიცავს" SSD1306Wire.h "" #მოიცავს "OLEDDisplayUi.h" #მოიცავს "სურათებს. h" # მოიცავს #მოიცავს #მოიცავს #მოიცავს #მოიცავს #შეიცავს #განსაზღვრეთ POWER_KEY 1 #განსაზღვრეთ MENU_KEY 2 #განსაზღვრეთ UPLOAD_KEY 3 ლოგიკური ატვირთვის = ყალბი; SSD1306 ჩვენება (0x3c, 18, 0); OLEDDisplayUi ui (& ჩვენება); SimpleTimer ქრონომეტრი; WidgetRTC rtc; int screenW = 128; int screenH = 64; int clockCenterX = ეკრანი W/2; int clockCenterY = ((screenH-16)/2) +16; // ზედა ყვითელი ნაწილი არის 16 px სიმაღლე int clockRadius = 23; #განსაზღვრეთ მოწყობილობა (0x53) // ADXL345 მოწყობილობის მისამართი #განსაზღვრეთ TO_READ (6) // ბაიტების რაოდენობა, რომელთა წაკითხვასაც ვაპირებთ ყოველ ჯერზე (ორი ბაიტი თითოეული ღერძისთვის) ბაიტი buff [TO_READ]; // 6 ბაიტიანი ბუფერი მოწყობილობის char str- დან წაკითხული მონაცემების შესანახად [100]; // string ბუფერი მონაცემების გარდაქმნისათვის სერიულ პორტში გაგზავნამდე int regAddress = 0x32; // პირველი ღერძი-აჩქარების მონაცემების რეგისტრატორი ADXL345 int xx, yy, zz; // სამი ღერძი აჩქარების მონაცემები სტატიკური int currentValue = 0; სტატიკური ხელმოუწერელი გრძელი ნაბიჯები თანხა = 0; char auth = "YourAuthToken"; // თქვენი WiFi სერთიფიკატები. // დააყენეთ პაროლი "" ღია ქსელებისთვის. char ssid = "შენი ქსელის სახელი"; 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, 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, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x60, 0xF1, 0x07, 0x00, 0x00, 0x20, 0xF8, 0x17, 0x00, 0x00, 0xC0, 0xF8, 0x0F, 0x00, 0x00, 0xE0, 0xFB, 0x17, 0x00, 0x00, 0xC0, 0xFF, 0x13, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x80, 0xFE, 0x03, 0x00, 0x00, 0x00, 0xF9, 0x03, 0x00, 0x00, 0x00, 0xFA, 0x03, 0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0x00, 0xF0, 0x07, 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, 0x00, 0x00, 0x1F 0xFF, 0x1F, 0x00, 0x00, 0xA0, 0xFF, 0x5F, 0x00, 0x00, 0xC0, 0x3F, 0x3F, 0x00, 0x0 0.5 0x00, 0xC0, 0x01, 0xF0, 0x03, 0x00, 0xC0, 0x03, 0xE8, 0x07, 0x00, 0xC0, 0x03, 0x88, 0x6F, 0x00, 0x80, 0x03, 0x40, 0x1E, 0x00, 0xA0, 0x03, 0x40, 0xFC, 0x00, 0x80, 0x03, 0x00, 0xF8, 0x01, 0x00, 0x07, 0x00, 0xF4, 0x00, 0x00, 0x07, 0x00, 0xE8, 0x00, 0x80, 0x0F, 0x00, 0xE8, 0x00, 0x90, 0x0F, 0x00, 0xE0, 0x00, 0xE8, 0x0F, 0x00, 0xE8, 0x00, 0xF0, 0x09, 0x00, 0x60, 0x01, 0xF0, 0x04, 0x00, 0x00, 0x00,}; // სასარგებლო ფუნქცია ციფრული საათის ჩვენებისთვის: ბეჭდავს წამყვან 0 სტრიქონს ორ ციფრს (int ციფრები) {if (ციფრები <10) {სიმებიანი i = '0'+სიმებიანი (ციფრები); დავბრუნდე; } else {დაბრუნება სიმებიანი (ციფრები); }} void clockOverlay (OLEDDisplay * ჩვენება, OLEDDisplayUiState * მდგომარეობა) {if ((hour () == 0) && (minute () == 0) && (second () == 0)) stepsSum = 0; } void analogClockFrame (OLEDDisplay * ჩვენება, OLEDDisplayUiState * მდგომარეობა, int16_t x, int16_t y) {ჩვენება-> drawCircle (clockCenterX + x, clockCenterY + y, 2); // საათის ტკიპები (int z = 0; z drawLine (x2 + x, y2 + y, x3 + x, y3 + y);} // მეორადი float კუთხის ჩვენება = მეორე () * 6; კუთხე = (კუთხე / 57.29577951); // გადააკეთეთ გრადუსი რადიანებში int x3 = (clockCenterX + (ცოდვა (კუთხე) * (clockRadius - (clockRadius / 5)))); int y3 = (clockCenterY - (cos (კუთხე) * (clockRadius - (clockRadius / 5)))); ჩვენება-> drawLine (clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); // ჩვენება წუთის ხელის კუთხე = წუთი () * 6; კუთხე = (კუთხე / 57.29577951); // გადააკეთეთ გრადუსი რადიანებად x3 = (clockCenterX + (sin (კუთხე) * (clockRadius - (clockRadius / 4)))); y3 = (clockCenterY - (cos (კუთხე) * (clockRadius - (clockRadius / 4)))); ჩვენება-> drawLine (clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); // ჩვენება საათის ხელის კუთხე = საათი () * 30 + int ((წუთი () / 12) * 6); კუთხე = (კუთხე / 57.29577951); // გადააკეთეთ გრადუსი რადიანებად x3 = (საათიCenterX + (ცოდვა (კუთხე) * (clockRadius - (clockRadius / 2))))); y3 = (საათის ცენტრი - (cos (კუთხე) * (clockRadius - (clockRa დიუსი / 2)))); ჩვენება-> drawLine (clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); } void digitalClockFrame (OLEDDisplay * ჩვენება, OLEDDisplayUiState * მდგომარეობა, int16_t x, int16_t y) {სიმებიანი თარიღი = სიმებიანი (წელი ())+"/"+ორიდიგიტი (თვე ())+"/"+ორიდიგიტი (დღე ()); სიმებიანი დრო = სიმებიანი (საათი ())+":"+ორიდიგიტი (წუთი ())+":"+ორიდიგიტი (მეორე ()); ჩვენება-> setTextAlignment (TEXT_ALIGN_CENTER); ჩვენება-> setFont (ArialMT_Plain_24); ჩვენება-> drawString (clockCenterX + x, 20, timenow); ჩვენება-> setFont (ArialMT_Plain_16); ჩვენება-> drawString (60, 45, თარიღი); } void writeTo (int მოწყობილობა, ბაიტის მისამართი, byte val) {Wire.beginTransmission (მოწყობილობა); // მოწყობილობაზე გადაცემის დაწყება Wire.write (მისამართი); // რეგისტრაციის მისამართის გაგზავნა Wire.write (val); // გაგზავნეთ მნიშვნელობა Wire.endTransmission- ის დასაწერად (); // დასრულების გადაცემა} // კითხულობს num ბაიტებს დაწყებული მოწყობილობის მისამართის რეგისტრაციიდან buff მასივში void readFrom (int მოწყობილობა, byte მისამართი, int num, byte buff ) {Wire.beginTransmission (მოწყობილობა); // მოწყობილობაზე გადაცემის დაწყება Wire.write (მისამართი); // აგზავნის მისამართს წასაკითხად Wire.endTransmission (); // გადაცემის დასრულება Wire.beginTransmission (მოწყობილობა); // გადაცემის დაწყება მოწყობილობაზე Wire.requestFrom (მოწყობილობა, ნომერი); // მოითხოვეთ 6 ბაიტი მოწყობილობიდან int i = 0; ხოლო (Wire.available ()) // მოწყობილობამ შეიძლება გამოაგზავნოს მოთხოვნაზე ნაკლები (არანორმალური) {buff = Wire.read (); // მიიღეთ ბაიტი i ++; } Wire.endTransmission (); // დასრულების გადაცემა} void runningFrame (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, გაშვებული_ლოგო_ბიტები); } void uploadFrame (OLEDDisplay * ჩვენება, OLEDDisplayUiState * მდგომარეობა, int16_t x, int16_t y) {ჩვენება-> setFont (ArialMT_Plain_16); ჩვენება-> drawString (60, 45, "მონაცემების ატვირთვა …"); } // ეს მასივი ინახავს ფუნქციის მაჩვენებლებს ყველა ჩარჩოზე // ჩარჩოები არის ერთი ხედი, რომელიც სრიალებს FrameCallback ფარგლებში = {analogClockFrame, digitalClockFrame, runningFrame, uploadFrame}; // რამდენი ჩარჩო არსებობს? int frameCount = 4; // გადაფარვები სტატიკურად არის შედგენილი ჩარჩოს თავზე, მაგ. საათის OverlayCallback გადახურვა = {clockOverlay}; int overlaysCount = 1; void uploadToBlynk (void) {if (upload == true) {Blynk.virtualWrite (V0, stepsSum); Blynk.virtualWrite (V1, stepsSum); }} void uiInit (ბათილია) {ui.setTargetFPS (30); //ui.setActiveSymbol(activeSymbol); //ui.setInactiveSymbol (აქტიურიSymbol); ui.setIndicatorPosition (TOP); ui.setIndicatorDirection (LEFT_RIGHT); ui.setFrameAnimation (SLIDE_LEFT); ui.setFrames (ჩარჩოები, frameCount); ui.setOverlays (გადახურვები, overlaysCount); ui.disableAutoTransition (); ui.switchToFrame (2); ui.init (); display.flipScreenVertically (); } void adxl345Init (void) {writeTo (DEVICE, 0x2D, 0); ჩაწერა (მოწყობილობა, 0x2D, 16); ჩაწერა (მოწყობილობა, 0x2D, 8); } void updateAdxl345 (void) {readFrom (DEVICE, regAddress, TO_READ, buff); // წაიკითხეთ ADXL345 აჩქარების მონაცემები 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 (ბათილია) {if (digitalRead (D2) == LOW) {დაგვიანებით (5); if (digitalRead (D2) == LOW) {while (digitalRead (D2) == LOW); დაბრუნება POWER_KEY; }} if (digitalRead (D3) == LOW) {დაგვიანებით (5); if (digitalRead (D3) == LOW) {while (digitalRead (D3) == LOW); დაბრუნება MENU_KEY; }} if (digitalRead (D4) == LOW) {დაგვიანებით (5); if (digitalRead (D4) == LOW) {while (digitalRead (D4) == LOW); დაბრუნება UPLOAD_KEY; }} დაბრუნება 0; } void doKeysFunction (void) {static int uiFrameIndex = 2; int გასაღებები = getKeys (); if (გასაღებები == POWER_KEY) {სტატიკური char i = 0; if (i) {ui.init (); display.flipScreenVertically (); display.displayOn (); } else {display.displayOff (); } i = ~ i; } if (გასაღებები == MENU_KEY) {თუ (ატვირთვა == ყალბი) {uiFrameIndex ++; თუ (uiFrameIndex == 3) uiFrameIndex = 0; ui.switchToFrame (uiFrameIndex); } else {ui.switchToFrame (3); }} if (keys == UPLOAD_KEY) {if (upload == true) {upload = false; ui.switchToFrame (uiFrameIndex); } სხვა {ატვირთვა = ჭეშმარიტი; ui.switchToFrame (3); }}} void setup () {pinMode (D2, INPUT); pinMode (D3, INPUT); pinMode (D4, INPUT); Blynk.begin (author, ssid, pass); rtc.begin (); uiInit (); adxl345Init (); timer.setInterval (30, განახლებაAdxl345); timer.setInterval (100, uploadToBlynk); } void loop () {int დარჩენილიTimeBudget = ui.update (); სტატიკური int testSum = 0; if ((testSum 0) {დაგვიანებით (დარჩენილიTimeBudget);} doKeysFunction (); timer.run ();}

სიფრთხილე: თქვენ უნდა შეცვალოთ Wi-Fi პარამეტრები, პასპორტი და AUTHTOKENS საკუთარ თავზე.

char auth = "YourAuthToken"; // თქვენი WiFi სერთიფიკატები. // დააყენეთ პაროლი "" ღია ქსელებისთვის. char ssid = "შენი ქსელის სახელი"; char pass = "YourPassword";

ნაბიჯი 3: აპარატურის კავშირი

აპარატურის კავშირი
აპარატურის კავშირი
აპარატურის კავშირი
აპარატურის კავშირი
აპარატურის კავშირი
აპარატურის კავშირი

შეაერთეთ OLED12864 და აჩქარების მოდული I2C- თან, ქვედა ნაწილები D2, D3, D4. უფრო მეტიც, დაამატეთ 51k გამწევი რეზისტორები ძირს, რომ მიაღწიოს 3.3V- ს, ნაჩვენებია ქვემოთ.

გაფრთხილება: არასწორია დასაკავშირებელი რეზისტორების დაკავშირება AREF– თან, სწორია 3.3 ვ

აპარატურის შედუღების სურათი, ნაჩვენებია ქვემოთ:

მას შემდეგ, რაც solder, აწყობა ტექნიკის მოდული ქერქი, ნაჩვენებია ქვემოთ:

ყოვლისმომცველი ეფექტის სურათი

გირჩევთ: