विषयसूची:

Arduino 2-in-1 मॉडल ट्रेन नियंत्रक: 4 चरण
Arduino 2-in-1 मॉडल ट्रेन नियंत्रक: 4 चरण

वीडियो: Arduino 2-in-1 मॉडल ट्रेन नियंत्रक: 4 चरण

वीडियो: Arduino 2-in-1 मॉडल ट्रेन नियंत्रक: 4 चरण
वीडियो: DIY Radar With Ultrasonic Sensor And Chat-GPT Generated Arduino Code | Coders Cafe 2024, सितंबर
Anonim
Arduino 2-in-1 मॉडल ट्रेन नियंत्रक
Arduino 2-in-1 मॉडल ट्रेन नियंत्रक

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

चरण 1: पल्स चौड़ाई मॉडुलन (पीडब्लूएम)

पल्स चौड़ाई मॉडुलन (पीडब्लूएम)
पल्स चौड़ाई मॉडुलन (पीडब्लूएम)

आप में से जो पीडब्लूएम से परिचित नहीं हैं, उनके लिए यह उतना डरावना नहीं है जितना लगता है। हमारे सरल मोटर नियंत्रण अनुप्रयोग के लिए इसका वास्तव में मतलब यह है कि हम कुछ आवृत्ति की एक वर्ग तरंग उत्पन्न करते हैं, और फिर हम कर्तव्य चक्र बदलते हैं। कर्तव्य चक्र को समय के अनुपात के रूप में परिभाषित किया गया है कि तरंग अवधि की तुलना में आउटपुट एक तार्किक उच्च है। आप देख सकते हैं कि ऊपर दिए गए आरेख में 10% कर्तव्य चक्र पर शीर्ष तरंग, 50% कर्तव्य चक्र पर मध्य तरंग और 90% कर्तव्य चक्र पर निचला तरंग है। प्रत्येक तरंग पर मढ़ा धराशायी रेखा मोटर द्वारा देखे गए समतुल्य डीसी वोल्टेज का प्रतिनिधित्व करती है। यह देखते हुए कि Arduino में PWM क्षमता निर्मित है, इस प्रकार के DC मोटर नियंत्रण को उत्पन्न करना वास्तव में बहुत सरल है। पीडब्लूएम का उपयोग करने का एक अन्य लाभ यह है कि यह मोटर को लचर स्टार्टअप से दूर रखने में मदद करता है जो सीधे डीसी का उपयोग करते समय हो सकता है। पीडब्लूएम का एक नुकसान यह है कि पीडब्लूएम की आवृत्ति पर कभी-कभी मोटर से एक श्रव्य शोर होता है।

चरण 2: हार्डवेयर

हार्डवेयर
हार्डवेयर
हार्डवेयर
हार्डवेयर
हार्डवेयर
हार्डवेयर

पहली तस्वीर स्विच और LM298 मोटर ड्राइवर मॉड्यूल के लिए Arduino कनेक्शन दिखाती है। Arduino में आंतरिक रूप से कमजोर पुल-अप प्रतिरोधक होते हैं इसलिए स्विच के लिए किसी पुल-अप प्रतिरोधों की आवश्यकता नहीं होती है। डायरेक्शन स्विच एक साधारण SPST (सिंगल पोल सिंगल थ्रो) स्विच है। थ्रॉटल और ब्रेक स्विच सामान्य रूप से खुले, क्षणिक संपर्क पुश बटन के रूप में दिखाए जाते हैं।

दूसरी तस्वीर ब्लूटूथ मॉड्यूल और LM298 मोटर ड्राइवर मॉड्यूल के लिए Arduino कनेक्शन दिखाती है। ब्लूटूथ TXD आउटपुट सीधे Arduino RX सीरियल इनपुट से जुड़ता है।

तीसरी तस्वीर L298N डुअल एच-ब्रिज मॉड्यूल है। LM298 मॉड्यूल में एक जहाज पर 5 वोल्ट का नियामक है जिसे एक जम्पर द्वारा सक्षम किया जा सकता है। हमें Arduino और ब्लूटूथ के लिए +5 वोल्ट चाहिए लेकिन हम मोटर चलाने के लिए +12 वोल्ट चाहते हैं। इस मामले में हम L298N के "+12V पावर" इनपुट पर +12 वोल्ट लागू करते हैं और हम "5V सक्षम" जम्पर को जगह में छोड़ देंगे। यह 5-वोल्ट नियामक को मॉड्यूल पर "+5 पावर" कनेक्शन को आउटपुट करने की अनुमति देता है। इसे Arduino और ब्लूटूथ से कनेक्ट करें। +12 इनपुट और +5 आउटपुट के लिए ग्राउंड वायर को मॉड्यूल "पावर जीएनडी" से जोड़ना न भूलें।

हम चाहते हैं कि मोटर पर आउटपुट वोल्टेज केवल पूर्ण या पूर्ण बंद होने के बजाय Arduino द्वारा उत्पन्न PWM के आधार पर भिन्न हो। ऐसा करने के लिए, हम "ईएनए" और "ईएनबी" से कूदने वालों को हटाते हैं और मॉड्यूल पर हमारे Arduino PWM आउटपुट को "ENA" से जोड़ते हैं। ध्यान रखें कि वास्तविक सक्षम पिन बोर्ड किनारे के सबसे करीब है ("इनपुट" पिन के बगल में)। प्रत्येक सक्षम के लिए बैक पिन +5 वोल्ट है इसलिए हम यह सुनिश्चित करना चाहते हैं कि हम उससे कनेक्ट न हों।

मॉड्यूल पर "IN1" और "IN2" पिन संबंधित Arduino पिन से जुड़े होते हैं। वे पिन मोटर की दिशा को नियंत्रित करते हैं और, हाँ, एक अच्छा कारण है कि Arduino को केवल मॉड्यूल में स्विच कनेक्ट करने के बजाय उन्हें नियंत्रित करने दें। हम देखेंगे कि सॉफ्टवेयर चर्चा में क्यों।

चरण 3: ब्लूटूथ मॉड्यूल

ब्लूटूथ मॉड्यूल
ब्लूटूथ मॉड्यूल

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

ब्लूटूथ मॉड्यूल को कॉन्फ़िगर करने के लिए आवश्यक है कि आप या तो RS-232 सीरियल पोर्ट या USB पोर्ट के लिए एक इंटरफ़ेस खरीदें या बनाएं। मैं इस पोस्ट में इसे बनाने का तरीका नहीं बताऊंगा लेकिन आपको वेब पर जानकारी खोजने में सक्षम होना चाहिए। या बस एक इंटरफ़ेस खरीदें। कॉन्फ़िगरेशन कमांड एटी कमांड का उपयोग उसी तरह करते हैं जैसे पुराने दिनों में टेलीफोन मोडेम के साथ किया जाता था। मैंने यहां एक उपयोगकर्ता पुस्तिका संलग्न की है जिसमें प्रत्येक मॉड्यूल प्रकार के लिए एटी कमांड शामिल हैं। ध्यान देने वाली एक बात यह है कि HC-06 को अपरकेस कमांड की आवश्यकता होती है और कमांड स्ट्रिंग को 1 सेकंड के भीतर पूरा करना होगा। इसका मतलब है कि बॉड दरों को बदलने जैसी चीजों के लिए कुछ लंबी स्ट्रिंग्स को आपके टर्मिनल प्रोग्राम में कट और पेस्ट करने की आवश्यकता होगी या आपको भेजने के लिए टेक्स्ट फाइल सेट करने की आवश्यकता होगी। अपरकेस आवश्यकता केवल तभी है जब आप कॉन्फ़िगरेशन आदेश भेजने का प्रयास कर रहे हैं। नियमित संचार मोड किसी भी 8-बिट डेटा को स्वीकार कर सकता है।

चरण 4: सॉफ्टवेयर

सॉफ्टवेयर मैनुअल संस्करण और ब्लूटूथ संस्करण दोनों के लिए बहुत सरल है। ब्लूटूथ संस्करण का चयन करने के लिए बस "#define BT_Ctrl" स्टेटमेंट को अनकम्मेंट करें।

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

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

दिशा स्विच की तत्काल हैंडलिंग सुनिश्चित करने के लिए मैंने इसका कोड एक इंटरप्ट हैंडलर में डाल दिया। यह हमें "इंटरप्ट ऑन चेंज" फ़ंक्शन का उपयोग करने की भी अनुमति देता है, इसलिए इससे कोई फर्क नहीं पड़ता कि परिवर्तन निम्न से उच्च या उच्च से निम्न है।

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

इस पोस्ट के लिए बस इतना ही। मेरे अन्य इंस्ट्रक्शंस देखें। यदि आप पीआईसी माइक्रोकंट्रोलर परियोजनाओं में रुचि रखते हैं तो मेरी वेबसाइट www.boomerrules.wordpress.com पर देखें

सिफारिश की: