विषयसूची:

स्टेप काउंटर कैसे बनाएं?: 3 स्टेप्स (चित्रों के साथ)
स्टेप काउंटर कैसे बनाएं?: 3 स्टेप्स (चित्रों के साथ)

वीडियो: स्टेप काउंटर कैसे बनाएं?: 3 स्टेप्स (चित्रों के साथ)

वीडियो: स्टेप काउंटर कैसे बनाएं?: 3 स्टेप्स (चित्रों के साथ)
वीडियो: Counter kaise banaye khud se aur sise kaise lagaye 2024, जून
Anonim
Image
Image
एक ब्लिंक प्रोजेक्ट बनाएं
एक ब्लिंक प्रोजेक्ट बनाएं

मैं कई खेलों में अच्छा प्रदर्शन करता था: चलना, दौड़ना, साइकिल चलाना, बैडमिंटन खेलना आदि।

मुझे बहुत पहले घूमने के लिए सवारी करना पसंद है। अच्छा, मेरे आंशिक पेट को देखो……

खैर, वैसे भी, मैं व्यायाम करने के लिए पुनः आरंभ करने का निर्णय लेता हूं। मुझे कौन से उपकरण तैयार करने चाहिए? खेल सुविधा के अलावा, हाँ! मुझे एक उपकरण चाहिए! मुझे विश्वास है कि इसके साथ, मैं उचित मात्रा में व्यायाम कर सकता हूं। यहाँ उपकरण अस्तित्व में आता है।आइए एक वीडियो के साथ शुरू करते हैं~

उपकरण न केवल वास्तविक समय में कदम (और कैलोरी) रिकॉर्ड कर सकता है, बल्कि समय दिखा सकता है। खास बात यह है कि दिखाने का प्रारूप सूचक ~ बहुत अच्छा है! मुझे ये वाकई बहुत पसंद है!

आप अपने रिकॉर्ड इंटरनेट पर अपलोड कर सकते हैं

केवल एक क्लिक से। सभी रिकॉर्ड Blynk (पहले पेश किया गया एक स्मार्ट-फोन सॉफ़्टवेयर) द्वारा प्रदर्शित किया जा सकता है। पहनने योग्य स्मार्ट घड़ी के समान, उपकरण को समय पर लाइन मिलती है (इसलिए आपको शक्ति और समय अद्यतन करने से डरने की आवश्यकता नहीं है)।

मीड में हार्डवेयर:

फायरबीटल बोर्ड-ESP32

फायरबीटल कवर्स-प्रोटो बोर्ड

OLED12864 डिस्प्ले स्क्रीन

त्वरण मॉड्यूल

3.7V बैटरी (ऑनलाइन खरीदी गई, वॉल्यूम लगभग 600mAH) है)

3 बोतल (ऑनलाइन खरीदा)

Blybk द्वारा इस प्रोजेक्ट को बनाना बहुत सुविधाजनक है।

चरण 1: एक ब्लिंक प्रोजेक्ट बनाएं

दो नियंत्रण जोड़ें:

मूल्य प्रदर्शन * 1

वास्तविक समय की घड़ी * १

वैल्यू डिस्प्ले का नाम चरणों पर सेट किया जाना चाहिए, लेकिन रीयल-टाइम घड़ी के गुणों के लिए कोई सेटिंग नहीं होनी चाहिए। नीचे दिखाए गए नियंत्रणों के लेआउट को समायोजित करने के लिए इनपुट पिन के रूप में V1 चुनें।

चरण 2: फायरबीटल बोर्ड-ESP32 में प्रोग्राम डाउनलोड करें

esp32 पर सोर्स कोड डाउनलोड करने के लिए यहां क्लिक करें। स्रोत कोड में लाइब्रेरी फ़ाइलें और 3D प्रिंटिंग फ़ाइलें होती हैं। आपको लाइब्रेरी फ़ाइल को arduino के काम में सहेजना चाहिए। और 3D फ़ाइलें सीधे क्रस्ट प्रिंट कर सकती हैं।

नीचे मुख्य कार्यक्रम है

#include #include // केवल Arduino 1.6.5 और पहले के लिए आवश्यक #include "SSD1306.h" // उपनाम `#include "SSD1306Wire.h"` #include "OLEDDisplayUi.h" #include "images.h" # शामिल करें #शामिल करें #शामिल करें #शामिल करें #शामिल करें #पावर_की 1 परिभाषित करें #MENU_KEY 2 परिभाषित करें #UPLOAD_KEY 3 परिभाषित करें बूलियन अपलोड = झूठा; SSD1306 डिस्प्ले (0x3c, 18, 0); OLEDDisplayUi ui (और प्रदर्शन); सरल टाइमर; विजेटआरटीसी आरटीसी; इंट स्क्रीनडब्ल्यू = 128; इंट स्क्रीनएच = ६४; इंट क्लॉकसेंटरएक्स = स्क्रीनडब्ल्यू/2; इंट क्लॉकसेंटरवाई = ((स्क्रीनएच-16)/2)+16; // शीर्ष पीला भाग 16 px ऊंचाई int clockRadius = 23 है; #define DEVICE (0x53) //ADXL345 डिवाइस एड्रेस #define TO_READ (6) // बाइट्स की संख्या जो हम हर बार पढ़ने जा रहे हैं (प्रत्येक अक्ष के लिए दो बाइट्स) बाइट बफ [TO_READ]; डिवाइस से पढ़े गए डेटा को बचाने के लिए ///6 बाइट्स बफर चार स्ट्र [१००]; // स्ट्रिंग बफर डेटा को सीरियल पोर्ट पर भेजने से पहले बदलने के लिए int regAddress = 0x32; // ADXL345 int xx, yy, zz पर पहला अक्ष-त्वरण-डेटा रजिस्टर; // तीन अक्ष त्वरण डेटा स्थिर int currentValue = 0; स्थिर अहस्ताक्षरित लंबे चरण योग = 0; चार प्रमाणीकरण = "YourAuthToken"; // आपका वाईफाई क्रेडेंशियल। // खुले नेटवर्क के लिए पासवर्ड को "" पर सेट करें। चार एसएसआईडी = "आपका नेटवर्कनाम"; चार पास = "आपका पासवर्ड"; कॉन्स्ट चार रनिंग_लोगो_बिट्स 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, 0x, 0xFC, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x60, 0xF1, 0x07, 0x00, 0x20, 0 0xF8, 0x17, 0x00, 0x00, 0xC0, 0xF8, 0x0F, 0x00, 0x00, 0xE0, 0xFB, 0x17, 0x00, 0x00, 0xC0, 0xFF, 0x13, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00 0xFE, 0x03, 0x00, 0x00, 0x00, 0xF9, 0x03, 0x00, 0x00, 0x00, 0xFA, 0x03, 0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0x00, 0xF0, 0x07, 0x00, 0x00, 0, 0xF4, 0x07, 0x00, 0x00, 0x00, 0xF4, 0x0F, 0x00, 0x00, 0x00, 0xF9, 0x0F, 0x00, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x80, 0xFE, 0x1F, 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, 0x05, 0x7C, 0x00, 0x00, 0xE0, 0xE0 0x00, 0xC0, 0x01, 0xF0, 0x03, 0x00, 0xC0, 0x03, 0xE8, 0x07, 0x00, 0xC0, 0x03, 0x88, 0x6F, 0x00, 0x80, 0x03, 0x40, 0x1E, 0x00, 0xA0, 0x40, 0xA0, 0x00, 0x80, 0x03, 0x00, 0xF8, 0x01, 0x00, 0x07, 0x00, 0xF4, 0x00, 0x00, 0x07, 0x00, 0xE8, 0x00, 0x80, 0x0F, 0x00, 0xE8, 0x00, 0x90, 0x00, 0x0F 0x00, 0xE8, 0x0F, 0x00, 0xE8, 0x00, 0xF0, 0x09, 0x00, 0x60, 0x01, 0xF0, 0x04, 0x00, 0x00, 0x00, }; // डिजिटल क्लॉक डिस्प्ले के लिए यूटिलिटी फंक्शन: 0 स्ट्रिंग टूडिजिट्स (इंट डिजिट्स) {अगर (डिजिट्स <10) {स्ट्रिंग i = '0' + स्ट्रिंग (डिजिट्स); वापसी मैं; } और {रिटर्न स्ट्रिंग (अंक); } } शून्य घड़ी ओवरले (OLEDDisplay * डिस्प्ले, OLEDDisplayUiState* स्थिति) { अगर ((घंटा () == 0) && (मिनट () == 0) && (दूसरा () == 0)) चरण योग = 0; } शून्य एनालॉगक्लॉकफ़्रेम (OLEDDisplay * डिस्प्ले, OLEDDisplayUiState* स्थिति, int16_t x, int16_t y) {डिस्प्ले-> ड्रा सर्कल (क्लॉकसेंटरएक्स + एक्स, क्लॉकसेंटरवाई + वाई, 2); // घंटे के लिए टिक (int z = 0; z ड्रॉलाइन (x2 + x, y2 + y, x3 + x, y3 + y); } // सेकेंड हैंड फ्लोट एंगल = सेकेंड () * 6 प्रदर्शित करें; कोण = (कोण / 57.29577951); // डिग्री को रेडियंस में बदलें int x3 = (घड़ीCenterX + (पाप(कोण) * (घड़ीत्रिज्या - (घड़ी रेडियस / 5)))); int y3 = (घड़ी केंद्र - (cos (कोण)) * (घड़ी रेडियस - (क्लॉकरेडियस / 5)))); डिस्प्ले-> ड्रालाइन (क्लॉकसेंटरएक्स + एक्स, क्लॉकसेंटरवाई + वाई, एक्स 3 + एक्स, वाई 3 + वाई); // मिनट हैंड एंगल = मिनट () * 6 प्रदर्शित करें; कोण = (कोण / 57.29577951);//डिग्री को रेडियन में बदलें x3 = (घड़ीCenterX + (पाप(कोण) * (घड़ीत्रिज्या - (घड़ीत्रिज्या / 4))); y3 = (घड़ी केंद्र - (cos (कोण)) * (घड़ीत्रिज्या - (घड़ी रेडियस / 4)))); डिस्प्ले-> ड्रालाइन (क्लॉकसेंटरएक्स + एक्स, क्लॉकसेंटर वाई + वाई, एक्स 3 + एक्स, वाई 3 + वाई); // डिस्प्ले ऑवर हैंड एंगल = घंटा () * 30 + इंट ((मिनट () / 12) * 6); कोण = (कोण / 57.29577951); // डिग्री को रेडियन में बदलें x3 = (घड़ीCenterX + (पाप(कोण) * (घड़ीत्रिज्या - (घड़ीत्रिज्या / 2)))); y3 = (घड़ी केंद्र - (cos (कोण)) * (घड़ीत्रिज्या - (घड़ीरा डायस / 2)))); डिस्प्ले-> ड्रालाइन (घड़ी केंद्र एक्स + एक्स, घड़ी केंद्र वाई + वाई, एक्स 3 + एक्स, वाई 3 + वाई); } शून्य digitalClockFrame(OLEDDisplay *display, OLEDDisplayUiState* स्थिति, int16_t x, int16_t y) {स्ट्रिंग दिनांक = स्ट्रिंग (वर्ष ())+"/"+दो अंक (माह ())+"/"+दो अंक (दिन ()); स्ट्रिंग टाइमनो = स्ट्रिंग (घंटा ()) + ":" + दो अंक (मिनट ()) + ":" + दो अंक (दूसरा ()); डिस्प्ले-> सेटटेक्स्ट एलाइनमेंट (TEXT_ALIGN_CENTER); डिस्प्ले-> सेटफॉन्ट (एरियलएमटी_प्लेन_24); डिस्प्ले-> ड्रॉस्ट्रिंग (क्लॉकसेंटरएक्स + एक्स, 20, टाइमनो); डिस्प्ले-> सेटफॉन्ट (एरियलएमटी_प्लेन_16); डिस्प्ले-> ड्रॉस्ट्रिंग (60, 45, तारीख); } शून्य लिखना (इंट डिवाइस, बाइट पता, बाइट वैल) {वायर.बेगिनट्रांसमिशन (डिवाइस); // डिवाइस के लिए प्रसारण शुरू करें Wire.write (पता); // रजिस्टर पता भेजें Wire.write (वैल); // Wire.endTransmission () लिखने के लिए मूल्य भेजें; // एंड ट्रांसमिशन} // डिवाइस पर एड्रेस रजिस्टर से शुरू होने वाले नंबर बाइट्स को बफ एरे में पढ़ता है शून्य रीडफ्रॉम (इंट डिवाइस, बाइट एड्रेस, इंट नंबर, बाइट बफ ) {वायर.बेगिनट्रांसमिशन (डिवाइस); // डिवाइस के लिए प्रसारण शुरू करें Wire.write (पता); // Wire.endTransmission () से पढ़ने के लिए पता भेजता है; // एंड ट्रांसमिशन वायर.बेगिनट्रांसमिशन (डिवाइस); // डिवाइस के लिए प्रसारण शुरू करें Wire.requestFrom (डिवाइस, संख्या); // डिवाइस से 6 बाइट्स का अनुरोध करें int i = 0; जबकि (वायर.उपलब्ध ()) // डिवाइस अनुरोध से कम भेज सकता है (असामान्य) {बफ़ = वायर.रीड (); // एक बाइट i++ प्राप्त करें; } वायर.एंडट्रांसमिशन (); // एंड ट्रांसमिशन} शून्य रनिंगफ्रेम (OLEDDisplay * डिस्प्ले, OLEDDisplayUiState * स्थिति, int16_t x, int16_t y) {फ्लोट calValue = stepsSum * 0.4487; डिस्प्ले-> सेटटेक्स्ट एलाइनमेंट (TEXT_ALIGN_CENTER); डिस्प्ले-> सेटफॉन्ट (एरियलएमटी_प्लेन_24); डिस्प्ले-> ड्रॉस्ट्रिंग (क्लॉकसेंटरएक्स, क्लॉकसेंटरवाई, स्ट्र); स्प्रिंटफ (str, "%.2fcal", calValue); डिस्प्ले-> सेटटेक्स्ट एलाइनमेंट (TEXT_ALIGN_CENTER); डिस्प्ले-> सेटफॉन्ट (एरियलएमटी_प्लेन_10); डिस्प्ले-> ड्रॉस्ट्रिंग (100, 20, स्ट्र); डिस्प्ले-> ड्राएक्सबीएम (10, 14, 34, 50, रनिंग_लोगो_बिट्स); } शून्य अपलोडफ़्रेम (OLEDDisplay * डिस्प्ले, OLEDDisplayUiState* स्थिति, int16_t x, int16_t y) {डिस्प्ले-> सेटफ़ॉन्ट (एरियलएमटी_प्लेन_16); डिस्प्ले-> ड्रॉस्ट्रिंग (60, 45, "डेटा अपलोड करें …"); } // यह सरणी सभी फ़्रेमों के लिए फ़ंक्शन पॉइंटर्स रखती है // फ़्रेम एकल दृश्य हैं जो फ़्रेमकॉलबैक फ़्रेम में स्लाइड करते हैं = {एनालॉगक्लॉकफ़्रेम, डिजिटलक्लॉकफ़्रेम, रनिंगफ़्रेम, अपलोडफ़्रेम}; // कितने फ्रेम हैं? इंट फ्रेमकाउंट = 4; // ओवरले एक फ्रेम के शीर्ष पर स्थिर रूप से खींचे जाते हैं जैसे। एक घड़ी ओवरले कॉलबैक ओवरले = {घड़ी ओवरले}; इंट ओवरलेकाउंट = 1; शून्य अपलोड टॉब्लिंक (शून्य) {अगर (अपलोड == सत्य) {Blynk.virtualWrite (V0, stepsSum); Blynk.virtualWrite(V1, stepsSum); } } शून्य uiInit(void){ ui.setTargetFPS(30); //ui.setActiveSymbol(activeSymbol); //ui.setInactiveSymbol(inactiveSymbol); ui.setIndicatorPosition (टॉप); ui.setIndicatorDirection(LEFT_RIGHT); ui.setFrameAnimation (SLIDE_LEFT); ui.setFrames (फ्रेम, फ्रेमकाउंट); ui.setOverlays (ओवरले, ओवरलेकाउंट); ui.disableAutoTransition (); ui.switchToFrame(2); ui.init (); डिस्प्ले.फ्लिपस्क्रीन वर्टिकली (); } शून्य adxl345Init (शून्य) {लिखने के लिए (डिवाइस, 0x2D, 0); राइट टू (डिवाइस, 0x2D, 16); राइट टू (डिवाइस, 0x2D, 8); } शून्य अद्यतनAdxl345(शून्य){ readFrom(DEVICE, regAddress, TO_READ, buff); // ADXL345 xx = (((int) buff[1]) << 8) से त्वरण डेटा पढ़ें | शौकीन [0]; yy = (((इंट) शौकीन [3])<< 8) | शौकीन[2]; zz = (((इंट) बफ [5]) << 8) | शौकीन [4]; अगर (xx 80) {अगर (xx <currentValue) { stepsSum++; } करंटवैल्यू = xx; } sprintf(str, "%d", stepsSum); } int getKeys(void){ if(digitalRead(D2) == LOW){देरी(5); अगर (डिजिटलरेड (डी 2) == कम) {जबकि (डिजिटल रीड (डी 2) == कम); POWER_KEY लौटाएं; } } अगर (डिजिटल रीड (डी 3) == कम) {देरी (5); अगर (डिजिटलरेड (डी 3) == कम) {जबकि (डिजिटल रीड (डी 3) == कम); वापसी MENU_KEY; } } अगर (डिजिटल रीड (डी 4) == कम) {देरी (5); अगर (डिजिटलरेड (डी 4) == कम) {जबकि (डिजिटल रीड (डी 4) == कम); UPLOAD_KEY लौटाएं; } } वापसी 0; } शून्य doKeysFunction (शून्य) {स्थिर int uiFrameIndex = 2; int कुंजियाँ = getKeys (); अगर (कुंजी == POWER_KEY) {स्थिर चार i = 0; अगर (i) { ui.init (); डिस्प्ले.फ्लिपस्क्रीन वर्टिकली (); डिस्प्ले.डिस्प्लेऑन (); } और {डिस्प्ले.डिस्प्लेऑफ़ (); } मैं = ~ मैं; } अगर (कुंजी == MENU_KEY) { अगर (अपलोड == गलत) { uiFrameIndex++; अगर (uiFrameIndex == 3) uiFrameIndex = 0; ui.switchToFrame (uiFrameIndex); }else{ ui.switchToFrame(3); } } अगर (कुंजी == UPLOAD_KEY) { अगर (अपलोड == सत्य) {अपलोड = गलत; ui.switchToFrame(uiFrameIndex); } और {अपलोड = सच; ui.switchToFrame(3); } } } शून्य सेटअप () {पिनमोड (D2, INPUT); पिनमोड (डी 3, इनपुट); पिनमोड (डी 4, इनपुट); Blynk.begin(auth, ssid, pass); आरटीसी.बेगिन (); यूआईइनिट (); adxl345Init (); timer.setInterval(30, updateAdxl345); timer.setInterval(100, uploadToBlynk); } शून्य लूप () {इंट शेषटाइमबजट = ui.update (); स्थिर इंट टेस्टसम = 0; अगर ((टेस्टसम 0) {देरी (शेष टाइमबजट); } doKeysFunction (); टाइमर.रन (); }

सावधानी: आपको अपने लिए वाई-फाई सेटिंग, पासपोर्ट और AUTHTOKENS को संशोधित करना चाहिए।

चार प्रमाणीकरण = "YourAuthToken"; // आपका वाईफाई क्रेडेंशियल। // खुले नेटवर्क के लिए पासवर्ड को "" पर सेट करें। चार एसएसआईडी = "आपका नेटवर्कनाम"; चार पास = "आपका पासवर्ड";

चरण 3: हार्डवेयर कनेक्शन

हार्डवेयर कनेक्शन
हार्डवेयर कनेक्शन
हार्डवेयर कनेक्शन
हार्डवेयर कनेक्शन
हार्डवेयर कनेक्शन
हार्डवेयर कनेक्शन

OLED12864 और एक्सेलेरेशन मॉड्यूल को I2C से, बॉटम्स को D2, D3, D4 से कनेक्ट करें। इसके अलावा, नीचे दिखाए गए अनुसार 3.3V तक पहुंचने के लिए 51k पुल-अप प्रतिरोधों को बॉटम्स में जोड़ें।

सावधानी: पुल-अप रेसिस्टर्स को AREF से कनेक्ट करना गलत है, सही वाला 3.3V है

हार्डवेयर सोल्डरिंग छवि, जैसा कि नीचे दिखाया गया है:

सोल्डर के बाद, हार्डवेयर मॉड्यूल को क्रस्ट में असेंबल करना, जैसा कि नीचे दिखाया गया है:

व्यापक प्रभाव छवि~

सिफारिश की: