विषयसूची:
- आपूर्ति
- चरण 1: RX और Arduino को तार दें
- चरण 2: कुछ पीपीएम सिग्नल प्राप्त करना
- चरण 3: ट्रांसमीटर को कॉन्फ़िगर करना
- चरण 4: जॉयस्टिक चलाना
- चरण 5: Arduino को कोड करना
वीडियो: FSX के लिए Arduino आधारित (JETI) PPM से USB जॉयस्टिक कनवर्टर: 5 चरण
2024 लेखक: John Day | [email protected]. अंतिम बार संशोधित: 2024-01-30 09:19
मैंने अपने JETI DC-16 ट्रांसमीटर को मोड 2 से मोड 1 में स्विच करने का निर्णय लिया, जो मूल रूप से थ्रॉटल और लिफ्ट को बाएं से दाएं और इसके विपरीत स्विच करता है। चूँकि मैं अपने मस्तिष्क में कुछ बाएँ/दाएँ भ्रम के कारण अपने एक मॉडल को क्रैश नहीं करना चाहता था, मैं सोच रहा था कि क्या FSX में थोड़ा अभ्यास करना संभव है।
मैंने पढ़ा और परीक्षण किया कि जेईटीआई ट्रांसमीटर वास्तव में बॉक्स से बाहर जॉयस्टिक मोड का समर्थन करते हैं, हालांकि मैं कुल्हाड़ियों और स्विच असाइनमेंट के लिए पूर्ण लचीलापन चाहता था और वास्तविक मॉडल के साथ TX का उपयोग करता था। रिसीवर के आउटपुट का उपयोग करके, डीसी -16 में सिग्नल प्रोसेसिंग का लाभ उठाना और मिक्सर, उड़ान चरणों, दोहरी दरों का उपयोग करना संभव है, जो भी आप वहां प्रोग्राम कर सकते हैं।
हाल ही में मुझे एक प्रो माइक्रो जैसे सस्ते Arduino से USB HID इनपुट डिवाइस बनाने का एक अच्छा ट्यूटोरियल मिला, जिसका नाम जॉयस्टिक है:
www.instructables.com/id/Create-a-Joystick…
यह एक विमान/हेलीकॉप्टर/जो कुछ भी FSX में नियंत्रित करने के लिए आवश्यक सब कुछ सक्षम करेगा! बहुत सारे कुल्हाड़ी और बटन उपलब्ध हैं।
चूँकि मेरे पास बस एक अतिरिक्त JETI RSAT2 था, मैंने इसे Arduino के साथ तार-तार करने का निर्णय लिया और जॉयस्टिक लाइब्रेरी के साथ एक छोटा PPM पार्सर लागू करने का प्रयास किया।
मैं मान रहा हूं कि इन चरणों का पालन करने वाला कोई भी व्यक्ति Arduino को जोड़ने और प्रोग्रामिंग करने से परिचित है। मैं खराबी या क्षति के लिए कोई वारंटी नहीं लूंगा!
आपूर्ति
आपको चाहिये होगा…
- जॉयस्टिक लाइब्रेरी द्वारा समर्थित कोई भी Arduino, मैंने स्पार्कफुन प्रो माइक्रो 5V / 16 मेगाहर्ट्ज का उपयोग किया
- Arduino IDE का नवीनतम संस्करण
- कोई भी RC रिसीवर PPM सिग्नल आउटपुट करता है, जैसे JETI RSAT2
- कुछ जम्पर तार (मिनट 3)
- Arduino IDE में स्थापित जॉयस्टिक लाइब्रेरी
- आर्डिनो-टाइमर लाइब्रेरी:
चरण 1: RX और Arduino को तार दें
वायरिंग काफी सीधी है। मैंने केवल USB से Arduino को पावर देने का निर्णय लिया, क्योंकि यह जॉयस्टिक डिवाइस का अनुकरण करेगा। यह 5V के साथ Arduino की आपूर्ति करेगा, जिसका उपयोग RC रिसीवर को पावर देने के लिए भी किया जा सकता है।
मैंने पिन वीसीसी का उपयोग किया, जो विनियमित आउटपुट प्रदान करता है, और निकटतम जीएनडी पिन - बस इसे पीपीएम के कनेक्टर + और - पिन से कनेक्ट करें। जब Arduino संचालित हो जाता है, तो रिसीवर अब भी शक्ति प्रदान कर रहा है।
पीपीएम सिग्नल के लिए, मैंने उन्हें पार्स करने के लिए इंटरप्ट का उपयोग करने का निर्णय लिया। व्यवधान उपलब्ध हैं उदा। पिन 3 पर, तो बस इसे वहां कनेक्ट करें - आर्डिनो पर कोई "देशी आरसी पिन" नहीं है, लेकिन संभवतः रिसीवर सिग्नल में पढ़ने के अधिक और अलग-अलग तरीके हैं।
मुझे आरएक्स वोल्टेज अलार्म को अक्षम करना पड़ा, क्योंकि यूएसबी आपूर्ति के साथ वीसीसी वोल्टेज केवल 4.5V के आसपास होगा - लेकिन काफी स्थिर, इसलिए कोई समस्या नहीं है।
चरण 2: कुछ पीपीएम सिग्नल प्राप्त करना
जब रिसीवर और TX संचालित होता है, तो मुझे पीपीएम सिग्नल मिल रहे थे जैसे कि छवि में दिखाया गया है। 16 चैनल, हमेशा के लिए दोहराए गए। यदि RSAT पर Failsafe अक्षम है और ट्रांसमीटर बंद है, तो PPM आउटपुट अक्षम हो जाएगा।
पीपीएम पर अधिक जानकारी यहां उपलब्ध है:
- https://en.wikipedia.org/wiki/Pulse-position_modul…
- https://wiki.rc-network.de/index.php/PPM
चूंकि मैं इस मामले में वास्तविक सामान नहीं उड़ा रहा हूं, इसलिए मैंने सैद्धांतिक समय की परवाह नहीं की और सिर्फ आस्टसीलस्कप पर पता लगाया कि स्टिक्स को पूरी तरह से बाएं से पूरी तरह से दाएं (TX में मानक सेटिंग्स) ले जाने पर मेरा रिसीवर क्या आउटपुट कर रहा था।. ऐसा लग रहा था -100% दालों से मेल खाती है जिनकी लंबाई 600µs, और +100% से 1600µs तक होती है। मैंने अपने Arduino कोड में पॉज़ पल्स (400µs) की लंबाई की भी परवाह नहीं की, लेकिन मैंने मिनट की एक फ्रेम रिक्ति मान ली। 3000μs।
चरण 3: ट्रांसमीटर को कॉन्फ़िगर करना
चूंकि केवल नियंत्रण सतहों की वास्तविक स्थिति को जानने की जरूरत है, प्रति आरसी फ़ंक्शन एक चैनल / "सर्वो" पर्याप्त है। नतीजतन, एक सामान्य आरसी मॉडल के समान एक साधारण ट्रांसमीटर सेटअप बनाया जा सकता है। मुख्य कार्य एलेरॉन, एलेवेटर, रडर और थ्रॉटल प्रत्येक को क्रमशः ट्रांसमीटर चैनल केवल एक सर्वो की आवश्यकता होती है। मैंने फ्लैप, ब्रेक और गियर भी जोड़े, जिससे अब तक 9 चैनल फ्री हो गए हैं। कृपया ध्यान दें कि फ्लैप एक उड़ान चरण पर लगाए गए थे, और सीधे छड़ी, स्लाइडर या बटन के माध्यम से नियंत्रित नहीं होते हैं।
चरण 4: जॉयस्टिक चलाना
जॉयस्टिक पुस्तकालय का उपयोग करना काफी आसान है, और कुछ उदाहरण और परीक्षण प्रदान करता है। पहले यह जांचना मददगार होना चाहिए कि क्या Arduino को उचित जॉयस्टिक के रूप में पाया गया है, प्रवेश अनुभाग में जुड़े निर्देश और पुस्तकालय स्वयं कुछ अच्छा मार्गदर्शन प्रदान करते हैं।
उपकरण और प्रिंटर नियंत्रण कक्ष में, Arduino "Sparkfun Pro Micro" के रूप में दिखाई दे रहा था, और जॉयस्टिक परीक्षण विंडो 7 अक्ष और बहुत सारे समर्थित बटन दिखा रहा था। Arduino में प्रोग्राम किए जाने पर भी एक हैट स्विच का उपयोग किया जा सकता है।
चरण 5: Arduino को कोड करना
जो अभी भी गायब है वह है पीपीएम सिग्नल की वास्तविक पार्सिंग और जॉयस्टिक कुल्हाड़ियों और बटनों को असाइनमेंट। मैंने निम्नलिखित मानचित्रण के लिए निर्णय लिया:
चैनल / फंक्शन / जॉयस्टिक असाइनमेंट:
- थ्रॉटल -> थ्रॉटल एक्सिस
- ऐलेरॉन -> एक्स अक्ष
- लिफ्ट -> वाई अक्ष
- पतवार -> एक्स रोटेशन अक्ष
- फ्लैप -> वाई रोटेशन अक्ष
- ब्रेक -> जेड अक्ष
- गियर -> बटन 0
जब गियर नीचे हो, तो जॉयस्टिक का पहला बटन दबाया जाएगा और गियर को ऊपर उठाते समय छोड़ा जाएगा। हालाँकि, इसके लिए FSX के लिए FSUIPC की आवश्यकता होगी, बॉक्स के बाहर, FSX गियर को चालू करने के लिए केवल एक बटन को स्वीकार करेगा, जो कि मेरे मॉडलों के साथ बिल्कुल नहीं हो रहा है।
मैंने कोड का अपना वर्तमान संस्करण बहुत सारी टिप्पणियों के साथ प्रदान किया है, जो मेरे लिए काफी अच्छा काम कर रहा है - बेझिझक अपना असाइनमेंट बदलें या नए फ़ंक्शन जोड़ें। अंतिम 9 RC चैनल वर्तमान में उपयोग नहीं किए जाते हैं।
सेटअप के लिए, जॉयस्टिक वर्ग को प्रारंभ करने की आवश्यकता है, मूल रूप से संख्यात्मक अक्ष श्रेणियों को परिभाषित करके:
/* सेट एक्सिस रेंज (हेडर में परिभाषित, 0 - 1000) */
Joystick.setXAxisRange(CHANNEL_MIN, CHANNEL_MAX); Joystick.setYAxisRange(CHANNEL_MIN, CHANNEL_MAX); …
0 से 1000 तक के मानों का उपयोग करके, पल्स लंबाई (600 - 1600μs) को जॉयस्टिक मानों में बिना रीस्केलिंग के सीधे मैप करना संभव है।
DIN 3 को डिजिटल इनपुट, पुलअप सक्षम, और एक इंटरप्ट संलग्न के रूप में प्रारंभ किया गया है:
पिनमोड (PPM_PIN, INPUT_PULLUP);
अटैचइंटरप्ट (डिजिटलपिनटोइंटरप्ट (पीपीएम_पिन), पीपीएम_पिन_चेंज, चेंज);
डिबगिंग उद्देश्यों के लिए, मैंने arduino-timer लाइब्रेरी का उपयोग करते हुए, नियमित अंतराल में सीरियल इंटरफ़ेस के माध्यम से कुछ प्रिंटआउट जोड़े:
अगर (SERIAL_PRINT_INTERVAL > 0) {
शेड्यूलर.हर (SERIAL_PRINT_INTERVAL, (void*) -> बूल {SerialPrintChannels(); रिटर्न ट्रू; }); }
जब भी पिन का तार्किक मान बदलेगा, तो पिन इंटरप्ट को कॉल किया जाएगा, इसलिए पीपीएम सिग्नल में प्रत्येक किनारे के लिए। माइक्रो () का उपयोग करके साधारण समय से नाड़ी की लंबाई का मूल्यांकन करें:
uint32_t curTime = माइक्रो ();
uint32_t पल्सलेंथ = कर्टटाइम - एजटाइम; uint8_t curState = digitalRead (PPM_PIN);
वर्तमान पिन की स्थिति का मूल्यांकन करके और इसे नाड़ी की लंबाई और पिछले दालों के साथ जोड़कर, नई दालों को वर्गीकृत किया जा सकता है। निम्नलिखित सशर्त इंटरफ्रेम अंतर का पता लगाएगा:
अगर (अंतिम स्थिति == 0 && पल्सलेंथ> 3000 && पल्सलेंथ <6000)
बाद की दालों के लिए, पल्स लंबाई को जॉयस्टिक अक्ष सीमा से मेल खाने के लिए पल्स लंबाई को क्लिपिंग और बायस करके अक्ष स्थिति में मैप किया जाएगा:
uint16_t rxLength = पल्सलेंथ;
rxLength = (rxLength > १६००) ? १६००: rxLength; rxLength = (rxLength <600)? 600: rxLength; rxChannels[curChannel] = rxLength - ६००;
rxChannels सरणी में अंततः 0 - 1000 से 16 मान होते हैं, जो स्टिक / स्लाइडर और बटन की स्थिति को दर्शाता है।
16 चैनल प्राप्त करने के बाद, जॉयस्टिक की मैपिंग की जाती है:
/* कुल्हाड़ियों */
जॉयस्टिक.सेट थ्रॉटल (चैनल [0]); जॉयस्टिक.सेटएक्सएक्सिस (चैनल [1]); Joystick.setYAxis(1000 - चैनल[2]); Joystick.setRxAxis (चैनल [3]); Joystick.setRyAxis (चैनल [4]); Joystick.setZAxis(1000 - चैनल[5]); /* बटन */ जॉयस्टिक.सेटबटन (0, (चैनल [6] <500? 1: 0)); /* USB के माध्यम से डेटा अपडेट करें */ Joystick.sendState();
मैंने कोड में कुछ कुल्हाड़ियों को उल्टा कर दिया, जो कि बिल्कुल आवश्यक नहीं है, क्योंकि धुरी को सर्वो दिशा या FSX में असाइनमेंट को फ़्लिप करके भी उलटा किया जा सकता है। हालाँकि, मैंने सर्वो निर्देश और मूल FSX असाइनमेंट रखने का निर्णय लिया।
थ्रेसहोल्डिंग चैनल 7 द्वारा बटन को चालू या बंद किया जाता है।
और शेड्यूलर पर टिक करना न भूलें…अन्यथा, कोई डिबग प्रिंट दिखाई नहीं देगा।
शून्य लूप () {
अनुसूचक.टिक (); }
मैंने जो स्क्रीनशॉट संलग्न किया है उसमें आप देख सकते हैं, चैनल 1 को 1000 (पूर्ण गला घोंटना) से 0 (निष्क्रिय) में ले जाया गया था।
FSX किसी भी अन्य जॉयस्टिक की तरह ही Arduino का पता लगाएगा, इसलिए बस बटन और कुल्हाड़ियों को असाइन करें और आनंद लें!
इस दृष्टिकोण के बारे में मुझे वास्तव में क्या पसंद है, आप अपने ट्रांसमीटर का उपयोग वास्तविक मॉडल के रूप में कर सकते हैं, उदा। उड़ान चरणों आदि का उपयोग करना।
सिफारिश की:
आवृत्ति कनवर्टर के लिए DIY तापमान: 4 कदम
DIY तापमान से आवृत्ति कनवर्टर: तापमान सेंसर सबसे महत्वपूर्ण प्रकार के भौतिक सेंसर में से एक हैं, क्योंकि कई अलग-अलग प्रक्रियाएं (रोजमर्रा की जिंदगी में भी) तापमान द्वारा नियंत्रित होती हैं। इसके अलावा, तापमान माप अन्य भौतिक के अप्रत्यक्ष निर्धारण की अनुमति देता है
Arduino के लिए जॉयस्टिक नियंत्रण कैसे बनाएं: 3 चरण
Arduino के लिए जॉयस्टिक नियंत्रण कैसे करें: इस निर्देश में, मैं आपको दिखाऊंगा कि कैसे Arduino के लिए लेगो जॉयस्टिक बनाया जाता है
3.3V उपकरणों के लिए सरल DIY तर्क कनवर्टर: 4 चरण
3.3V उपकरणों के लिए सरल DIY लॉजिक कन्वर्टर: इस पोस्ट में, मैं आपको दिखाऊंगा कि कैसे आप 5V सेंसर को नए Arduino बोर्ड और रास्पबेरी पाई से जोड़ने के लिए अपना खुद का 5V से 3.3V लॉजिक कन्वर्टर बना सकते हैं। हमें लॉजिक लेवल कन्वर्टर IC की आवश्यकता क्यों है ?आप में से अधिकांश को Arduino और Raspberry Pi duri के साथ खेलना पसंद है
Arduino आधारित गैर संपर्क इन्फ्रारेड थर्मामीटर - Arduino का उपयोग करते हुए IR आधारित थर्मामीटर: 4 चरण
Arduino आधारित गैर संपर्क इन्फ्रारेड थर्मामीटर | Arduino का उपयोग करते हुए IR आधारित थर्मामीटर: हाय दोस्तों इस निर्देश में हम arduino का उपयोग करके एक गैर संपर्क थर्मामीटर बनाएंगे। चूंकि कभी-कभी तरल / ठोस का तापमान बहुत अधिक होता है या कम होता है और फिर इसके साथ संपर्क बनाना और इसे पढ़ना कठिन होता है। तापमान तो उस दृश्य में
मौसम आधारित संगीत जेनरेटर (ESP8266 आधारित मिडी जेनरेटर): 4 चरण (चित्रों के साथ)
वेदर बेस्ड म्यूजिक जेनरेटर (ESP8266 बेस्ड मिडी जेनरेटर): हाय, आज मैं आपको बताऊंगा कि कैसे अपना खुद का छोटा वेदर बेस्ड म्यूजिक जेनरेटर बनाया जाता है। यह ESP8266 पर आधारित है, जो एक Arduino की तरह है, और यह तापमान, बारिश पर प्रतिक्रिया करता है और प्रकाश की तीव्रता। यह उम्मीद न करें कि यह संपूर्ण गीत या राग कार्यक्रम बना देगा