विषयसूची:

Arduino वायुमंडलीय टेप उपाय / MS5611 GY63 GY86 प्रदर्शन: 4 चरण (चित्रों के साथ)
Arduino वायुमंडलीय टेप उपाय / MS5611 GY63 GY86 प्रदर्शन: 4 चरण (चित्रों के साथ)

वीडियो: Arduino वायुमंडलीय टेप उपाय / MS5611 GY63 GY86 प्रदर्शन: 4 चरण (चित्रों के साथ)

वीडियो: Arduino वायुमंडलीय टेप उपाय / MS5611 GY63 GY86 प्रदर्शन: 4 चरण (चित्रों के साथ)
वीडियो: How to Make Electronic Digital Tape Measure / DIY Digital Rolling Ruler 2024, जुलाई
Anonim
Arduino वायुमंडलीय टेप उपाय / MS5611 GY63 GY86 प्रदर्शन
Arduino वायुमंडलीय टेप उपाय / MS5611 GY63 GY86 प्रदर्शन

यह वास्तव में एक बैरोमीटर/अल्टीमीटर है लेकिन आप वीडियो को देखकर शीर्षक का कारण देखेंगे।

Arduino GY63 और GY86 ब्रेकआउट बोर्ड पर पाया जाने वाला MS5611 प्रेशर सेंसर अद्भुत प्रदर्शन देता है। एक शांत दिन में यह आपकी ऊंचाई को 0.2 मीटर के भीतर मापेगा। यह आपके सिर से बाहरी अंतरिक्ष की दूरी को प्रभावी ढंग से माप रहा है और इसे आपके पैरों की दूरी से बाहरी स्थान तक घटा रहा है (दबाव को मापकर - जो कि ऊपर की हवा का भार है)। इस शानदार डिवाइस में एक रेंज है जो आराम से एवरेस्ट की ऊंचाई को माप सकती है - और कुछ इंच तक भी माप सकती है।

इस परियोजना का उद्देश्य इस प्रकार था: एक स्कूल परियोजना, Arduino कोड को संशोधित करने का एक उदाहरण और MS5611 सेंसर का उपयोग करके पता लगाने के लिए एक अच्छी शुरुआत। इस सेंसर के साथ कठिनाइयों वाले लोगों से बहुत सारे फ़ोरम प्रश्न हैं। यहां दृष्टिकोण इसे बहुत सीधा उपयोग करता है। इस परियोजना को करने के बाद आप दबाव से संबंधित अन्य अनुप्रयोगों को विकसित करने के लिए अच्छी तरह से सुसज्जित होंगे।

प्रत्येक सेंसर का अपना अंशांकन स्थिरांक होता है जिसे पढ़ने और डेटा को सही करने के लिए उपयोग करने की आवश्यकता होती है। इन्हें चलाने में मदद के लिए एक पुस्तकालय उपलब्ध है। यहां दिखाया गया कोड रीडिंग लेने के लिए लाइब्रेरी का उपयोग करता है और फिर उन्हें ऊंचाई में परिवर्तित करता है और उन्हें एलसीडी शील्ड पर प्रदर्शित करता है।

सबसे पहले हम प्रारंभिक परीक्षणों के लिए पीसी/लैपटॉप पर सीरियल मॉनिटर को डेटा भेजेंगे। ये कुछ शोर दिखाते हैं और इसलिए हम इन्हें सुचारू करने के लिए एक फ़िल्टर जोड़ते हैं। फिर हम एक एलसीडी डिस्प्ले जोड़ेंगे ताकि यूनिट स्वतंत्र रूप से चल सके और आप अपनी ऊंचाई - या कुछ और मापने की कोशिश कर सकें।

ध्यान दें GY63 बोर्ड में सिर्फ MS5611 प्रेशर सेंसर है। GY86 को १० डिग्री का स्वतंत्रता बोर्ड कहा जाता है और इसमें ३ अक्ष एक्सेलेरोमीटर, ३ अक्ष गायरो और ३ अक्ष मैग्नेटोमीटर भी शामिल हैं, जो कि कुछ $ अधिक के लिए हैं।

आपको चाहिये होगा:

1. Arduino UNO (या मानक पिनआउट के साथ अन्य) और इसकी USB केबल

2. GY63 ब्रेकआउट बोर्ड या GY86

3. 4 ड्यूपॉन्ट नर-मादा की ओर जाता है - या कनेक्टिंग वायर

4. Arduino LCD कीपैड शील्ड

5. 9वी बैटरी और लेड

6. 2.54 मिमी सॉकेट स्ट्रिप (वैकल्पिक लेकिन अनुशंसित)

तैयारी

Arduino IDE (एकीकृत विकास पर्यावरण) को यहां से डाउनलोड करें:

रुचि के लिए कुछ तकनीकी बिट्स

MS5611 बड़ी संख्या में मापों के औसत से अपना शानदार प्रदर्शन प्रदान करता है। यह केवल 8ms में 4096 3 बाइट (24 बिट) एनालॉग माप कर सकता है और औसत मूल्य दे सकता है। इसे दबाव और तापमान दोनों को मापना होता है ताकि आंतरिक तापमान के लिए दबाव डेटा को सही किया जा सके। इसलिए यह प्रति सेकंड लगभग 60 जोड़ी दबाव और तापमान रीडिंग दे सकता है।

डेटा शीट यहां उपलब्ध है:

संचार I2C के माध्यम से है। तो अन्य I2C सेंसर बस को साझा कर सकते हैं (जैसा कि GY86 10DOF बोर्ड पर है जहां सभी चिप्स I2C पर हैं)।

चरण 1: MS5611 लाइब्रेरी प्राप्त करें

कई Arduino सेंसर या तो एक मानक पुस्तकालय का उपयोग करते हैं जो Arduino IDE के साथ शामिल है या एक पुस्तकालय के साथ एक ज़िप फ़ाइल के साथ आपूर्ति की जाती है जिसे आसानी से स्थापित किया जा सकता है। MS5611 सेंसर के मामले में ऐसा नहीं होता है। हालाँकि एक खोज मिली: https://github.com/gronat/MS5611 जिसमें MS5611 के लिए एक पुस्तकालय है, जिसमें तापमान सुधार करना शामिल है।

विकल्प 1

ऊपर दी गई वेबसाइट पर जाएं, 'क्लोन या डाउनलोड' पर क्लिक करें और 'डाउनलोड ज़िप' चुनें। इसे MS5611-master.zip को आपकी डाउनलोड निर्देशिका में डिलीवर करना चाहिए। अब, यदि आप चाहें, तो इसे एक फ़ोल्डर में ले जाएँ जहाँ आप इसे भविष्य में पा सकें। मैं अपने Arduino फ़ोल्डर में जोड़े गए 'डेटा' नामक निर्देशिका का उपयोग करता हूं।

दुर्भाग्य से डाउनलोड की गई.zip फ़ाइल में कोई उदाहरण रेखाचित्र शामिल नहीं है और पुस्तकालय और उदाहरणों को Arduino IDE में जोड़ना अच्छा होगा। README.md फ़ाइल में एक न्यूनतम उदाहरण है जिसे एक स्केच में कॉपी और पेस्ट किया जा सकता है और सहेजा जा सकता है। यह जाने का एक तरीका है।

विकल्प 2

इस निर्देश में कोड को चलाना आसान बनाने के लिए मैंने उपरोक्त न्यूनतम उदाहरण और यहां दिखाए गए उदाहरणों को लाइब्रेरी में जोड़ा है और नीचे एक.zip फ़ाइल संलग्न की है जो Arduino IDE में स्थापित होगी।

नीचे ज़िप फ़ाइल डाउनलोड करें। आप चाहें तो इसे किसी बेहतर फोल्डर में ले जाएं।

Arduino IDE प्रारंभ करें। स्केच> लाइब्रेरी शामिल करें> ज़िप फ़ाइल जोड़ें पर क्लिक करें और फ़ाइल का चयन करें। आईडीई को पुनरारंभ करें। आईडीई में अब दोनों में पुस्तकालय स्थापित होगा और साथ ही यहां दिखाए गए सभी उदाहरण भी होंगे। फ़ाइल>उदाहरण>>MS5611-मास्टर पर क्लिक करके जांचें। तीन रेखाचित्रों को सूचीबद्ध किया जाना चाहिए।

चरण 2: सेंसर को Arduino और टेस्ट से कनेक्ट करें

सेंसर को Arduino और टेस्ट से कनेक्ट करें
सेंसर को Arduino और टेस्ट से कनेक्ट करें
सेंसर को Arduino और टेस्ट से कनेक्ट करें
सेंसर को Arduino और टेस्ट से कनेक्ट करें

GY63/GY86 बोर्ड आमतौर पर हेडर के साथ आते हैं लेकिन सोल्डर नहीं होते हैं। तो यह आपकी पसंद है कि या तो हेडर को जगह में मिलाप करें और पुरुष-महिला ड्यूपॉन्ट लीड का उपयोग करें, या (जैसा कि मैंने तय किया है) मिलाप सीधे बोर्ड की ओर जाता है और अरुडिनो में प्लग करने के लिए पिन को लीड में जोड़ता है। बाद वाला विकल्प बेहतर है यदि आपको लगता है कि आप बोर्ड को बाद में किसी प्रोजेक्ट में मिलाना चाहते हैं। पूर्व बेहतर है यदि आप प्रयोग के लिए बोर्ड का उपयोग करना चाहते हैं। पिन हेडर की तुलना में अनसोल्डिंग लीड बहुत आसान है।

आवश्यक कनेक्शन हैं:

GY63/GY86 Arduino

VCC - 5v पावर GND - GND ग्राउंड SCL - A5 I2C घड़ी >SDA - A4 I2C डेटा

ऊपर के रूप में Arduino के लिए सेंसर बोर्ड संलग्न करें और Arduino को अपने USB लीड के माध्यम से PC/लैपटॉप से कनेक्ट करें। साथ ही सेंसर को कुछ अपारदर्शी/काली सामग्री से ढक दें। सेंसर प्रकाश के प्रति संवेदनशील होता है (जैसा कि इस प्रकार के अधिकांश सेंसर के मामले में होता है)।

Arduino IDE प्रारंभ करें। क्लिक करें:

फ़ाइल>उदाहरण>>MS5611-मास्टर>MS5611data2serial.

स्केच के साथ IDE का एक नया उदाहरण दिखाई देगा। अपलोड बटन (दायां तीर) पर क्लिक करें।

अगला सीरियल प्लॉटर शुरू करें - टूल्स> सीरियल प्लॉटर पर क्लिक करें और यदि आवश्यक हो तो बॉड को 9600 पर सेट करें। भेजा जा रहा डेटा पास्कल में दबाव है। एक या दो सेकंड के बाद यह फिर से स्केल करेगा और 0.3 मीटर कहकर सेंसर को ऊपर उठाना और कम करना ट्रेस को कम करने और ऊपर उठाने के रूप में दिखाना चाहिए (निचली ऊंचाई उच्च दबाव है)।

डेटा में कुछ शोर है। ऊपर पहला प्लॉट देखें। इसे एक डिजिटल फिल्टर (वास्तव में उपयोगी उपकरण) का उपयोग करके सुचारू किया जा सकता है।

फ़िल्टर समीकरण है:

मान = मान + K (नया-मान)

जहां 'मान' फ़िल्टर किया गया डेटा है, और 'नया' नवीनतम मापा गया है। यदि K=1 कोई फ़िल्टरिंग नहीं है। K के निम्न मानों के लिए डेटा को T/K के समय स्थिरांक के साथ सुचारू किया जाता है जहां T नमूनों के बीच का समय है। यहाँ T लगभग 17ms है इसलिए 0.1 का मान 170ms या लगभग 1/6s का समय स्थिरांक देता है।

फ़िल्टर द्वारा जोड़ा जा सकता है:

सेटअप से पहले फ़िल्टर किए गए डेटा के लिए एक वैरिएबल जोड़ें ():

फ्लोट फ़िल्टर्ड = 0;

फिर दाब =… के बाद फ़िल्टर समीकरण जोड़ें। रेखा।

फ़िल्टर्ड = फ़िल्टर्ड + ०.१ * (दबाव-फ़िल्टर्ड);

फ़िल्टर किए गए मान को पहले पढ़ने के लिए प्रारंभ करना एक अच्छा विचार है। तो ऊपर की रेखा के चारों ओर एक 'अगर' कथन जोड़ें जो ऐसा करता है तो ऐसा लगता है:

अगर (फ़िल्टर्ड! = 0) {

फ़िल्टर्ड = फ़िल्टर्ड + ०.१ * (दबाव-फ़िल्टर्ड); } और {फ़िल्टर्ड = दबाव; // पहले पढ़ने के लिए फ़िल्टर किया गया पढ़ने के लिए सेट करें}

परीक्षण '!=' 'बराबर नहीं' है। इसलिए यदि 'फ़िल्टर्ड' 0 के बराबर नहीं है, तो फ़िल्टर समीकरण निष्पादित किया जाता है, लेकिन यदि ऐसा है तो इसे प्रेशर रीडिंग पर सेट किया जाता है।

अंत में हमें Serial.println स्टेटमेंट में 'दबाव' को 'फ़िल्टर' में बदलने की आवश्यकता है ताकि हम फ़िल्टर किए गए मान को देख सकें।

ऊपर दिए गए परिवर्तनों को मैन्युअल रूप से करके सर्वोत्तम शिक्षण प्राप्त किया जाता है। हालाँकि मैंने इन्हें MS5611data2serialWfilter उदाहरण में शामिल किया है। तो अगर कोई समस्या है तो उदाहरण लोड किया जा सकता है।

अब कोड को Arduino पर अपलोड करें और सुधार देखें। ऊपर दूसरा प्लॉट देखें और ध्यान दें कि Y स्केल का विस्तार x2 है।

फ़िल्टर स्थिरांक के लिए निम्न मान आज़माएं, 0.1 के बजाय 0.02 कहें, और अंतर देखें। डेटा स्मूथ है लेकिन धीमी प्रतिक्रिया के साथ। यह एक समझौता है जिसे इस साधारण फिल्टर का उपयोग करते समय मांगा जाना है। विशेषता इलेक्ट्रॉनिक सर्किट में व्यापक रूप से उपयोग किए जाने वाले आरसी (प्रतिरोध और समाई) फिल्टर के समान है।

चरण 3: इसे स्टैंडअलोन बनाएं

अब हम एलसीडी कीपैड शील्ड जोड़ेंगे, दबाव को मीटर में ऊंचाई में बदलेंगे और इसे डिस्प्ले पर दिखाएंगे। हम कीपैड 'सेलेक्ट' बटन दबाकर मान को शून्य करने की क्षमता भी जोड़ देंगे।

Arduino पर LCD शील्ड के साथ सेंसर को LCD शील्ड से कनेक्ट करना होगा। दुर्भाग्य से एलसीडी शील्ड आमतौर पर उपयुक्त सॉकेट के बिना आती हैं। तो विकल्प सोल्डर कनेक्शन बनाने या कुछ सॉकेट स्ट्रिप प्राप्त करने के लिए हैं। ईबे पर सॉकेट स्ट्रिप डाक की लागत से अधिक नहीं के लिए उपलब्ध है। '2.54 मिमी सॉकेट स्ट्रिप' पर एक खोज करें और उन लोगों की तलाश करें जो Arduino पर समान हैं। ये आमतौर पर 36 या 40 पिन लंबाई में आते हैं। मैं मुड़े हुए पिन वाले से बचूंगा क्योंकि वे मानक ड्यूपॉन्ट लीड के लिए पर्याप्त गहरे नहीं हैं।

सॉकेट स्ट्रिप को लंबाई में काटना होता है और कट को पिन के समान स्थान पर बनाना होता है। तो एक 6 पिन स्ट्रिप के लिए - 7वें पिन को कुछ बारीक सरौता से हटा दें, फिर उस जगह पर एक जूनियर हैकसॉ का उपयोग करके काट लें। मैं उन्हें साफ-सुथरा बनाने के लिए सिरों को फाइल करता हूं।

सुनिश्चित करें कि बोर्ड पर टांका लगाते समय कोई सोल्डर ब्रिज नहीं हैं।

सेंसर को जोड़ने के उचित निर्णय के साथ एलसीडी शील्ड को Arduino पर प्लग करें और सेंसर को उसी पिन से कनेक्ट करें - लेकिन अब LCD शील्ड पर।

बैटरी और लेड भी तैयार कर लें। मैंने अपने स्क्रैप बिन में भागों से अपनी लीड बनाई लेकिन वे eBay पर भी उपलब्ध हैं - जिसमें एक अच्छा विकल्प शामिल है जिसमें बैटरी बॉक्स और स्विच शामिल है। 'PP3 2.1mm लीड' पर खोजें।

वर्तमान खपत लगभग 80ma है। इसलिए यदि आप कुछ मिनटों से अधिक समय तक चलाना चाहते हैं तो PP3 से बड़ी 9v बैटरी पर विचार करें।

चरण 4: ऊंचाई और एलसीडी के लिए कोड जोड़ें

Image
Image

दबाव को ऊंचाई में बदलने और डिस्प्ले को चलाने के लिए हमें थोड़ी और कोडिंग करने की आवश्यकता है।

स्केच की शुरुआत में डिस्प्ले लाइब्रेरी जोड़ें और बताएं कि किन पिनों का उपयोग किया जाता है:

#शामिल

// लाइब्रेरी को इंटरफ़ेस पिन लिक्विड क्रिस्टल एलसीडी (8, 9, 4, 5, 6, 7) की संख्या के साथ प्रारंभ करें;

आगे हमें कीपैड बटनों को पढ़ने के लिए कुछ चर और एक फ़ंक्शन की आवश्यकता है। ये सभी एनालॉग इनपुट A0 से जुड़े हुए हैं। प्रत्येक बटन A0 को एक अलग वोल्टेज देता है। 'Arduino LCD शील्ड बटन कोड' पर एक खोज में कुछ अच्छा कोड मिला:

www.dfrobot.com/wiki/index.php/Arduino_LCD_KeyPad_Shield_(SKU:_DFR0009)#Sample_Code

सेटअप से पहले यह कोड जोड़ें ():

// पैनल और बटन द्वारा उपयोग किए जाने वाले कुछ मूल्यों को परिभाषित करें

इंट LCD_key = 0; int adc_key_in = 0; #btnRIGHT 0 को परिभाषित करें #btnUP 1 को परिभाषित करें #btnDOWN 2 को परिभाषित करें #btnLEFT 3 को परिभाषित करें #btnSELECT 4 को परिभाषित करें #btnNONE 5 को परिभाषित करें // बटन पढ़ें int read_LCD_buttons() { adc_key_in = analogRead(0); // सेंसर से मान पढ़ें 1000) वापसी btnNONE; // हम गति कारणों से इसे पहला विकल्प बनाते हैं क्योंकि यह सबसे अधिक संभावित परिणाम होगा यदि (adc_key_in <50) btnRIGHT लौटाता है; अगर (adc_key_in <250) btnUP लौटाएं; अगर (adc_key_in <450) btnDOWN लौटाएं; अगर (adc_key_in <650) btnLEFT लौटाएं; अगर (adc_key_in <850) रिटर्न btnSELECT; वापसी btnNONE; // जब अन्य सभी विफल हो जाते हैं, तो इसे वापस कर दें… }

ऊंचाई आमतौर पर शुरुआती बिंदु पर शून्य होती है। इसलिए हमें ऊंचाई और संदर्भ दोनों के लिए चर की आवश्यकता है। सेटअप() और उपरोक्त फ़ंक्शन से पहले इन्हें जोड़ें:

फ्लोट मीटर;

फ्लोट रेफरी = 0;

पास्कल में दबाव से मीटर में रूपांतरण समुद्र तल पर लगभग 12 से एक विभाजन है। अधिकांश जमीन आधारित मापों के लिए यह सूत्र ठीक है। अधिक सटीक सूत्र हैं जो उच्च ऊंचाई पर रूपांतरण के लिए अधिक उपयुक्त हैं। इनका उपयोग करें यदि आप इसका उपयोग गुब्बारे की उड़ान की ऊंचाई को रिकॉर्ड करने के लिए करने जा रहे हैं।

संदर्भ को पहले दबाव पढ़ने के लिए सेट किया जाना चाहिए ताकि हम शून्य ऊंचाई से शुरू करें और जब सेलेक्ट बटन दबाया जाए। फ़िल्टर कोड के बाद, और Serial.println कथन से पहले जोड़ें:

अगर (रेफरी == 0) {

रेफरी = फ़िल्टर्ड / 12.0; } अगर (read_LCD_buttons() == btnSELECT) { रेफरी = फ़िल्टर्ड / 12.0; }

इसके बाद ऊंचाई की गणना जोड़ें:

एमटीआर = रेफरी - फ़िल्टर्ड / 12.0;

अंत में Serial.println स्टेटमेंट को 'फ़िल्टर' के बजाय 'mtr' भेजने के लिए बदलें, और LCD को 'mtr' भेजने के लिए कोड जोड़ें:

सीरियल.प्रिंट्लन (एमटीआर); // सीरियल (यूएआरटी) के माध्यम से दबाव भेजें

LCD.setCursor(0, 1); // लाइन 2 एलसीडी.प्रिंट (एमटीआर);

यहाँ सभी परिवर्तन उदाहरण MS5611data2lcd में शामिल हैं। इसे चरण 2 में लोड करें।

एक आखिरी मॉड है जो मददगार है। जब इसे प्रति सेकंड 60 बार अपडेट किया जा रहा हो तो डिस्प्ले को पढ़ना मुश्किल होता है। हमारा फ़िल्टर 0.8 के आसपास स्थिर समय के साथ डेटा को सुचारू कर रहा है। इसलिए हर 0.3 में डिस्प्ले को अपडेट करना काफी लगता है।

तो स्केच की शुरुआत में अन्य सभी परिवर्तनीय परिभाषाओं के बाद एक काउंटर जोड़ें (उदाहरण के बाद फ्लोट रेफरी = 0;):

इंट मैं = 0;

फिर वृद्धि करने के लिए कोड जोड़ें 'i' और एक 'if' कथन को चलाने के लिए जब यह 20 हो जाता है और फिर इसे शून्य पर सेट करता है और सीरियल और एलसीडी कमांड को 'if' स्टेटमेंट के भीतर ले जाता है, इसलिए ये केवल हर 20 वीं रीडिंग को निष्पादित किया जाता है:

मैं + = 1;

अगर (i> = 20) {सीरियल.प्रिंट्लन (एमटीआर); // सीरियल (UART) LCD.setCursor (0, 1) के माध्यम से दबाव भेजें; // लाइन 2 एलसीडी.प्रिंट (एमटीआर); मैं = 0; }

कोड को मैन्युअल रूप से दर्ज करने के लिए प्रोत्साहित करने के लिए मैंने इस अंतिम संशोधन के साथ एक उदाहरण शामिल नहीं किया जो सीखने में सहायता करता है।

इस परियोजना को डिजिटल बैरोमीटर के लिए उदाहरण के लिए एक अच्छा प्रारंभिक बिंदु देना चाहिए। उन लोगों के लिए जो RC मॉडल में उपयोग पर विचार करना चाहते हैं - कोड के लिए OpenXvario की खोज करें जो Frsky और Turnigy 9x टेलीमेट्री सिस्टम के लिए एक altimeter और variometer को सक्षम करता है।

सिफारिश की: