সুচিপত্র:
- ধাপ 1: একটি Blynk প্রকল্প তৈরি করুন
- ধাপ 2: FireBeetle Board-ESP32 এ প্রোগ্রাম ডাউনলোড করুন
- ধাপ 3: হার্ডওয়্যার সংযোগ
ভিডিও: কিভাবে একটি স্টেপ কাউন্টার তৈরি করবেন?: 3 টি ধাপ (ছবি সহ)
2024 লেখক: John Day | [email protected]. সর্বশেষ পরিবর্তিত: 2024-01-30 07:56
আমি অনেক খেলায় ভাল পারফর্ম করতাম: হাঁটা, দৌড়ানো, সাইকেল চালানো, ব্যাডমিন্টন খেলা ইত্যাদি।
আমি অনেক আগে ঘুরে বেড়াতে রাইডিং পছন্দ করি। আচ্ছা, আমার পোর্টলি পেট দেখো ……
ঠিক আছে, যাই হোক, আমি ব্যায়াম পুনরায় আরম্ভ করার সিদ্ধান্ত নিই। আমি কি সরঞ্জাম প্রস্তুত করা উচিত? ক্রীড়া সুবিধা ছাড়াও, হ্যাঁ! আমার একটা যন্ত্র দরকার! আমি এর সাথে বিশ্বাস করি, আমি সঠিক পরিমাণে ব্যায়াম রাখতে পারি। এখানে যন্ত্রটি অস্তিত্বে আসে আসুন একটি ভিডিও দিয়ে শুরু করি ~
যন্ত্রটি কেবল বাস্তব সময়ে পদক্ষেপ (এবং ক্যালোরি) রেকর্ড করতে পারে না, কিন্তু সময় দেখায়। বিশেষ কি হল যে দেখানোর বিন্যাসটি পয়েন্টার ~ এত চমৎকার! আমি সত্যি সত্যি এটি পছন্দ করি!
আপনি আপনার রেকর্ড ইন্টারনেটে আপলোড করতে পারেন
শুধুমাত্র একটি ক্লিকে। সমস্ত রেকর্ড Blynk দ্বারা প্রদর্শিত হতে পারে (একটি স্মার্ট ফোন সফ্টওয়্যার আগে চালু)। পরিধানযোগ্য স্মার্ট ঘড়ির মতোই, যন্ত্রটি লাইনে সময় পায় (সুতরাং আপনি শক্তি এবং সময় আপডেট হওয়ার ভয় পাবেন না)।
মেইডে হার্ডওয়্যার:
ফায়ারবিটল বোর্ড-ইএসপি 32
ফায়ারবিটল কভারস-প্রোটো বোর্ড
OLED12864 ডিসপ্যালি স্ক্রিন
ত্বরণ মডিউল
3.7V ব্যাটারি (অনলাইনে কেনা, ভলিউম প্রায় 600mAH
3 বোতল (অনলাইনে কেনা
Blybk দ্বারা এই প্রকল্পটি নির্মাণ করা খুবই সুবিধাজনক।
ধাপ 1: একটি Blynk প্রকল্প তৈরি করুন
দুটি নিয়ন্ত্রণ যোগ করুন:
মান প্রদর্শন * 1
রিয়েল টাইম ঘড়ি * ১
মান প্রদর্শন নাম ধাপে সেট করা উচিত, কিন্তু রিয়েল-টাইম ঘড়ির বৈশিষ্ট্যগুলির জন্য কোন সেটিং নেই। নীচের হিসাবে দেখানো নিয়ন্ত্রণের বিন্যাসকে সামঞ্জস্য করতে V1 ইনপুট পিন হিসাবে চয়ন করুন।
ধাপ 2: FireBeetle Board-ESP32 এ প্রোগ্রাম ডাউনলোড করুন
Esp32 এ সোর্স কোড ডাউনলোড করতে এখানে ক্লিক করুন। উৎস কোড লাইব্রেরি ফাইল এবং 3D মুদ্রণ ফাইল রয়েছে। আপনার লাইব্রেরি ফাইলটি arduino এর lib এ সংরক্ষণ করা উচিত। এবং 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 (& display); সিম্পল টাইমার টাইমার; উইজেটআরটিসি আরটিসি; int পর্দা W = 128; int স্ক্রিন এইচ = 64; int clockCenterX = screenW/2; int clockCenterY = ((screenH-16)/2) +16; // উপরের হলুদ অংশ হল 16 px উচ্চতা int clockRadius = 23; #ডিফাইন ডিভাইস (0x53) // ADXL345 ডিভাইসের ঠিকানা #ডিফাইন TO_READ (6) // বাইটের সংখ্যা আমরা প্রতিবার পড়তে যাচ্ছি (প্রতিটি অক্ষের জন্য দুটি বাইট) বাইট বাফ [TO_READ]; // চারটি str [100] ডিভাইস থেকে পড়া তথ্য সংরক্ষণের জন্য 6 বাইট বাফার; // স্ট্রিং বাফার সিরিয়াল পোর্ট int regAddress = 0x32 এ পাঠানোর আগে ডেটা রূপান্তর করতে; // ADXL345 int xx, yy, zz- এ প্রথম অক্ষ-ত্বরণ-ডেটা নিবন্ধন; // তিন অক্ষ ত্বরণ তথ্য স্ট্যাটিক int currentValue = 0; স্ট্যাটিক স্বাক্ষরবিহীন দীর্ঘ ধাপসম = 0; char auth = "YourAuthToken"; // আপনার ওয়াইফাই শংসাপত্র। // খোলা নেটওয়ার্কের জন্য পাসওয়ার্ড "" সেট করুন। char ssid = "YourNetworkName"; char pass = "YourPassword"; const char running_Logo_bits প্রোগ্রাম = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 Xxx 0xFC 0x00 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, 0x1F, 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, 0x00, 0xE0, 0x05, 0xF8, 0x01, 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 ডিজিট) {যদি (ডিজিট <10) {স্ট্রিং i = '0'+স্ট্রিং (ডিজিট); আমি ফিরে; } অন্য {ফেরত স্ট্রিং (সংখ্যা); }} void clockOverlay (OLEDDisplay * display, OLEDDisplayUiState * state) {if ((hour () == 0) && (minute () == 0) && (second () == 0)) stepsSum = 0; } অকার্যকর analogClockFrame (OLEDDisplay * display, OLEDDisplayUiState * state, 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; display-> drawLine (clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); // ডিসপ্লে মিনিট হাতের কোণ = মিনিট () * 6;; // রেডিয়ান x3 = (clockCenterX + (sin (angle) * (clockRadius - (clockRadius / 4)))); y3 = (clockCenterY - (cos (angle) * (clockRadius - (clockRadius / 4)) display-> drawLine (clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); // ডিসপ্লে ঘন্টা হাতের কোণ = ঘন্টা () * 30 + int ((মিনিট () / 12) * 6); কোণ = (কোণ / 57.29577951), 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 ()); স্ট্রিং টাইমন = স্ট্রিং (ঘন্টা ())+":"+দুই ডিজিট (মিনিট ())+":"+দুই ডিজিট (সেকেন্ড ()); display-> setTextAlignment (TEXT_ALIGN_CENTER); display-> setFont (ArialMT_Plain_24); display-> drawString (clockCenterX + x, 20, timenow); display-> setFont (ArialMT_Plain_16); প্রদর্শন-> ড্র স্ট্রিং (60, 45, তারিখ); } অকার্যকর writeTo (int device, byte address, byte val) {Wire.beginTransmission (device); // ডিভাইস Wire.write (ঠিকানা) এ ট্রান্সমিশন শুরু করুন; // নিবন্ধন ঠিকানা পাঠান Wire.write (val); // Wire.endTransmission () লিখতে মান পাঠান; // এন্ড ট্রান্সমিশন} // ডিভাইসে অ্যাড্রেস রেজিস্টার থেকে শুরু করে নম্ব বাইট পড়ে বাফ অ্যারে ভয়েড রিডফ্রোম থেকে (int device, byte address, int num, byte buff ) {Wire.beginTransmission (device); // ডিভাইস Wire.write (ঠিকানা) এ ট্রান্সমিশন শুরু করুন; // Wire.endTransmission () থেকে পড়ার জন্য ঠিকানা পাঠায়; // শেষ সংক্রমণ Wire.beginTransmission (ডিভাইস); // ডিভাইস Wire.requestFrom (ডিভাইস, সংখ্যা) থেকে ট্রান্সমিশন শুরু করুন; // ডিভাইস int i = 0 থেকে 6 বাইটের অনুরোধ করুন; যখন (Wire.available ()) // ডিভাইস অনুরোধের চেয়ে কম পাঠাতে পারে (অস্বাভাবিক) {buff = Wire.read (); // একটি বাইট পান i ++; } Wire.endTransmission (); // শেষ ট্রান্সমিশন} অকার্যকর চলমান ফ্রেম (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, "আপলোড ডেটা …"); } // এই অ্যারে সব ফ্রেমে ফাংশন পয়েন্টার রাখে // ফ্রেম হল একক দৃশ্য যা ফ্রেম কলব্যাক ফ্রেমে স্লাইড করে = {analogClockFrame, digitalClockFrame, runningFrame, uploadFrame}; // কয়টি ফ্রেম আছে? int frameCount = 4; // ওভারলেগুলি একটি ফ্রেমের উপরে স্থিরভাবে আঁকা হয় যেমন। একটি ঘড়ি OverlayCallback overlays = {clockOverlay}; int overlaysCount = 1; void uploadToBlynk (void) {if (upload == true) {Blynk.virtualWrite (V0, stepsSum); Blynk.virtualWrite (V1, stepsSum); }} void uiInit (void) {ui.setTargetFPS (30); //ui.setActiveSymbol (ActiveSymbol); //ui.setInactiveSymbol (নিষ্ক্রিয় সিম্বল); ui.setIndicatorPosition (TOP); ui.setIndicatorDirection (LEFT_RIGHT); ui.setFrameAnimation (SLIDE_LEFT); ui.setFrames (ফ্রেম, ফ্রেমকাউন্ট); ui.setOverlays (overlays, overlaysCount); ui.disableAutoTransition (); ui.switchToFrame (2); ui.init (); display.flipScreenVertically (); } void adxl345Init (void) {writeTo (DEVICE, 0x2D, 0); writeTo (ডিভাইস, 0x2D, 16); writeTo (ডিভাইস, 0x2D, 8); } void updateAdxl345 (void) {readFrom (DEVICE, regAddress, TO_READ, buff); // ADXL345 xx = (((int) buff [1]) << 8) থেকে এক্সিলারেশন ডেটা পড়ুন | বাফ [0]; yy = (((int) বাফ [3]) << 8) | বাফ [2]; zz = (((int) বাফ [5]) << 8) | বাফ [4]; if (xx 80) {if (xx <currentValue) {stepsSum ++; } currentValue = xx; } sprintf (str, "%d", stepsSum); } int getKeys (অকার্যকর) {যদি (digitalRead (D2) == LOW) {বিলম্ব (5); যদি (digitalRead (D2) == LOW) {while (digitalRead (D2) == LOW); ফিরে POWER_KEY; }} if (digitalRead (D3) == LOW) {বিলম্ব (5); যদি (digitalRead (D3) == LOW) {while (digitalRead (D3) == LOW); MENU_KEY ফেরত দিন; }} if (digitalRead (D4) == LOW) {বিলম্ব (5); যদি (digitalRead (D4) == LOW) {while (digitalRead (D4) == LOW); UPLOAD_KEY ফেরত দিন; }} 0 ফেরত; } void doKeysFunction (void) {স্ট্যাটিক int uiFrameIndex = 2; int কী = getKeys (); যদি (কী == POWER_KEY) {স্ট্যাটিক চার i = 0; যদি (i) {ui.init (); display.flipScreenVertically (); display.displayOn (); } অন্যথায় {display.displayOff (); } আমি = ~ আমি; } if (key == MENU_KEY) {if (upload == false) {uiFrameIndex ++; যদি (uiFrameIndex == 3) uiFrameIndex = 0; ui.switchToFrame (uiFrameIndex); } অন্যথায় {ui.switchToFrame (3); }} if (keys == UPLOAD_KEY) {if (upload == true) {upload = false; ui.switchToFrame (uiFrameIndex); } অন্যথায় {আপলোড = সত্য; ui.switchToFrame (3); }}} অকার্যকর সেটআপ () {পিনমোড (D2, INPUT); পিনমোড (D3, INPUT); পিনমোড (D4, INPUT); Blynk.begin (auth, ssid, pass); rtc.begin (); uiInit (); adxl345Init (); timer.setInterval (30, updateAdxl345); timer.setInterval (100, uploadToBlynk); } অকার্যকর লুপ () {int leftTimeBudget = ui.update (); স্ট্যাটিক int testSum = 0; যদি ((testSum 0) {বিলম্ব (অবশিষ্ট সময় বাজেট);} doKeysFunction (); timer.run ();}
সতর্কতা: আপনার নিজের কাছে ওয়াই-ফাই সেটিং, পাসপোর্ট এবং লেখক পরিবর্তন করা উচিত।
char auth = "YourAuthToken"; // আপনার ওয়াইফাই শংসাপত্র। // খোলা নেটওয়ার্কের জন্য পাসওয়ার্ড "" সেট করুন। char ssid = "YourNetworkName"; char pass = "YourPassword";
ধাপ 3: হার্ডওয়্যার সংযোগ
OLED12864 এবং এক্সিলারেশন মডিউল I2C, বটমস D2, D3, D4 এর সাথে সংযুক্ত করুন। তদুপরি, নীচে দেখানো 3.3V পৌঁছানোর জন্য নীচে 51 কে পুল-আপ প্রতিরোধক যুক্ত করুন।
সতর্কতা: পুল-আপ প্রতিরোধকগুলিকে AREF এর সাথে সংযুক্ত করা ভুল, সঠিকটি 3.3V এর সাথে
হার্ডওয়্যার সোল্ডারিং ইমেজ, নিচে দেখানো হয়েছে:
সোল্ডারের পরে, ক্রাস্টে হার্ডওয়্যার মডিউল একত্রিত করা, নীচে দেখানো হয়েছে:
ব্যাপক প্রভাব চিত্র
প্রস্তাবিত:
স্টেপ কাউন্টার - মাইক্রো: বিট: 12 টি ধাপ (ছবি সহ)
স্টেপ কাউন্টার - মাইক্রো: বিট: এই প্রকল্পটি একটি স্টেপ কাউন্টার হবে। আমরা মাইক্রো: বিট -এ নির্মিত অ্যাকসিলরোমিটার সেন্সর ব্যবহার করব যা আমাদের পদক্ষেপগুলি পরিমাপ করবে। প্রতিবার মাইক্রো: বিট ঝাঁকুনি আমরা গণনায় 2 যোগ করব এবং এটি স্ক্রিনে প্রদর্শন করব
কিভাবে একটি কয়েন কাউন্টার তৈরি করবেন: 3 টি ধাপ
কিভাবে একটি মুদ্রা কাউন্টার তৈরি করতে হয়: এই নির্দেশাবলী বর্ণনা করবে কিভাবে একটি GreenPAK with দিয়ে একটি পিগি ব্যাংক মুদ্রা কাউন্টার তৈরি করতে হয়। এই পিগি ব্যাংক কাউন্টার তিনটি প্রাথমিক উপাদান ব্যবহার করবে: GreenPAK SLG46531V: GreenPAK সেন্সর এবং ডিসপ্লেসের মধ্যে দোভাষী হিসেবে কাজ করে
কিভাবে একটি 85 মিমি প্রজেক্টর লেন্সের জন্য একটি সামঞ্জস্যপূর্ণ হেলিকয়েড অ্যাডাপ্টার তৈরি করবেন, একটি পলিপ্রোপিলিন টিউব সংযোগকারী থেকে: 5 টি ধাপ
একটি পলিপ্রোপিলিন টিউব সংযোগকারী থেকে 85 মিমি প্রজেক্টর লেন্সের জন্য একটি সামঞ্জস্যযোগ্য হেলিকয়েড অ্যাডাপ্টার কীভাবে তৈরি করবেন: আমি সম্প্রতি প্রায় 10 ইউরোর জন্য একটি পুরানো স্লাইড প্রজেক্টর কিনেছি। প্রজেক্টরটি 85 মিমি f/2.8 লেন্স দিয়ে সজ্জিত, সহজেই প্রজেক্টর থেকে বিচ্ছিন্ন (কোন যন্ত্রাংশ বিচ্ছিন্ন করার প্রয়োজন নেই)। তাই আমি আমার পেন্টার জন্য এটিকে 85 মিমি লেন্সে রূপান্তর করার সিদ্ধান্ত নিয়েছি
কিভাবে একটি Arduino দিয়ে একটি Arduino দিয়ে একটি CubeSat তৈরি করবেন: 9 টি ধাপ
কিভাবে একটি Arduino সঙ্গে একটি Arducam সঙ্গে একটি CubeSat নির্মাণ: প্রথম ছবিতে, আমরা একটি Arduino আছে এবং এটি " Arduino Uno। &Quot; 2MP মিনি। "
কিভাবে মাইক্রোবিট দিয়ে একটি কাউন্টার তৈরি করবেন?: 9 টি ধাপ
কিভাবে মাইক্রোবিট দিয়ে কাউন্টার তৈরি করতে হয়? তিনি বচসা করছেন: 1,2,3,4,5,6 …… আপনি নিশ্চয়ই অনুমান করেছেন-তিনি মোট সংখ্যা গণনা করছেন