- सामग्री की आवश्यकता:
- सर्किट आरेख:
- अपना सेटअप पॉवरिंग:
- अपने Arduino प्रोग्रामिंग:
- प्रसंस्करण का उपयोग करके Android एप्लिकेशन तैयार करना:
- Arduino इनक्लिनोमीटर का कार्य:
MPU6050 एक आईसी है 3- अक्ष accelerometer और एक 3 अक्ष जाइरोस्कोप संयुक्त एक इकाई में। यह एक जटिल कार्य करने के लिए एक तापमान संवेदक और एक डीसीएम भी रखता है। MPU6050 का उपयोग आमतौर पर ड्रोन और अन्य रिमोट रोबोट जैसे सेल्फ-बैलेंसिंग रोबोट के निर्माण में किया जाता है। इस परियोजना में हम सीखेंगे कि MPU6050 का उपयोग कैसे किया जाता है एक इनक्लिनोमीटर या स्पिरिट लेवलर बनाया जाता है । जैसा कि हम जानते हैं कि एक इनक्लिनोमीटर का उपयोग यह जांचने के लिए किया जाता है कि क्या सतह पूरी तरह से समतल है या नहीं, वे या तो स्प्रिट बबल वाले या डिजिटल मीटर के रूप में उपलब्ध हैं। इस परियोजना में, हम एक डिजिटल इनक्लिनोमीटर का निर्माण करने जा रहे हैं, जिसे एंड्रॉइड एप्लिकेशन का उपयोग करके मॉनिटर किया जा सकता है। मोबाइल फोन जैसे रिमोट डिस्प्ले का उपयोग करने का कारण यह है कि हम MPU6050 से मूल्यों को मॉनिटर कर सकते हैं बिना हार्डवेयर को देखे, यह तब बहुत काम आएगा जब MPU6050 को ड्रोन या किसी अन्य दुर्गम स्थानों पर रखा जाए।
सामग्री की आवश्यकता:
- अरडिनो प्रो-मिनी (5 वी)
- MPU6050 गायरो सेंसर
- HC-05 या HC-06 ब्लूटूथ मॉड्यूल
- FTDI बोर्ड
- ब्रेड बोर्ड
- तारों को जोड़ना
- स्मार्टफोन
सर्किट आरेख:
इस Arduino टिल्ट सेंसर प्रोजेक्ट के लिए पूरा सर्किट आरेख नीचे दिखाया गया है। इसमें सिर्फ तीन घटक होते हैं और इन्हें आसानी से ब्रेडबोर्ड के ऊपर बनाया जा सकता है।
I2C की मदद से MPU6050 संचार और इसलिए SDA पिन Arduino की ए 4 पिन जो SDA पिन और SCL पिन Arduino की ए 5 पिन से जुड़ा है से जुड़ा है। कोर्ट-06 ब्लूटूथ मॉड्यूल सीरियल संचार इसलिए ब्लूटूथ की आरएक्स पिन पिन D11 और ब्लूटूथ की टीएक्स पिन Arduino के पिन D10 से जुड़ा है से जुड़ा है की मदद से काम करता है। इन पिन D10 और D11 को Arduino की प्रोग्रामिंग करके सीरियल पिन के रूप में कॉन्फ़िगर किया जाएगा। HC-05 मॉड्यूल और MSP6050 मॉड्यूल + 5V पर काम करते हैं और इसलिए वे ऊपर दिखाए गए अनुसार Arduino के Vcc पिन द्वारा संचालित होते हैं।
मैंने तारों को जोड़ने वाली कुछ ब्रेडबोर्ड का उपयोग किया और एक छोटे ब्रेडबोर्ड पर सेट-अप का निर्माण किया। एक बार कनेक्शन हो जाने के बाद मेरा बोर्ड नीचे इस तरह दिखता है।
अपना सेटअप पॉवरिंग:
आप एफटीडीआई प्रोग्रामिंग बोर्ड के माध्यम से अपने सर्किट को पावर कर सकते हैं जैसा कि मैंने किया है, या 9 वी बैटरी या 12 वी एडॉप्टर का उपयोग करें और इसे अरुडिनो प्रो मिनी के रॉ पिन से कनेक्ट करें। Arduino Pro-mini में एक इन-बिल्ट वोल्टेज रेगुलेटर होता है जो इस बाहरी वोल्टेज को नियंत्रित करता है + 5V।
अपने Arduino प्रोग्रामिंग:
एक बार हार्डवेयर तैयार हो जाने पर, हम अपने Arduino की प्रोग्रामिंग शुरू कर सकते हैं। जैसा कि इस परियोजना के लिए हमेशा पूर्ण कोड इस पृष्ठ के नीचे पाया जा सकता है। लेकिन परियोजना को बेहतर ढंग से समझने के लिए मैंने कोड को छोटे चिनको में तोड़ा है और उन्हें नीचे दिए चरणों के रूप में समझाया है।
पहला कदम Arduino के साथ MPU6050 की जगह लेगा । इस परियोजना के लिए हम कोर्निलियस द्वारा विकसित पुस्तकालय का उपयोग करने जा रहे हैं जिसे नीचे दिए गए लिंक से डाउनलोड किया जा सकता है
MPU6050 लिबर्टी - कॉर्नेलियस ज़र्ज़ीबस्की
ज़िप फ़ाइल डाउनलोड करें और इसे अपने Arduino IDE में जोड़ें। फिर फाइल पर जाएं-> उदाहरण-> Arduino_MPU6050_Master -> MPU6050_gyro_pitch_roll_yaw । यह हमारे द्वारा अभी डाउनलोड की गई लाइब्रेरी का उपयोग करने वाले उदाहरण प्रोग्राम को खोलेगा। इसलिए अपलोड पर क्लिक करें और अपने Arduino Pro मिनी पर प्रोग्राम को अपलोड करने की प्रतीक्षा करें। एक बार ऐसा करने के बाद अपने सीरियल मॉनिटर को खोलें और अपना बॉड रेट 115200 पर सेट करें और जांचें कि आपको निम्नलिखित मिल रहा है या नहीं।
प्रारंभ में, सभी तीन मूल्य शून्य के रूप में होंगे, लेकिन जैसे ही आप अपनी ब्रेडबोर्ड को स्थानांतरित करते हैं आप इन मूल्यों को बदलते हुए देख सकते हैं। यदि वे बदलते हैं तो इसका मतलब है कि आपका कनेक्शन सही है, अन्यथा अपने कनेक्शन की जांच करें। यहां कुछ समय ले लीजिए कि आपके संवेदक के झुकाव के तरीके के अनुसार तीन मूल्य पिच रोल और यव कैसे भिन्न होते हैं। यदि आप भ्रमित हो जाते हैं तो Arduino पर रीसेट बटन दबाएं और मान फिर से शून्य हो जाएंगे, फिर सेंसर को एक दिशा में झुकाएं और जांचें कि कौन से मान अलग-अलग हैं। नीचे दी गई तस्वीर आपको बेहतर समझने में मदद करेगी।
इन तीन मापदंडों में से हम केवल रोल और पिच में रुचि रखते हैं । रोल मूल्य हमें एक्स-अक्ष में झुकाव के बारे में बताएगा और पिच मूल्य हमें वाई-एक्सिस में झुकाव के बारे में बताएगा । अब जब हम समझ गए हैं कि मूल बातें वास्तव में Arduino की प्रोग्रामिंग शुरू कर देती हैं, इन मूल्यों को पढ़ने के लिए इसे ब्लूटूथ के माध्यम से Arduino पर भेजें। हमेशा की तरह इस परियोजना के लिए आवश्यक सभी पुस्तकालयों को शामिल करके शुरू करें
#शामिल
फिर हम ब्लूटूथ मॉड्यूल के लिए सॉफ़्टवेयर सीरियल को इनिशियलाइज़ करते हैं । यह संभव है क्योंकि Arduino में सॉफ्टवेयर सीरियल लाइब्रेरी के कारण, IO पिन को सीरियल पिन के रूप में काम करने के लिए प्रोग्राम किया जा सकता है। यहां हम डिजिटल पिन D10 और D11 का उपयोग कर रहे हैं, जहां D10 आईडी Rx और D11 Tx है।
सॉफ्टवेयरसिरियल बीटी (10, 11); // आरएक्स, TX
कि हम इसके बाद चर और वस्तुओं कार्यक्रम के लिए आवश्यक प्रारंभ और इस कदम पर सेटअप () समारोह में जहाँ हम सीरियल की निगरानी और ब्लूटूथ के लिए बॉड दर निर्दिष्ट करें। HC-05 और HC-06 के लिए बॉड दर 9600 है, इसलिए इसका उपयोग करना अनिवार्य है। तब हम जांचते हैं कि क्या Arduino की IIC बस MPU6050 से जुड़ी हुई है यदि नहीं, तो हम चेतावनी संदेश प्रिंट करते हैं और जब तक उपकरण जुड़ा रहता है, तब तक बने रहते हैं। उसके बाद, हम गायरो को कैलिब्रेट करते हैं और अपने संबंधित कार्यों का उपयोग करके इसकी सीमा मान निर्धारित करते हैं जैसा कि नीचे दिखाया गया है।
शून्य सेटअप () {Serial.begin (115200); बीटी.बेगिन (9600); // 9600 बॉड्रेट पर ब्लूटूथ संचार शुरू करें। // MPU6050 को प्रारंभ करें। देरी (500); } mpu.calibrateGyro (); // शुरू mpu.setThreshold (3) के दौरान gyroscope जांचना; // संवेदी को नियंत्रित करता है}
लाइन " mpu.calibrateGyro ();" वर्तमान में जिस स्थान पर रखा गया है , उसके लिए MPU6050 को कैलिब्रेट करें । जब भी MPU6050 को कैलिब्रेट करने की आवश्यकता हो और सभी मान शून्य पर सेट होने हों, इस लाइन को प्रोग्राम के अंदर कई बार कॉल किया जा सकता है। "Mpu.setThreshold (3);" यह फ़ंक्शन नियंत्रित करता है कि सेंसर पर आंदोलन के लिए मूल्य कितना भिन्न होता है बहुत कम मूल्य शोर को बढ़ाएगा ताकि इसके साथ चक्कर लगाते समय सावधान रहें।
शून्य लूप () के अंदर , हम बार-बार गायरोस्कोप के मूल्यों को पढ़ते हैं और तापमान संवेदक पिच, रोल और यव के मूल्य की गणना करते हैं, इसे ब्लूटूथ मॉड्यूल पर भेजते हैं। निम्नलिखित दो पंक्तियाँ कच्चे गायरो मान और तापमान मान को पढ़ेगी
वेक्टर मानदंड = mpu.readNormalizeGyro (); temp = mpu.readTENS ();
अगला, हम समय कदम के साथ गुणा करके और पिछले मानों को जोड़कर पिच, रोल और यॉ की गणना करते हैं। एक टाइमस्टेप कुछ और नहीं बल्कि क्रमिक रीडिंग के बीच का अंतराल है।
पिच = पिच + norm.YAxis * timeStep; रोल = रोल + norm.XAxis * timeStep; yaw = yaw + norm.ZAxis * timeStep;
समय कदम को बेहतर ढंग से समझने के लिए आइए नीचे की रेखा पर एक नज़र डालें। इस लाइन को MPU6050 के मानों को पढ़ने के लिए ठीक 10mS या 0.01 सेकंड के अंतराल पर रखा गया है। इसलिए हम टाइमस्टेप के मूल्य को 0.01 घोषित करते हैं। और अगर प्रोग्राम ज्यादा समय बचा हो तो प्रोग्राम को होल्ड करने के लिए नीचे दी गई लाइन का उपयोग करें। (मिली () - टाइमर) () प्रोग्राम को निष्पादित करने के लिए अब तक का समय देता है। हम इसे केवल 0.01 सेकंड के साथ घटाते हैं और शेष समय के लिए हम विलंब कार्यक्रम का उपयोग करते हुए अपना कार्यक्रम आयोजित करते हैं।
देरी ((टाइमस्टेप * 1000) - (मिली () - टाइमर));
एक बार जब हम मूल्यों को पढ़ने और गणना करने लगते हैं, तो हम उन्हें ब्लूटूथ के माध्यम से अपने फोन पर भेज सकते हैं। लेकिन यहां एक पकड़ है। ब्लूटूथ मॉड्यूल जो हम उपयोग कर रहे हैं वे केवल 1 बाइट (8 बिट) भेज सकते हैं जो हमें केवल 0 से 255 तक नंबर भेजने की अनुमति देता है। इसलिए हमें अपने मूल्यों को विभाजित करना होगा और इस सीमा के अंदर मैप करना होगा। यह निम्नलिखित पंक्तियों द्वारा किया जाता है
if (रोल> -100 && रोल <100) x = मानचित्र (रोल -100, 100, 0, 100); अगर (पिच> -100 && पिच <100) y = नक्शा (पिच -100, 100, 100, 200); if (अस्थायी> 0 && अस्थायी <50) t = 200 + int (अस्थायी);
जैसा कि आप यह पता लगा सकते हैं, रोल का मान 0 से 100 तक चर x में मैप किया गया है और पिच को चर y में 100 से 200 में मैप किया गया है और अस्थायी को 200 और ऊपर चर टी में मैप किया गया है। हम उसी सूचना का उपयोग कर सकते हैं जो हमने भेजे गए डेटा से प्राप्त किया है। अंत में हम निम्नलिखित लाइनों का उपयोग करके ब्लूटूथ के माध्यम से इन मूल्यों को लिखते हैं।
बीटी.राइट (एक्स); बीटी.राइट (वाई); बीटी.राइट (टी);
यदि आप पूरा कार्यक्रम समझ गए हैं, तो प्रोग्राम पर एक नज़र डालने के लिए नीचे स्क्रॉल करें और उसे Arduino बोर्ड पर अपलोड करें।
प्रसंस्करण का उपयोग करके Android एप्लिकेशन तैयार करना:
इस Arduino इनक्लिनोमीटर के लिए एंड्रॉइड एप्लिकेशन को प्रोसेसिंग आईडीई का उपयोग करके विकसित किया गया था । यह बहुत हद तक Arduino के समान है और इसका उपयोग सिस्टम एप्लिकेशन, एंड्रॉइड एप्लिकेशन, वेब डिज़ाइन और बहुत कुछ बनाने के लिए किया जा सकता है। हमने पहले से सूचीबद्ध हमारी कुछ अन्य शांत परियोजनाओं को विकसित करने के लिए प्रसंस्करण का उपयोग किया है
- पिंग पोंग खेल Arduino का उपयोग कर
- प्रसंस्करण का उपयोग कर स्मार्ट फोन नियंत्रित एफएम रेडियो।
- प्रसंस्करण और अल्ट्रासोनिक सेंसर का उपयोग कर Arduino रडार सिस्टम
हालांकि, इस एप्लिकेशन को कैसे बनाया जाए, इस पर पूर्ण कोड की व्याख्या करना संभव नहीं है। तो इस पर जाने के लिए आपके पास दो रास्ते हैं। या तो आप नीचे दिए गए लिंक से एपीके फ़ाइल डाउनलोड कर सकते हैं और सीधे अपने फोन पर एंड्रॉइड एप्लिकेशन इंस्टॉल कर सकते हैं। या पूरा प्रसंस्करण कोड खोजने के लिए नीचे स्क्रॉल करें और अपने आप से जानें कि यह कैसे काम करता है
जिप फाइल के अंदर, आपको एक फोल्डर मिल सकता है जिसे डेटा कहा जाता है जिसमें सभी छवियां और अन्य स्रोत होते हैं जिन्हें एंड्रॉइड एप्लिकेशन में लोड किया जाना है। नीचे की रेखा यह तय करती है कि किस नाम से ब्लूटूथ को स्वचालित रूप से कनेक्ट होना चाहिए
bt.connectToDeviceByName ("HC-06");
ड्रा () फ़ंक्शन के अंदर, चीजों को बार-बार निष्पादित किया जाएगा यहां हम छवियां खींचते हैं, पाठ प्रदर्शित करते हैं और मूल्यों पर आधारित बार को ब्लूटूथ मॉड्यूल बनाते हैं। आप कार्यक्रम के माध्यम से पढ़कर प्रत्येक फ़ंक्शन के अंदर क्या होता है, इसकी जांच कर सकते हैं।
शून्य ड्रा () // अनंत लूप {पृष्ठभूमि (0); imageMode (केंद्र); छवि (लोगो, चौड़ाई / 2, ऊंचाई / 1.04, चौड़ाई, ऊंचाई / 12); छवि लेाड करें(); टेक्स्टफुन (); getval (); }
अंत में, समझाने के लिए एक और महत्वपूर्ण बात है, याद रखें कि हम पिच, रोल और टेम्प के मूल्य को 0 से 255 तक विभाजित करते हैं। इसलिए यहां हम इसे फिर से सामान्य मूल्यों पर उल्टा मैप करके सामान्य मूल्यों पर वापस लाते हैं।
अगर (जानकारी <100 && जानकारी> 0) x = मानचित्र (सूचना, 0, 100, - (चौड़ाई / 1.5) / 3, + (चौड़ाई / 1.5) / 3); // x = जानकारी; अगर (जानकारी <200 && जानकारी> 100) y = मानचित्र (सूचना, 100, 200, - (चौड़ाई / 4.5) / 0.8, + (चौड़ाई / 4.5) / 0.8); // y = जानकारी; और यदि (जानकारी> 200) अस्थायी = जानकारी -200; प्रिंट्लन (अस्थायी, एक्स, वाई);
ब्लूटूथ मॉड्यूल से फोन पर डेटा प्राप्त करने के लिए बहुत बेहतर तरीके हैं, लेकिन चूंकि यह सिर्फ एक शौक परियोजना है जिसे हमने उन्हें अनदेखा किया है, आप रुचि होने पर गहरी खुदाई कर सकते हैं।
Arduino इनक्लिनोमीटर का कार्य:
हार्डवेयर और एप्लिकेशन के साथ तैयार होने के बाद, हमने जो कुछ बनाया है, उसके साथ मज़े करने का समय है। बोर्ड पर Arduino कोड अपलोड करें, आप Serial.println लाइनों पर टिप्पणियों को भी हटा सकते हैं और यह देख सकते हैं कि क्या धारावाहिक मॉनिटर का उपयोग करके हार्डवेयर अपेक्षित रूप से काम कर रहा है। वैसे भी, यह पूरी तरह से वैकल्पिक है।
कोड अपलोड होने के बाद, अपने मोबाइल फोन पर Android एप्लिकेशन लॉन्च करें। एप्लिकेशन को स्वचालित रूप से आपके HC-06 मॉड्यूल से कनेक्ट होना चाहिए और यह नीचे दिए गए आवेदन के शीर्ष पर "कनेक्ट: इन एचसी -06" को प्रदर्शित करेगा।
प्रारंभ में, तापमान मान को छोड़कर सभी मूल्य शून्य होंगे। ऐसा इसलिए है क्योंकि Arduino ने एक संदर्भ के रूप में इस स्थिति के लिए MPU-6050 को कैलिब्रेट किया है, अब आप हार्डवेयर को झुका सकते हैं और जांच सकते हैं कि एनीमेशन के साथ-साथ मोबाइल एप्लिकेशन पर मान भी बदल रहे हैं। आवेदन का पूरा काम नीचे दिए गए वीडियो पर पाया जा सकता है । तो अब आप ब्रेडबोर्ड को कहीं भी रख सकते हैं और जांच सकते हैं कि सतह पूरी तरह से समतल है या नहीं।
आशा है कि आप इस परियोजना को समझ गए हैं और इससे कुछ उपयोगी सीख गए हैं। यदि आपको कोई संदेह है तो कृपया नीचे टिप्पणी अनुभाग का उपयोग करें या इसे हल करने के लिए मंचों।