विषयसूची:

WEEDINATOR☠ भाग 2: सैटेलाइट नेविगेशन: 7 कदम (चित्रों के साथ)
WEEDINATOR☠ भाग 2: सैटेलाइट नेविगेशन: 7 कदम (चित्रों के साथ)

वीडियो: WEEDINATOR☠ भाग 2: सैटेलाइट नेविगेशन: 7 कदम (चित्रों के साथ)

वीडियो: WEEDINATOR☠ भाग 2: सैटेलाइट नेविगेशन: 7 कदम (चित्रों के साथ)
वीडियो: Hackaday LA Meetup : Carlyn Maw 'A Social Life for IoT' 2024, जुलाई
Anonim
WEEDINATOR☠ भाग 2: सैटेलाइट नेविगेशन
WEEDINATOR☠ भाग 2: सैटेलाइट नेविगेशन
WEEDINATOR☠ भाग 2: सैटेलाइट नेविगेशन
WEEDINATOR☠ भाग 2: सैटेलाइट नेविगेशन
WEEDINATOR☠ भाग 2: सैटेलाइट नेविगेशन
WEEDINATOR☠ भाग 2: सैटेलाइट नेविगेशन
WEEDINATOR☠ भाग 2: सैटेलाइट नेविगेशन
WEEDINATOR☠ भाग 2: सैटेलाइट नेविगेशन

वीडिनेटर नेविगेशन सिस्टम का जन्म हुआ है!

एक घूमने वाला कृषि रोबोट जिसे स्मार्ट फोन द्वारा नियंत्रित किया जा सकता है।

… और इसे एक साथ कैसे रखा जाता है इसकी नियमित प्रक्रिया से गुजरने के बजाय मैंने सोचा कि मैं कोशिश करूंगा और समझाऊंगा कि यह वास्तव में कैसे काम करता है - स्पष्ट रूप से सब कुछ नहीं बल्कि सबसे महत्वपूर्ण और दिलचस्प बिट्स। कृपया क्षमा करें, लेकिन यह है कि डेटा अलग-अलग मॉड्यूल के बीच कैसे बहता है जो मुझे दिलचस्प लगता है और इसके सबसे निचले हर में टूट जाता है, हम वास्तविक "बिट्स" के साथ समाप्त होते हैं - शून्य और वाले। यदि आप कभी भी बिट्स, बाइट्स, कैरेक्टर और स्ट्रिंग्स के बारे में भ्रमित हो गए हैं तो अब समय अपुष्ट होने का हो सकता है? मैं 'एरर कैंसिलिंग' नामक एक छोटी सी अमूर्त अवधारणा को भी आज़माने जा रहा हूँ।

सिस्टम में ही विशेषताएं हैं:

  • GPS/GNSS: Ublox C94 M8M (रोवर और बेस)
  • 9DOF रेजर आईएमयू एमओ डिजिटल कंपास
  • फोना 800एच 2जी जीपीआरएस सेलुलर
  • 2.2 "टीएफटी स्क्रीन
  • Arduino ड्यू 'मास्टर'
  • विभिन्न Arduino 'दास'।

अजीब तरह से, बहुत से सत नवों में डिजिटल कंपास नहीं होता है, जिसका अर्थ है कि यदि आप स्थिर हैं, और खो गए हैं, तो आपको किसी भी यादृच्छिक दिशा में चलना या ड्राइव करना होगा, इससे पहले कि उपकरण आपको उपग्रहों से सही दिशा दिखा सके। यदि आप घने जंगल या भूमिगत कार पार्क में खो जाते हैं तो आप भर जाते हैं!

चरण 1: यह कैसे काम करता है

यह काम किस प्रकार करता है
यह काम किस प्रकार करता है

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

जीपीआरएस फोना का उपयोग 2जी सेलुलर नेटवर्क के माध्यम से एक ऑनलाइन डेटाबेस तक पहुंचने के लिए किया जाता है और एक Arduino नैनो के माध्यम से Arduino ड्यू को निर्देशांक प्राप्त और संचारित करता है। ड्यू मास्टर है और I2C और सीरियल बसों के माध्यम से दास के रूप में अन्य Arduinos की एक सरणी को नियंत्रित करता है। ड्यू यूब्लॉक्स और रेजर से लाइव डेटा के साथ इंटरैक्ट कर सकता है और इसके एक Arduino दास द्वारा गणना की गई शीर्षक प्रदर्शित कर सकता है।

Ublox उपग्रह ट्रैकर विशेष रूप से चतुर है क्योंकि यह बहुत सटीक सुधार प्राप्त करने के लिए त्रुटि रद्द करने का उपयोग करता है - लगभग 40 मिमी का अंतिम नाममात्र कुल विचलन। मॉड्यूल एक समान जोड़ी से बना है, जिनमें से एक, 'रोवर', वीडिनेटर के साथ चलता है, और दूसरा, 'बेस' खुले में कहीं एक पोल पर तय होता है। समय के साथ बड़ी मात्रा में नमूनों का उपयोग करके आधार द्वारा वास्तव में सटीक सुधार प्राप्त करने में सक्षम होने से त्रुटि रद्दीकरण प्राप्त होता है। फिर इन नमूनों को बदलते वायुमंडलीय परिस्थितियों की भरपाई के लिए औसत किया जाता है। यदि उपकरण चल रहा था, तो यह स्पष्ट रूप से किसी भी प्रकार का औसत प्राप्त करने में सक्षम नहीं होगा और बदलते परिवेश की पूर्ण दया पर होगा। हालांकि, अगर एक स्थिर और चलती डिवाइस एक साथ काम करती है, जब तक वे एक दूसरे के बीच संवाद कर सकते हैं, उन्हें दोनों का लाभ मिल सकता है। किसी भी समय, आधार इकाई में अभी भी एक त्रुटि है, लेकिन इसमें पहले से गणना की गई सुपर सटीक फिक्स भी है, इसलिए यह निर्देशांक के एक सेट को दूसरे से घटाकर वास्तविक त्रुटि की गणना कर सकता है। यह फिर एक रेडियो लिंक के माध्यम से रोवर को गणना की गई त्रुटि भेजता है, जो तब त्रुटि को अपने स्वयं के निर्देशांक में जोड़ता है और हे प्रेस्टो, हमारे पास त्रुटि रद्द करना है! व्यावहारिक रूप से, त्रुटि रद्दीकरण 3 मीटर और 40 मिमी कुल विचलन के बीच का अंतर बनाता है।

पूरी प्रणाली जटिल दिखती है, लेकिन वास्तव में निर्माण करना काफी आसान है, या तो एक गैर प्रवाहकीय सतह पर ढीला या मेरे द्वारा डिज़ाइन किए गए पीसीबी का उपयोग करके, जो सभी मॉड्यूल को सुरक्षित रूप से बोल्ट करने की अनुमति देता है। भविष्य के विकास को पीसीबी पर बनाया गया है, जिससे स्टीयरिंग, फॉरवर्ड मोशन और ऑन-बोर्ड सीएनसी मशीन के लिए मोटर्स को नियंत्रित करने के लिए Arduinos की एक विशाल सरणी को शामिल किया जा सकता है। नेविगेशन में रंगीन वस्तुओं को समझने के लिए कैमरों का उपयोग करके कम से कम एक ऑब्जेक्ट रिकग्निशन सिस्टम द्वारा भी सहायता की जाएगी, उदाहरण के लिए फ्लोरोसेंट गोल्फ बॉल, जो किसी प्रकार के ग्रिड में सावधानी से स्थित हैं - इस स्थान को देखें!

चरण 2: घटक

अवयव
अवयव
अवयव
अवयव
अवयव
अवयव
  • Ublox C94 M8M (रोवर और बेस) x 2 of
  • 9DOF रेजर आईएमयू एमओ डिजिटल कंपास
  • फोना 800एच 2जी जीपीआरएस सेलुलर 1946
  • अरुडिनो ड्यू
  • Arduino नैनो x 2
  • स्पार्कफन प्रो माइक्रो
  • एडफ्रूट २.२" टीएफटी आईएल१९४०सी १४८०
  • पीसीबी (संलग्न Gerber फ़ाइलें देखें) x 2 of
  • १२०६ एसएमडी जीरो ओम रेसिस्टर्स x १२ of
  • 1206 एल ई डी x 24

पीसीबी फाइल 'डिजाइन स्पार्क' सॉफ्टवेयर के साथ खुलती है।

चरण 3: मॉड्यूल को तार देना

मॉड्यूल को तार देना
मॉड्यूल को तार देना

यह आसान हिस्सा है - विशेष रूप से पीसीबी के साथ आसान जो मैंने बनाया है - बस ऊपर दिए गए आरेख का पालन करें। धारावाहिक और I2C लाइनों पर भी, 3v मॉड्यूल को 5v तक वायरिंग से बचने के लिए देखभाल की आवश्यकता है।

चरण 4: कोड

कोड
कोड

अधिकांश कोड डेटा को व्यवस्थित तरीके से सिस्टम के चारों ओर ले जाने से संबंधित है और अक्सर डेटा प्रारूपों को पूर्णांक से फ़्लोट से स्ट्रिंग्स और वर्णों में परिवर्तित करने की आवश्यकता होती है, जो बहुत भ्रमित हो सकता है! 'सीरियल' प्रोटोकॉल केवल वर्णों को संभालेगा और जबकि I2सी प्रोटोकॉल बहुत छोटे पूर्णांकों को संभालेगा, मैंने उन्हें वर्णों में परिवर्तित करना और फिर ट्रांसमिशन लाइन के दूसरे छोर पर वापस पूर्णांक में परिवर्तित करना बेहतर समझा।

वीडिनेटर नियंत्रक मूल रूप से एक 8 बिट प्रणाली है जिसमें बहुत से व्यक्तिगत Arduinos, या 'MCU's होते हैं। जब 8 बिट को वास्तविक बाइनरी शून्य के रूप में वर्णित किया जाता है और यह इस तरह दिख सकता है: B01100101 जो बराबर होगा:

(1x2)+(0x2)2+(1x2)3+(0x2)4+(0x2)5+(1x2)6+(1x2)7+(0x2)8 =

दशमलव अंक मान 128 64 32 16 8 4 2 1
बाइनरी डिजिट वैल्यू 0 1 1 0 0 1 0 1

= 101

और अधिकतम संभव मूल्य 255…. तो अधिकतम पूर्णांक 'बाइट' हम I. पर संचारित कर सकते हैं2सी 255 है, जो बहुत सीमित है!

एक Arduino पर हम I. का उपयोग करके एक बार में 32 ASCII वर्ण, या बाइट्स तक संचारित कर सकते हैं2सी, जो बहुत अधिक उपयोगी है, और वर्ण सेट में नीचे दिए गए अनुसार 7 बिट प्रारूप में संख्याएं, अक्षर और नियंत्रण वर्ण शामिल हैं:

छवि
छवि

सौभाग्य से, Arduino कंपाइलर बैकग्राउंड में कैरेक्टर से बाइनरी में रूपांतरण का सभी काम करता है, लेकिन यह अभी भी डेटा ट्रांसमिशन के लिए सही प्रकार के कैरेक्टर की अपेक्षा करता है और यह 'स्ट्रिंग्स' को स्वीकार नहीं करेगा।

अब जब चीजें भ्रमित हो सकती हैं। वर्णों को चार परिभाषा का उपयोग करके एकल वर्णों के रूप में या चार [20] का उपयोग करके 20 वर्णों की एक आयामी सरणी के रूप में व्यक्त किया जा सकता है। एक Arduino String एक वर्ण सरणी के समान है और सचमुच वर्णों की एक स्ट्रिंग है जिसे अक्सर मानव मस्तिष्क द्वारा 'शब्दों' के रूप में व्याख्या किया जाता है।

// चरित्र 'डिस्टेंस कैरेक्टर' बनाता है:

स्ट्रिंग सर्जक = ""; दूरीस्ट्रिंग = प्रारंभकर्ता + दूरीस्ट्रिंग; इंट एन = दूरीस्ट्रिंग। लम्बाई (); के लिए (int आ = 0; आ <= n; आ ++) { दूरी चरित्र [आ] = दूरीस्ट्रिंग [आ]; }

उपरोक्त कोड वर्णों की एक लंबी स्ट्रिंग को वर्णों की एक वर्ण सरणी में परिवर्तित कर सकता है जिसे तब I. पर प्रसारित किया जा सकता है2सी या सीरियल।

ट्रांसमिशन लाइन के दूसरे छोर पर, डेटा को निम्नलिखित कोड का उपयोग करके वापस एक स्ट्रिंग में परिवर्तित किया जा सकता है:

दूरीस्ट्रिंग = दूरीस्ट्रिंग + सी; // स्ट्रिंग = स्ट्रिंग + कैरेक्टर

एक वर्ण सरणी को सीधे एक पूर्णांक में परिवर्तित नहीं किया जा सकता है और इसे पहले स्ट्रिंग प्रारूप में जाना होगा, लेकिन निम्न कोड एक स्ट्रिंग से पूर्णांक में परिवर्तित हो जाएगा:

int परिणाम = (दूरीस्ट्रिंग)। toInt ();

int दूरी मीटर = परिणाम;

अब हमारे पास एक पूर्णांक है जिसका उपयोग हम गणना करने के लिए कर सकते हैं। फ़्लोट्स (एक दशमलव बिंदु के साथ संख्या) को ट्रांसमिशन चरण में पूर्णांक में परिवर्तित करने की आवश्यकता होती है और फिर दो दशमलव स्थानों के लिए 100 से विभाजित किया जाता है जैसे:

फ्लोट दूरीमीटर = दूरीएमएम / 1000;

अंत में, वर्णों और पूर्णांकों के मिश्रण से एक स्ट्रिंग बनाई जा सकती है जैसे:

// यह वह जगह है जहां डेटा को एक चरित्र में संकलित किया जाता है:

डेटास्ट्रिंग = सर्जक + "भालू" + ज़बियरिंग + "डिस्ट" + zdistance; // 32 वर्णों तक सीमित // स्ट्रिंग = स्ट्रिंग + वर्ण + इंटरगर + वर्ण + पूर्णांक।

शेष कोड मानक Arduino सामान है जो Arduino पुस्तकालयों में विभिन्न उदाहरणों में पाया जा सकता है। 'उदाहरण >>>> स्ट्रिंग्स' उदाहरण और 'वायर' लाइब्रेरी उदाहरण देखें।

यहाँ एक फ्लोट संचारित करने और प्राप्त करने की पूरी प्रक्रिया है:

कन्वर्ट फ्लोट इंटीजर स्ट्रिंग ➜ कैरेक्टर सरणी ….. फिर मास्टर से ट्रांसमिट कैरेक्टर ऐरे

गुलाम पर अलग-अलग पात्र प्राप्त करें…। फिर कैरेक्टर स्ट्रिंग ➜ इंटीजर फ्लोट कन्वर्ट करें

चरण 5: डेटाबेस और वेबपेज

डेटाबेस और वेबपेज
डेटाबेस और वेबपेज
डेटाबेस और वेबपेज
डेटाबेस और वेबपेज

ऊपर डेटाबेस संरचना दिखाई गई है और php और html कोड फाइलें संलग्न हैं। उपयोगकर्ता नाम, डेटाबेस नाम, तालिका नाम और पासवर्ड सुरक्षा के लिए खाली कर दिए गए हैं।

चरण 6: नेविगेशन टेस्ट

नेविगेशन टेस्ट
नेविगेशन टेस्ट
नेविगेशन टेस्ट
नेविगेशन टेस्ट
नेविगेशन टेस्ट
नेविगेशन टेस्ट

मैं I2C के माध्यम से एक डेटालॉगर को Weedinator नियंत्रण बोर्ड से जोड़ने और Ublox M8M उपग्रह स्थिति प्रदर्शन के बारे में कुछ विचार प्राप्त करने में कामयाब रहा:

हरे रंग के ग्राफ द्वारा दिखाए गए 'कोल्ड स्टार्ट' पर, मॉड्यूल बहुत सारी त्रुटि के साथ शुरू हुआ, जो 'सामान्य' जीपीएस के समान था, और धीरे-धीरे त्रुटि कम हो गई, लगभग 2 घंटे के बाद, इसे रोवर के बीच आरटीके फिक्स मिला। और आधार (रेड क्रॉस के रूप में दिखाया गया है)। उस 2 घंटे की अवधि के दौरान, बेस मॉड्यूल लगातार बना रहा है और अक्षांश और देशांतर के लिए औसत मान अपडेट कर रहा है और पूर्व-प्रोग्राम किए गए समय अंतराल के बाद यह तय करता है कि इसे एक अच्छा फिक्स मिला है। अगले 2 ग्राफ 'हॉट स्टार्ट' के बाद व्यवहार दिखाते हैं ' जहां बेस मॉड्यूल ने पहले ही एक अच्छे औसत की गणना कर ली है। शीर्ष ग्राफ़ 200 मिनट की अवधि से अधिक है और कभी-कभी फिक्स खो जाता है और रोवर वीडिनेटर को एनएमईए संदेश भेजता है कि फिक्स अस्थायी रूप से अविश्वसनीय हो गया है।

निचला नीला ग्राफ़ शीर्ष ग्राफ़ में लाल बॉक्स पर 'ज़ूम इन' है और Ublox प्रदर्शन का एक अच्छा प्रतिनिधि स्नैप शॉट दिखाता है, जिसमें कुल विचलन 40 मिमी है, जो कि वीडिनेटर को इसके स्थान पर मार्गदर्शन करने के लिए पर्याप्त से अधिक है, लेकिन संभवत: अलग-अलग पौधों के आसपास मिट्टी की खेती करने के लिए पर्याप्त नहीं है?

तीसरा ग्राफ रोवर और बेस के साथ एकत्र किए गए डेटा को 100 मीटर अलग दिखाता है - कोई अतिरिक्त त्रुटि नहीं पाई गई - पृथक्करण की दूरी ने सटीकता पर कोई फर्क नहीं डाला।

चरण 7: अंतिम

सिफारिश की: