अल्ट्रासोनिक रेंज फाइंडर एचसी एसआर04। कनेक्टिंग अल्ट्रासोनिक रेंज फाइंडर HC-SR04। क्या देखना है

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

सेंसर में चार तार होते हैं। यह एक अल्ट्रासोनिक वेव सेंसर बनाता है, जो एक बाधा से परावर्तित होने पर सेंसर में वापस आ जाता है। निर्भरता का उपयोग करके दूरी की गणना की जा सकती है। अल्ट्रासोनिक ट्रांसमीटर को चलाने के लिए आउटपुट एम्पलीफायर का उपयोग किया जाता है। मॉड्यूल एकल-पंक्ति 4-पिन कनेक्टर से सुसज्जित है - मॉड्यूल के आउटपुट तालिका में वर्णित हैं।

दोनों सिग्नल कम हैं। मॉड्यूल का माइक्रोकंट्रोलर 40 kHz की आवृत्ति पर 8 अल्ट्रासोनिक दालों के फटने का उत्सर्जन करता है और एक प्रतिध्वनि रेखा स्थापित करता है। इस महत्वपूर्ण सूचनामॉड्यूल विवरण में अक्सर अनदेखा किया जाता है। हम आमतौर पर इसका उपयोग कुछ सेंटीमीटर से लेकर 2 मीटर तक की दूरी मापने के लिए करते हैं।

मैंने दूसरे रास्ते पर जाने का फैसला किया और भविष्य के रोबोट के लिए पहला "सेंस ऑर्गन" चुना गया अल्ट्रासोनिक रेंजफाइंडर कोर्ट-SR04.

विवरणकोर्ट-SR04

कोर्ट-SR04- ये एक ही बोर्ड पर रखे गए अल्ट्रासोनिक सिग्नल के रिसीवर और ट्रांसमीटर हैं। स्पीकर और माइक्रोफोन, वास्तव में, केवल मानव कान के लिए अश्रव्य अल्ट्रासाउंड के लिए। रिसीवर और स्वयं ट्रांसमीटर के अलावा, बोर्ड में इस सेंसर के साथ सरल और सरल काम करने के लिए आवश्यक हार्नेस भी होता है।

माइक्रोकंट्रोलर के साथ सेंसर का सहयोग

दूरी संवेदक के एक विशिष्ट उपयोग में 1 से 20 हर्ट्ज की निरंतर आवृत्ति पर दूरी माप शामिल है। अनुभव से पता चला है कि रीसेट पल्स की अवधि कम से कम 30 एमएस होनी चाहिए। इको आउटपुट की पल्स चौड़ाई को मापने के लिए, एक टाइमर चैनल का उपयोग करें जो पल्स चौड़ाई को मापने या दोनों इनपुट को कैप्चर करने के लिए प्रोग्राम किए गए कैप्चर मोड में है। इस प्रकार, निकटता संवेदक को नियंत्रित करने के लिए एक टाइमर का उपयोग किया जा सकता है। इको लाइन के साथ काम करने के लिए चैनलों की एक जोड़ी का उपयोग किया जाता है।

सेंसर में कम बिजली की खपत होती है, जो मोबाइल रोबोट के मामले में भी एक महत्वपूर्ण पैरामीटर है जो पावर आउटलेट से बंधे नहीं हैं। HC-SR04 5V द्वारा संचालित है, जो तब भी सुविधाजनक होता है जब आप इसे Arduino से जोड़ते हैं।


सेंसर के संचालन का सिद्धांत बहुत सरल है: जब माइक्रोकंट्रोलर इसे बताता है (मैं इसे बाद में कैसे करना है) बताता हूं कि डेटा प्राप्त करना आवश्यक होगा, सेंसर एक अल्ट्रासोनिक सिग्नल उत्पन्न करता है और "सुनना" शुरू करता है। जब किसी वस्तु से परिलक्षित संकेत सेंसर पर लौटता है - HC-SR04 माइक्रोकंट्रोलर को एक तार्किक इकाई भेजता है और फिर यह नियंत्रक पर निर्भर करता है। मुद्दा यह है कि आप सिग्नल के लौटने में लगने वाले समय को माप सकते हैं, और फिर दूरी प्राप्त करने के लिए सरल गणनाओं का उपयोग कर सकते हैं।
HC-SR04 में चार पिन हैं। उनमें से दो (किनारों पर स्थित) माइक्रोक्रिकिट की बिजली आपूर्ति (वीसीसी और जीएनडी द्वारा इंगित) हैं। बीच में: एक ट्रिगर संपर्क (चिह्नित ट्रिगर), और दूसरा संपर्क इको (इतना चिह्नित इको, क्षमा करें, लेकिन मुझे नहीं पता कि इसे कैसे कॉल करना है)।

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

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

मैं कहां से खरीद सकता था?
व्यक्तिगत रूप से, मैंने eBay पर ऑर्डर किया, दो ऐसे सेंसर (दो बोर्ड) की कीमत डिलीवरी के साथ $ 9 थी। मैंने दो लिए - क्योंकि उन्हें मिलाने का विचार था।

HC-SR04 का उपयोग कैसे करें?

आइए अधिक दिलचस्प प्रश्नों पर चलते हैं, अर्थात् "इस चीज़ को arduino पर कैसे पेंच करें?"।
मैं जो कुछ भी करता हूं, यह बहुत आसान है। केवल एक चीज यह है कि मैंने प्रदर्शन के लिए एक एलईडी का भी उपयोग किया - यह बिल्कुल भी आवश्यक हिस्सा नहीं है, लेकिन यदि आप अभी भी सब कुछ ठीक से दोहराने का निर्णय लेते हैं, तो एलईडी और एक 470 ओम अवरोधक को पकड़ें (मैंने 510 ओम का उपयोग किया, वास्तव में नहीं इतना बड़ा अंतर, परिणाम वही होगा)। जैसे ही हम सेंसर में कुछ लाएंगे, एलईडी तेज और तेज जलेगी। मेरी स्कीमा इस तरह दिखती है:

टाइमर इंटरप्ट रूटीन

प्रत्येक प्रतिध्वनि स्थिति का पता चलने पर प्रत्येक माप अवधि में टाइमर रुकावट दिनचर्या को दो बार कहा जाता है। हम मानते हैं कि माप चक्र में पहला राज्य परिवर्तन 0 से 1 में परिवर्तन है, और दूसरा 1 से परिवर्तन है। माप अवधि के दौरान इको लाइन की स्थिति में पहले बदलाव के लिए सॉफ्टवेयर प्रतिक्रिया में शामिल हैं।

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

यहाँ क्या किया गया है?

  1. ब्रेडबोर्ड संचालित (लाल और काले तार)। सेंसर को बिजली की आपूर्ति की जाती है। इसके अलावा, कैथोड (डायोड का छोटा टर्मिनल) जमीन से जुड़ा होता है।
  2. पीले रंग के तार से डायोड PWM (PWM) पिन नंबर 9 से जुड़ा होता है, इस तार के जरिए हम अपने डायोड में वोल्टेज लगाएंगे। इस वोल्टेज के मान के आधार पर, डायोड इस रोशनी की तीव्रता को बदल देगा। डायोड को एक प्रतिरोधक के माध्यम से जोड़ा जाना चाहिए आवश्यक रूप से।अन्यथा, हम न केवल डायोड बल्कि हमारे Arduino को भी बर्बाद करने का जोखिम उठाते हैं। डायोड के माध्यम से स्वीकार्य मान तक वर्तमान को सीमित करने के लिए प्रतिरोधी की आवश्यकता होती है। तथ्य यह है कि डायोड का आंतरिक प्रतिरोध बहुत कम है और यदि आप एक प्रतिरोधक का उपयोग नहीं करते हैं, तो डायोड के माध्यम से ऐसी धारा प्रवाहित होगी, जो डायोड और नियंत्रक दोनों को ही जला देगी।
  3. सफेद तार हमारे सेंसर के ट्रिगर से एक तरफ और 10वें से जुड़ा होता है Arduino आउटपुटमेगा (किसी भी डिजिटल आउटपुट का उपयोग किया जा सकता है)। इसके माध्यम से, हमारे नियंत्रक से HC-SR04 को एक "अनुरोध" भेजा जाएगा।
  4. हरा तार हमारे Arduino के 11 वें पिन को जोड़ता है (कोई भी डिजिटल इनपुट) और सेंसर का इको लेग। इस इनपुट पर, हमारा माइक्रोकंट्रोलर सेंसर से सिग्नल मिलने का इंतजार करेगा।


अन्यथा, दूरी की गणना प्रतिध्वनि रेखा पर रिकॉर्ड की गई पल्स लंबाई के आधार पर की जाती है - प्रतिध्वनि और पिंग चर के बीच का अंतर। टाइमर इंटरप्ट हैंडलर में दूरी निर्धारित करने के बाद, दूरी को 4 अंकों के टेक्स्ट फॉर्म में बदल दिया जाता है।

बढ़ती तकनीकी प्रगति के कारण, गतिविधियों की एक स्वचालित श्रृंखला जो पहले विशेष रूप से मैनुअल थी, को स्वचालित किया जा सकता है। इस विकास के सबसे महत्वपूर्ण लाभों में मानवता के लिए बढ़ी हुई सुरक्षा का उल्लेख किया जा सकता है, क्योंकि लोग उच्च जोखिम वाले क्षेत्रों में कम से कम शामिल होते हैं। दूसरे शब्दों में: तकनीकी विकास आधुनिक समाज के विकास को उत्पन्न करता है और ईंधन देता है।



योजना हमेशा की तरह सरल है। लेकिन भविष्य में मैं और अधिक वर्णन करने की योजना बना रहा हूं जटिल योजनाएँजैसा कि मैं उन्हें स्वयं समझता हूं। आइए सॉफ्टवेयर भाग पर चलते हैं:

नियंत्रक फर्मवेयर

तर्क बहुत सरल होगा - हम एक सेंसर की मदद से बाधा की दूरी को मापते हैं और यह दूरी जितनी छोटी होती है - एलईडी पर उतना ही उच्च स्तर सेट होता है। शब्दों से कर्मों तक, कोड:

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

इंट लेडपिन = 9; इंट ट्रिगपिन = 10; इंट इकोपिन = 11; लम्बी दूरी; इंट लेडलेवल; शून्य सेटअप () (पिनमोड (ट्रिगपिन, आउटपुट); पिनमोड (इकोपिन, INPUT);) शून्य लूप () (दूरी = गेटडिस्टेंस (); एलईडीलेवल = (इंट) (दूरी * 10)<=255 ?255 -distance*10 :0 ; analogWrite(ledPin, ledLevel); delay(50 ); } long getEchoTiming() { digitalWrite(trigPin, LOW); delayMicroseconds(2 ); digitalWrite(trigPin, HIGH); delayMicroseconds(10 ); digitalWrite(trigPin, LOW); long duration = pulseIn(echoPin,HIGH); return duration; } long getDistance() { long distacne_cm = getEchoTiming()/29 /2 ; return distacne_cm; }

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

मैंने तृतीय-पक्ष पुस्तकालयों का उपयोग नहीं करने का निर्णय लिया, जो वास्तव में मौजूद हैं, यद्यपि मानक Arduino IDE पैकेज में नहीं। मैंने इसे जानबूझकर किया - इस तरह आप बेहतर ढंग से समझ सकते हैं कि सेंसर कैसे काम करता है।
आइए कार्यों का वर्णन करें:

  • स्थापित करना() - यहां सब कुछ बहुत सरल है, हम केवल नियंत्रक को दिखाते हैं कि पिन नंबर 10 का उपयोग आउटपुट के रूप में किया जाएगा, और लेग नंबर 11 को इनपुट के रूप में। लेग नंबर 9 को निर्दिष्ट करना आवश्यक नहीं है, क्योंकि यह शुरू में इस मोड (PWM आउटपुट) में उपयोग का अर्थ है। मैं आपको PWM (या PWM) के बारे में किसी तरह अलग से बताऊंगा, अगर कोई ताकत है। अभी के लिए, इसे केवल एक आउटपुट के रूप में लें जिसे 0 और 5 वोल्ट के बीच के वोल्टेज पर सेट किया जा सकता है।
  • getEchoTiming() सबसे दिलचस्प कार्य है जहां सभी जादू होता है। सबसे पहले, हम अपने ट्रिगर को तार्किक शून्य (digitalWrite(trigPin, LOW); ) पर सेट करते हैं। यह सुनिश्चित करने के लिए किया जाता है कि कार्यक्रम के किसी अन्य भाग ने इस पिन पर एक तार्किक इकाई स्थापित नहीं की है (शायद दुर्घटना से)। उसके बाद, हम दो माइक्रोसेकंड प्रतीक्षा करते हैं (बहुत, बहुत कम) विलंब माइक्रोसेकंड ( 2 ); लेकिन यह "खरोंच से शुरू करने" के लिए पर्याप्त से अधिक है, इसलिए बोलने के लिए। उसके बाद, हम तर्क को एक से 10 माइक्रोसेकंड पर सेट करते हैं ( डिजिटलराइट (ट्रिगपिन, हाई); विलंब माइक्रोसेकंड (10); डिजिटलवाइट (ट्रिगपिन, लो);). चालू करें, 10 माइक्रोसेकंड प्रतीक्षा करें, बंद करें। सेंसर विनिर्देश के अनुसार, यह ट्रिगर पर बिल्कुल न्यूनतम पल्स अवधि है, जिसके बाद एक अल्ट्रासोनिक सिग्नल उत्पन्न होता है। उसके बाद, हम "हवा को सुनना" लंबी अवधि = पल्स इन (इकोपिन, हाई); शुरू करते हैं। पल्सइन (...) फ़ंक्शन माइक्रोसेकंड में उस समय के बाद एक लंबा मान लौटाता है जब निर्दिष्ट इनपुट पर एक तार्किक दिखाई देता है (हमारे मामले में, यह इनपुट नंबर 11 है)। जैसे ही इनपुट 11 पर एक तार्किक दिखाई देता है, यह विधि माइक्रोसेकंड की संख्या लौटाती है जिसके लिए सिग्नल लौटाया जाता है।
  • getDistance() एक काफी सरल कार्य है। यह सेंटीमीटर में सेंसर के सामने वस्तु की दूरी लौटाता है। ऐसा करने के लिए, यह अभी बताए गए getEchoTiming() से मान प्राप्त करता है और इसे ध्वनि की गति से विभाजित करता है। यह ध्यान देने योग्य है कि हवा में ध्वनि की गति तापमान पर निर्भर करती है, लेकिन चूंकि मेरे पास तापमान संवेदक नहीं है, इसलिए मैंने इस त्रुटि की उपेक्षा की। ध्वनि की गति से विभाजित करने के अलावा, मान को भी 2 से विभाजित किया जाता है, क्योंकि सेंसर से अल्ट्रासाउंड बाधा और पीछे की दूरी को पार कर जाता है।
  • Arduino के साथ प्रोग्रामिंग करते समय लूप () एक मानक और आवश्यक तरीका है। यह चक्रीय रूप से चलता है (खत्म करने के बाद यह हमेशा शुरुआत से शुरू होता है)। इसमें भी, हमारे साथ सब कुछ सरल है। दूरी ली गई है दूरी = getDistance (); , जिसके बाद उस स्तर की गणना की जाती है जिसे LED LEDLevel पर लागू करना है = ( int ) (दूरी*10 )<=255 ?255 -distance*10 :0 ; . यह तुरंत ध्यान देने योग्य है कि Arduino में एनालॉग स्तर 0 और 255 के बीच के मान के रूप में सेट किया गया है। जैसा कि आप देख सकते हैं, मैं इसे मिलीमीटर में बदलने के लिए दूरी को 10 से गुणा करता हूं। यह अधिक स्पष्टता के लिए किया गया था, और कुछ नहीं। एलईडी के लिए स्तर प्राप्त करने के बाद, हम इसे तुरंत आउटपुट नंबर 9 पर सेट करते हैं एनालॉग्राइट (एलईडीपिन, एलईडीलेवल);और लूप() फ़ंक्शन की अगली शुरुआत तक 50 मिलीसेकंड प्रतीक्षा करें।

बस इतना ही, कार्यक्रम तैयार है।

डिवाइस का योजनाबद्ध आरेख

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

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

शुभारंभ
वास्तव में, हमें बस इतना करना है कि USB केबल को Arduino से कनेक्ट करें, उपरोक्त फर्मवेयर को नियंत्रक पर अपलोड करें और प्रयोग करना शुरू करें।

अनुदेश

एक ही समय में कितने स्लेव डिवाइस मास्टर के साथ जुड़ सकते हैं और संचार कर सकते हैं, जिसका अर्थ है कि हम एक रोबोट को ऑर्डर करने के लिए कई फोन का उपयोग कर सकते हैं। समता बिट्स की अनुपस्थिति और केवल एक स्टॉप बिट की उपस्थिति से डेटा ट्रांसमिशन में त्रुटियों की संभावना बढ़ जाती है। इसके लिए रिसीवर पर प्राप्त पैकेटों को सही करने में सक्षम तंत्र के निर्माण की आवश्यकता है।

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

अल्ट्रासोनिक रेंजफाइंडर HC-SR04 का संचालन इकोलोकेशन के सिद्धांत पर आधारित है। यह अंतरिक्ष में ध्वनि स्पंदन उत्सर्जित करता है और बाधा से परावर्तित संकेत प्राप्त करता है। वस्तु की दूरी ध्वनि तरंग के प्रसार समय द्वारा बाधा और वापस निर्धारित की जाती है।
ध्वनि तरंग की शुरुआत रेंजफाइंडर के TRIG लेग पर कम से कम 10 माइक्रोसेकंड की अवधि के साथ एक सकारात्मक पल्स के साथ शुरू होती है। जैसे ही नाड़ी समाप्त होती है, रेंजफाइंडर इसके सामने अंतरिक्ष में 40 किलोहर्ट्ज़ की आवृत्ति के साथ ध्वनि दालों के फटने का उत्सर्जन करता है। उसी समय, परावर्तित सिग्नल के विलंब समय का निर्धारण करने के लिए एल्गोरिथ्म लॉन्च किया जाता है, और रेंजफाइंडर के ईसीएचओ पैर पर एक तार्किक इकाई दिखाई देती है। जैसे ही सेंसर परावर्तित सिग्नल को पकड़ता है, ईसीएचओ पिन पर एक तर्क शून्य दिखाई देता है। इस सिग्नल की अवधि (आकृति में "प्रतिध्वनि विलंब") वस्तु की दूरी निर्धारित करती है।
HC-SR04 रेंजफाइंडर दूरी माप सीमा 0.3 सेमी के रिज़ॉल्यूशन के साथ 4 मीटर तक है।अवलोकन कोण 30 डिग्री है, प्रभावी कोण 15 डिग्री है। ऑपरेशन के दौरान स्टैंडबाय मोड 2 mA में वर्तमान खपत - 15 mA।

अल्ट्रासोनिक दूरी सेंसर

उपकरण का अंतिम प्रमुख टुकड़ा अल्ट्रासोनिक सेंसर है। सेंसर संपर्क नहीं करता है और इकोलोकेशन के सिद्धांत पर काम करता है। यह लगभग 3 मिमी की सटीकता के साथ-साथ निम्नलिखित सीमाओं के बीच एक बाधा की दूरी को माप सकता है: 2 सेमी - निचली सीमा और 4 मीटर - ऊपरी सीमा।

अनुसंधान एल्गोरिथ्म का विवरण

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

अल्ट्रासोनिक रेंजफाइंडर +5 V द्वारा संचालित है। अन्य दो पिन किसी भी Arduino डिजिटल पोर्ट से जुड़े हैं, हम 11 और 12 से जुड़ेंगे।



अब एक स्केच लिखते हैं जो बाधा की दूरी निर्धारित करता है और इसे सीरियल पोर्ट पर आउटपुट करता है। सबसे पहले, हम TRIG और ECHO पिन नंबर सेट करते हैं - ये पिन 12 और 11 हैं। फिर हम ट्रिगर को आउटपुट और इको को इनपुट के रूप में घोषित करते हैं। हम सीरियल पोर्ट को 9600 बॉड पर इनिशियलाइज़ करते हैं। चक्र के प्रत्येक पुनरावृत्ति में फंदा()हम दूरी पढ़ते हैं और इसे पोर्ट पर आउटपुट करते हैं।
समारोह getEchoTiming ()एक स्टार्ट पल्स उत्पन्न करता है। यह सिर्फ 10 माइक्रोसेकंड का एक आवेग पैदा करता है, जो रेंजफाइंडर के लिए अंतरिक्ष में ध्वनि पैकेट का उत्सर्जन शुरू करने के लिए एक ट्रिगर है। फिर वह ध्वनि तरंग के संचरण की शुरुआत से लेकर प्रतिध्वनि के आने तक के समय को याद करती है।
समारोह गेटडिस्टेंस ()वस्तु से दूरी की गणना करता है। स्कूल भौतिकी पाठ्यक्रम से, हमें याद है कि दूरी गति समय समय के बराबर है: एस = वी * टी। हवा में ध्वनि की गति 340 मी/से है, माइक्रोसेकंड में जो समय हम जानते हैं वह "ड्यूराट्यूयन" है। सेकंड में समय प्राप्त करने के लिए 1,000,000 से विभाजित करें। चूंकि ध्वनि दो बार दूरी तय करती है - वस्तु और पीछे - आपको दूरी को आधे में विभाजित करने की आवश्यकता है। तो यह पता चला है कि वस्तु की दूरी S = 34000 सेमी/सेकंड * अवधि/1.000.000 सेकंड/2 = 1.7 सेमी/सेकंड/100 है, जो कि हमने स्केच में लिखा है। माइक्रोकंट्रोलर विभाजन की तुलना में गुणन संक्रिया को तेजी से करता है, इसलिए मैंने "/ 100" को समतुल्य "* 0.01" से बदल दिया।

रोबोट से जुड़े हार्डवेयर मॉड्यूल और कार्यान्वित एल्गोरिथम अंततः कई सीमाएँ लगाते हैं, जिनकी चर्चा निम्नलिखित पैराग्राफ में की जाएगी। प्रारंभ में, रोबोट भूलभुलैया में कहीं स्थित होगा ताकि साइड सेंसर दीवारों को बाधाओं के रूप में पहचान सकें।

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



साथ ही, अल्ट्रासोनिक रेंजफाइंडर के साथ काम करने के लिए कई पुस्तकालयों को लिखा गया है। उदाहरण के लिए, यह वाला: http://robocraft.ru/files/sensors/Ultrasonic/HC-SR04/ultrasonic-HC-SR04.zip। पुस्तकालय एक मानक तरीके से स्थापित है: डाउनलोड करें, एक निर्देशिका में अनज़िप करें पुस्तकालयों, जो Arduino IDE फ़ोल्डर में स्थित है। इसके बाद पुस्तकालय का उपयोग किया जा सकता है।
लाइब्रेरी स्थापित करने के बाद, आइए एक नया स्केच लिखें। इसके काम का परिणाम समान है - सेंटीमीटर में वस्तु की दूरी सीरियल पोर्ट मॉनिटर में प्रदर्शित होती है। यदि आप स्केच में लिखते हैं फ्लोट dist_cm = अल्ट्रासोनिक। रेंजिंग (INC);, दूरी इंच में प्रदर्शित की जाएगी।

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

यह इस विचार की ओर जाता है कि नोड कनेक्शन बहुत बड़ा नहीं होना चाहिए, ताकि विचलन जितना संभव हो उतना छोटा हो। हम एक चौराहे पर हैं, हम आगे क्या करें? यदि हमारे पास आगे बढ़ने का अवसर है, तो हम पहले इस विकल्प को चुनेंगे, क्योंकि हम वास्तव में नहीं जानते कि आगे बढ़ने के लिए चौराहे पर कहाँ रुकना है।



इसलिए, हमने एक HC-SR04 अल्ट्रासोनिक रेंज फाइंडर को Arduino से जोड़ा और इससे दो अलग-अलग तरीकों से डेटा प्राप्त किया: एक विशेष लाइब्रेरी का उपयोग करके और बिना।
पुस्तकालय का उपयोग करने का लाभ यह है कि कोड की मात्रा काफी कम हो जाती है और कार्यक्रम की पठनीयता में सुधार होता है, आपको डिवाइस की पेचीदगियों में तल्लीन करने की आवश्यकता नहीं होती है और आप तुरंत इसका उपयोग कर सकते हैं। लेकिन यह भी एक खामी है: आपको इस बात की कम समझ है कि डिवाइस कैसे काम करता है और इसमें क्या प्रक्रियाएँ होती हैं। किसी भी मामले में, किस विधि का उपयोग करना आपके ऊपर है।

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

इसके अलावा, भूलभुलैया के भीतर संभावित चक्रों को ध्यान में रखना आवश्यक है। चित्र में मामले पर विचार करें। इस मामले में, कार निर्दिष्ट स्थिति से चलना शुरू कर देगी, और यदि यह हमेशा हर चौराहे पर दाहिनी ओर जाती है, तो यह एक अनंत लूप में प्रवेश करेगी। अनंत लूप समस्या को हल करने के लिए हमें यह समझने की आवश्यकता है कि जब हम उस चौराहे पर पहुँचते हैं जहाँ हम एक अंतराल का सामना किए बिना या एक अदृश्य क्षेत्र में प्रवेश किए बिना एक ही मोड़ पर थे और हैं।