विषयसूची:

रीयलटाइम MPU-6050/A0 Arduino और Android के साथ डेटा लॉगिंग: 7 चरण (चित्रों के साथ)
रीयलटाइम MPU-6050/A0 Arduino और Android के साथ डेटा लॉगिंग: 7 चरण (चित्रों के साथ)

वीडियो: रीयलटाइम MPU-6050/A0 Arduino और Android के साथ डेटा लॉगिंग: 7 चरण (चित्रों के साथ)

वीडियो: रीयलटाइम MPU-6050/A0 Arduino और Android के साथ डेटा लॉगिंग: 7 चरण (चित्रों के साथ)
वीडियो: GPU-Accelerated Arduino Data Logging and Telemetry 2024, जुलाई
Anonim
रीयलटाइम MPU-6050/A0 Arduino और Android के साथ डेटा लॉगिंग
रीयलटाइम MPU-6050/A0 Arduino और Android के साथ डेटा लॉगिंग

मुझे मशीन सीखने के लिए Arduino का उपयोग करने में दिलचस्पी है। पहले चरण के रूप में, मैं एक एंड्रॉइड डिवाइस के साथ एक रीयलटाइम (या इसके बहुत करीब) डेटा डिस्प्ले और लॉगर बनाना चाहता हूं। मैं MPU-6050 से एक्सेलेरोमीटर डेटा कैप्चर करना चाहता हूं इसलिए मैंने HC-05 को 115200 बॉड पर उपयोग करने के लिए बिल्ड डिज़ाइन किया। इस कॉन्फ़िगरेशन के साथ डेटा के 4 चैनल प्रति सेकंड 250 नमूनों पर प्रेषित किए जा सकते हैं।

बिल्ड में कुछ चरण होते हैं:

  • ढाल या ब्रेडबोर्ड बनाएं
  • Arduino प्रोग्राम करें
  • Google Play से Android ऐप लोड करें या GitHub को शाखा दें और इसे स्वयं संकलित करें
  • MPU-6050 को कुछ दिलचस्प से कनेक्ट करें जो कंपन करता है (मैंने R/C कार का उपयोग किया है)
  • Arduino से कनेक्ट करने के लिए Android डिवाइस का उपयोग करें
  • डेटा प्लॉट करें, रुचि होने पर सहेजें
  • आगे उपयोग के लिए पायथन (या अन्य प्लेटफॉर्म) में आयात करें

आएँ शुरू करें!

चरण 1: शील्ड/ब्रेडबोर्ड बनाएं

शील्ड/ब्रेडबोर्ड बनाएं
शील्ड/ब्रेडबोर्ड बनाएं
शील्ड/ब्रेडबोर्ड बनाएं
शील्ड/ब्रेडबोर्ड बनाएं

यह Arduino, HC-05 और MPU-6050 के लिए वायरिंग आरेख है। MPU-6050 के अलावा मेरे पास एडीसी काम कर रहा है यह दिखाने के लिए एक प्रकाश संवेदक के लिए एनालॉग इनपुट A0 वायर्ड है। किसी भी 0-5 वोल्ट के सिग्नल को A0 ADC में लाया जा सकता है। ये वे घटक हैं जिनका उपयोग मैंने निर्माण के लिए किया था:

  • Arduino Uno
  • HC-05 (HC-06 को भी काम करना चाहिए, लेकिन मेरा निर्माण HC-05 के साथ था)
  • एमपीयू-6050
  • स्पार्कफन फोटोरेसिस्टर
  • 10kOhm रोकनेवाला (भूरा-काला-नारंगी)

अधिकांश HC-05 ब्लूटूथ मॉड्यूल 9600 बॉड के लिए डिफ़ॉल्ट हैं। डेटा को सफलतापूर्वक प्रसारित करने के लिए आपको इसे 115200 बॉड दर के लिए पुन: प्रोग्राम करना होगा। एक अच्छा HC-05/HC-06 AT कमांड इंस्ट्रक्शनल है जो बताता है कि यह कैसे करना है।

चरण 2: Arduino को प्रोग्राम करें

Arduino प्रोग्राम करें
Arduino प्रोग्राम करें
Arduino प्रोग्राम करें
Arduino प्रोग्राम करें

मैंने Arduino को प्रोग्राम करने के लिए Arduino IDE रिलीज़ 1.6.7 का उपयोग किया। कोड को इस चरण के लिंक से या GitHub रेपो से डाउनलोड किया जा सकता है। मैंने तीन संस्करण शामिल किए हैं: Firmware125.ino 125 हर्ट्ज़ संस्करण है, Firmware250.ino 250 हर्ट्ज़ संस्करण है, और Firmware500.ino 500 हर्ट्ज़ संस्करण है। Arduino को 500 हर्ट्ज़ पर साइकिल चलाने के लिए, A0 ADC एकत्र नहीं किया जाता है।

फर्मवेयर में पिन 9 पर एक क्लॉक आउट शामिल है जिसका उपयोग मैं समय की जांच करने के लिए करता था। ट्रेस से पता चलता है कि चक्र का समय 4 एमएस (1/250 हर्ट्ज के बराबर) है। मैंने पाया है कि अगर सीरियल लिंक की समस्या है तो समय एक समान नहीं होगा।

Arduino कोड प्रत्येक पैकेट में एक चैनल नंबर जोड़ने के लिए बिट मास्किंग का उपयोग करता है क्योंकि नमूने कभी-कभी ब्लूटूथ पर गिर जाते हैं। मैं चैनल नंबर को स्टोर करने के लिए तीन सबसे महत्वपूर्ण बिट्स का उपयोग करता हूं। हस्ताक्षरित पूर्णांकों के लिए सबसे महत्वपूर्ण बिट (MSB) चिह्न के लिए आरक्षित है। चूंकि मैं पूर्णांक के संकेत के बजाय अपने पते के लिए MSB का उपयोग करना चाहता हूं, इसलिए मुझे सभी हस्ताक्षरित एक्सेलेरोमीटर मानों को अहस्ताक्षरित पूर्णांक में बदलना होगा। मैं इसे प्रत्येक मान में 32768 जोड़कर करता हूं (एमपीयू एक्सेलेरोमीटर एडीसी की संख्या +32768 से -32768 है) और अहस्ताक्षरित पूर्णांक के रूप में डाली जाती है:

(अहस्ताक्षरित इंट) ((लंबी) iAccelData+३२७६७);

चैनल नंबर प्रत्येक एक्सेलेरोमीटर और A0 पोर्ट के लिए समान हैं ताकि चैनल नंबर क्रम से बाहर होने पर गिराए गए पैकेट का पता लगाया जा सके। Arduino पर ब्लूटूथ से आने वाले पैकेट के लिए, बाइनरी पैटर्न है (संकेत बिट-वार शिफ्टिंग हैं):

(xacc 3 एड्रेस बिट्स = 0x00, 13 बिट अहस्ताक्षरित) (yacc 3 एड्रेस बिट्स = 0x01, 13 बिट अहस्ताक्षरित) (zacc 3 एड्रेस बिट्स = 0x02, 13 बिट अहस्ताक्षरित) (3 एड्रेस बिट्स = 0x03, iadc13bit अहस्ताक्षरित)

(xacc 3 एड्रेस बिट्स = 0x00, 13 बिट अहस्ताक्षरित) (yacc 3 एड्रेस बिट्स = 0x01, 13 बिट अहस्ताक्षरित) (zacc 3 एड्रेस बिट्स = 0x02, 13 बिट अहस्ताक्षरित) (3 एड्रेस बिट्स = 0x03, iadc13bit अहस्ताक्षरित) (xacc 3 एड्रेस बिट्स = 0x00, 13 बिट अहस्ताक्षरित) (yacc 3 पता बिट्स = 0x01, 13 बिट अहस्ताक्षरित) (zacc 3 पता बिट्स = 0x02, 13 बिट अहस्ताक्षरित) (3 पता बिट्स = 0x03, iadc13bit अहस्ताक्षरित) …

यदि ब्लूटूथ डेटा को पढ़ने के लिए एक्सेल प्लॉट एंड्रॉइड ऐप के अलावा कुछ और उपयोग कर रहे हैं, तो यहां पता निकालने के चरण हैं (मैं गिटहब रेपो से एक्सेल प्लॉट ब्लूटूथ.जावा फ़ाइल से चर नामों का उपयोग कर रहा हूं):

- 16 अहस्ताक्षरित int. में पढ़ें

- हाई बाइट निकालें और इसे btHigh में सेव करें।

- लो बाइट निकालें और इसे btLow में सेव करें।

- btHigh का उपयोग करके पता प्राप्त करें: (bthigh >> 5) और 0x07। यह स्टेटमेंट तीन एड्रेस बिट्स को सबसे कम तीन रजिस्टरों में ले जाने के लिए btHigh 5 बिट्स को दाईं ओर शिफ्ट करता है। & चिन्ह एक तार्किक है और जो बिट्स 4 और उच्चतर को शून्य और अंतिम तीन बिट्स को एड्रेस बिट्स से मेल खाने के लिए मजबूर करता है। इस कथन का परिणाम आपका पता है।

यदि आप Accel Plot का उपयोग कर रहे हैं तो आपको पता निकालने के बारे में चिंता करने की आवश्यकता नहीं है।

चरण 3: Android ऐप को Google Play से लोड करें या GitHub को शाखा दें

Google Play से Android ऐप लोड करें या GitHub को ब्रांच करें
Google Play से Android ऐप लोड करें या GitHub को ब्रांच करें

अपने डिवाइस पर Android ऐप लोड करने के लिए आपके पास कुछ विकल्प हैं। यदि आप कोडिंग से बचना चाहते हैं, तो आप "एक्सेल प्लॉट" की खोज कर सकते हैं और ऐप को Google Play store में आना चाहिए। स्थापना के लिए स्टोर निर्देशों का पालन करें।

इस निर्देश के साथ मेरी इच्छा वास्तव में दूसरों को परियोजनाओं के निर्माण के लिए प्रोत्साहित करने की है इसलिए मैंने एक GitHub रेपो में कोड भी प्रकाशित किया है। जैसा कि आप फिट देखते हैं, आपको इसे ब्रांच करने, इसे बनाने और इसे संशोधित करने में सक्षम होना चाहिए। मैंने एमआईटी लाइसेंस के तहत कोड प्रकाशित किया है इसलिए मज़े करें!

चरण 4: कुछ दिलचस्प करने के लिए Arduino से कनेक्ट करें (मैंने एक आर / सी कार का इस्तेमाल किया)

कुछ दिलचस्प करने के लिए Arduino से कनेक्ट करें (मैंने एक R/C कार का उपयोग किया है)
कुछ दिलचस्प करने के लिए Arduino से कनेक्ट करें (मैंने एक R/C कार का उपयोग किया है)

मैं अंततः सड़क की सतह का पता लगाने के लिए डिवाइस का उपयोग करना चाहता हूं इसलिए मैंने सोचा कि एक छोटी रिमोट नियंत्रित (आर/सी) कार उपयुक्त होगी। मुझे लगता है कि यह अगले चरण में मदद करता है यदि त्वरण किसी ऐसी चीज पर हो सकता है जो चलती या कंपन करती है।

चरण 5: Arduino से कनेक्ट करने के लिए Android डिवाइस का उपयोग करें।

Arduino से कनेक्ट करने के लिए Android डिवाइस का उपयोग करें।
Arduino से कनेक्ट करने के लिए Android डिवाइस का उपयोग करें।
Arduino से कनेक्ट करने के लिए Android डिवाइस का उपयोग करें।
Arduino से कनेक्ट करने के लिए Android डिवाइस का उपयोग करें।
Arduino से कनेक्ट करने के लिए Android डिवाइस का उपयोग करें।
Arduino से कनेक्ट करने के लिए Android डिवाइस का उपयोग करें।

यदि आपने पहले से ऐसा नहीं किया है, तो आपको पहले HC-05 को अपने Android डिवाइस से पेयर करना होगा। मेरा मानना है कि ज्यादातर डिवाइस पर आप सेटिंग में जाकर ऐसा कर सकते हैं। अधिकांश HC-05 उपकरणों के लिए डिफ़ॉल्ट पिन 1234 या 1111 होगा।

Android डिवाइस पर AccelPlot ऐप खोलें। जब ऐप खुलता है, और इससे पहले कि आप HC-05 से कनेक्ट हों, आप नमूना दर (यह Arduino कोड में सेट है), एक्सेलेरोमीटर स्केल (Arduino कोड में भी सेट) और सहेजे जाने वाले नमूनों की संख्या बदल सकते हैं।

एक बार ये सेटिंग्स हो जाने के बाद "कनेक्ट" बटन पर क्लिक करें। इसे ब्लूटूथ डिवाइस को लाना चाहिए और आपका डिवाइस सूचीबद्ध होना चाहिए। इसे चुनें और एक बार कोड कनेक्शन स्थापित करने के बाद आपको "कनेक्टेड" टोस्ट पॉप अप दिखाई देगा।

एक्सेल प्लॉट पर लौटने के लिए बैक एरो बटन का उपयोग करें। HC-05 डिवाइस से डेटा प्रदर्शित करने के लिए "स्टार्ट स्ट्रीम" बटन पर टैप करें। आपको डेटा को बचाने या ऑडियो जैक के माध्यम से आवृत्ति मॉड्यूलेटेड सामग्री को चलाने के लिए उपलब्ध बटन भी होने चाहिए।

चरण 6: डेटा प्राप्त करें और प्लॉट करें

Image
Image
आगे उपयोग के लिए पायथन (या अन्य प्लेटफॉर्म) में आयात करें
आगे उपयोग के लिए पायथन (या अन्य प्लेटफॉर्म) में आयात करें

"स्ट्रीम शुरू करें" बटन सक्षम होना चाहिए। स्क्रीन पर डेटा स्ट्रीमिंग शुरू करने के लिए इसे टैप करें।

"डेटा सहेजें" बटन भी सक्षम हो जाएगा, डेटा को स्टोर करने के लिए इसे टैप करें।

एक्सेल प्लॉट में ऑडियो चैनलों पर मॉड्यूलेटेड सिग्नल को आउटपुट करने का विकल्प भी शामिल है। एक्सेल प्लॉट ऐप में 2 चैनल एंड्रॉइड डिवाइस पर ऑडियो आउट जैक के बाएं और दाएं चैनल को संदर्भित करते हैं। यह उपयोगी है यदि आप MPU-6050 डेटा को एक अलग डेटा लॉगिंग सिस्टम में लाना चाहते हैं, जैसे कि एक राष्ट्रीय उपकरण।

वीडियो एक आर/सी कार पर डेटा एकत्र करने वाले सिस्टम का एक उदाहरण दिखाता है।

चरण 7: आगे उपयोग के लिए पायथन (या अन्य प्लेटफ़ॉर्म) में आयात करें

आगे उपयोग के लिए पायथन (या अन्य प्लेटफॉर्म) में आयात करें
आगे उपयोग के लिए पायथन (या अन्य प्लेटफॉर्म) में आयात करें

फ़ाइलें Android डिवाइस में सहेजी जाती हैं। फ़ाइलें Android API 18 और पुराने के लिए "AccelPlot" निर्देशिका के अंतर्गत संग्रहीत की जाएंगी। कोड.dat फ़ाइलों को API 19 (किटकैट 4.4) और उच्चतर के लिए "\Tablet\Documents\AccelPlot" फ़ोल्डर में रखता है। USB के माध्यम से कनेक्ट होने पर फ़ाइलों को दिखाने वाले कुछ Android उपकरणों में मुझे परेशानी हुई है। कुछ मामलों में मुझे उन्हें दिखाने के लिए एंड्रॉइड डिवाइस को रीबूट करना पड़ा है। सुनिश्चित नहीं है कि ऐसा क्यों है, लेकिन चार फाइलें होनी चाहिए, प्रत्येक चैनल के लिए एक। अतिरिक्त कार्य के लिए उन्हें स्थानीय निर्देशिका में कॉपी किया जा सकता है।

मैंने फ़ाइलों को खोलने और डेटा प्रदर्शित करने के लिए एनाकोंडा/पायथन 2.7 का उपयोग किया। "ExploratoryAnalysis.ipynb" फ़ाइल में IPython नोटबुक फ़ाइल है जो सभी डेटा फ़ाइलें खोलेगी और नमूना डेटा प्लॉट करेगी। नमूना फ़ाइलें GitHub रेपो में शामिल हैं। डेटा को बिग-एंडियन 4 बाइट फ्लोट्स ('>f') के रूप में सहेजा जाता है, इसलिए कोई भी विश्लेषण प्रोग्राम उन्हें खोलने में सक्षम होना चाहिए।

मैंने "ReadDataFiles.ipynb" नामक एक सरल फ़ाइल भी शामिल की है जो दिखाती है कि नाम से एक फ़ाइल में कैसे पढ़ा जाए।

सिफारिश की: