- आवश्यक शर्तें
- सर्किट आरेख
- एयर माउस के लिए प्रोसेस फ्लो
- एयर माउस के लिए Arduino प्रोग्रामिंग
- पायथन ड्राइवर स्क्रिप्ट
- Arduino एयर माउस का परीक्षण
कभी आपने सोचा है कि कैसे हमारी दुनिया डूबती जा रही है। हम आभासी वास्तविकता, मिश्रित वास्तविकता, संवर्धित वास्तविकता आदि का उपयोग करके अपने आसपास के साथ बातचीत करने के लिए लगातार नए तरीके और तरीके ढूंढ रहे हैं। नई डिवाइस हर दिन इन नई पेसिंग प्रौद्योगिकियों के साथ अपनी नई इंटरैक्टिव प्रौद्योगिकियों द्वारा हमें प्रभावित करने के लिए आ रही हैं।
गेमिंग, इंटरएक्टिव गतिविधियों, मनोरंजन और कई अन्य अनुप्रयोगों में इन इमर्सिव तकनीकों का उपयोग किया जाता है। इस ट्यूटोरियल में, हम ऐसे इंटरेक्टिव तरीके के बारे में जानने जा रहे हैं जो आपको बोरिंग माउस का उपयोग करने के बजाय अपने सिस्टम के साथ बातचीत करने का एक नया तरीका देता है। हमारे गेमिंग गीक्स को पता होना चाहिए कि कुछ साल पहले निंटेंडो एक गेमिंग कंपनी Wii कंट्रोलर के रूप में ज्ञात हैंडहेल्ड कंट्रोलर की मदद से अपने कंसोल के साथ बातचीत करने के लिए एक 3D इंटरैक्टिव विधि का एक विचार बेचती है। यह गेम के लिए आपके इशारों का पता लगाने और वायरलेस तरीके से सिस्टम में भेजने के लिए एक्सेलेरोमीटर का उपयोग करता है । यदि आप इस तकनीक के बारे में अधिक जानना चाहते हैं, तो आप उनके पेटेंट EP1854518B1 की जांच कर सकते हैं, इससे आपको पूरी जानकारी मिल जाएगी कि यह तकनीक कैसे काम करती है।
इस विचार से प्रेरित होकर हम एक "एयर माउस" बनाने जा रहे हैं , सिस्टम को हवा में कंसोल को स्थानांतरित करने के साथ बातचीत करने के लिए, लेकिन 3-आयामी समन्वयित संदर्भों का उपयोग करने के बजाय, हम केवल 2-आयामी समन्वय संदर्भों का उपयोग करने जा रहे हैं हम कंप्यूटर माउस के कार्यों की नकल कर सकते हैं क्योंकि माउस दो आयामों X और Y में काम करता है।
इस वायरलेस 3 डी एयर माउस के पीछे की अवधारणा बहुत सरल है, हम एक्स और वाई-एक्सिस के साथ "एयर माउस" के कार्यों और गतियों के त्वरण के मूल्य को प्राप्त करने के लिए एक्सेलेरोमीटर का उपयोग करेंगे, और फिर मूल्यों के आधार पर एक्सेलेरोमीटर हम माउस कर्सर को नियंत्रित करेंगे और कंप्यूटर पर चलने वाले अजगर सॉफ्टवेयर ड्राइवरों की मदद से कुछ क्रियाएं करेंगे।
आवश्यक शर्तें
- Arduino नैनो (कोई भी मॉडल)
- एक्सेलेरोमीटर ADXL335 मॉड्यूल
- ब्लूटूथ HC-05 मॉड्यूल
- पुश बटन
- पायथन स्थापित कंप्यूटर
कंप्यूटर में अजगर स्थापित करने के बारे में अधिक जानने के लिए Arduino-Python LED Controlling के पिछले ट्यूटोरियल का अनुसरण करें।
सर्किट आरेख
अपने हाथ के आंदोलनों के साथ अपने कंप्यूटर को नियंत्रित करने के लिए आपको एक एक्सेलेरोमीटर की आवश्यकता होती है जो एक्स और वाई-एक्सिस के साथ त्वरण देता है और पूरे सिस्टम को वायरलेस बनाने के लिए एक ब्लूटूथ मॉड्यूल का उपयोग आपके सिस्टम को वायरलेस तरीके से सिग्नल स्थानांतरित करने के लिए किया जाता है।
यहाँ एक ADXL335 एक्सेलेरोमीटर का उपयोग किया जाता है, यह X, Y, और Z- एक्सिस के साथ त्वरण का उत्पादन करने वाला एक MEMS- आधारित ट्रिपल एक्सिस मॉड्यूल है, लेकिन जैसा कि माउस को नियंत्रित करने के लिए पहले कहा गया था कि हमें एक्स और वाई-एक्सिस के साथ केवल त्वरण की आवश्यकता होगी । हमारी पिछली परियोजनाओं के साथ Arduino के साथ ADXL335 एक्सेलेरोमीटर का उपयोग करने के बारे में अधिक जानें:
- जीपीएस, जीएसएम और एक्सेलेरोमीटर का उपयोग कर Arduino आधारित वाहन दुर्घटना चेतावनी प्रणाली
- पिंग पोंग गेम Arduino और एक्सेलेरोमीटर का उपयोग कर
- Arelino का उपयोग कर एक्सेलेरोमीटर आधारित हैंड जेस्चर नियंत्रित रोबोट
- Arduino का उपयोग करके भूकंप डिटेक्टर अलार्म
के यहाँ Xout और Yout पिन accelerometer Arduino के अनुरूप, A0, और A1 पिन करने के लिए और इस प्रणाली के लिए Arduino से संकेत संचारित करने के लिए जुड़े हुए हैं ब्लूटूथ मॉड्यूल कोर्ट-05, यहाँ प्रयोग किया जाता है के बाद से ब्लूटूथ TX और Rx पर काम करता है पिन कनेक्शन, इसलिए हम सॉफ्टवेयर सीरियल पिन डी 2 और डी 3 का उपयोग करते हैं। यह सॉफ्टवेयर सीरियल का उपयोग करके जुड़ा हुआ है क्योंकि अगर हम ब्लूटूथ को हार्डवेयर सीरियल से जोड़ते हैं और अजगर कंसोल पर रीडिंग प्राप्त करना शुरू करते हैं तो यह बेमेल दर के लिए त्रुटियां दिखाएगा क्योंकि ब्लूटूथ अपने स्वयं केud दर पर अजगर के साथ संचार कर रहा होगा। Arduino सहित विभिन्न माइक्रोकंट्रोलर का उपयोग करके विभिन्न ब्लूटूथ आधारित परियोजनाओं के माध्यम से जाकर ब्लूटूथ मॉड्यूल का उपयोग करने के बारे में अधिक जानें।
यहां हमने तीन पुश बटन का उपयोग किया है - एक एयर माउस को ट्रिगर करने के लिए, और अन्य दो बाएं और दाएं क्लिक के लिए जैसा कि नीचे की छवि में दिखाया गया है:
एयर माउस के लिए प्रोसेस फ्लो
प्रवाह चार्ट Arduino आधारित एयर माउस की प्रक्रिया प्रवाह को दर्शाता है:
1. सिस्टम को मैकेनिकल ट्रिगर के लिए लगातार जांचना होता है जब तक कि इसे दबाया नहीं जाता है हम कंप्यूटर माउस के साथ सामान्य रूप से काम कर सकते हैं।
2. जब सिस्टम बटन प्रेस का पता लगाता है, तो माउस के नियंत्रण को वायु माउस में स्थानांतरित कर दिया जाता है।
3. जैसे ही ट्रिगर बटन दबाया जाता है, सिस्टम माउस के रीडिंग को कंप्यूटर पर ट्रांसफर करना शुरू कर देता है। सिस्टम रीडिंग में एक्सीलेरोमीटर रीडिंग, और लेफ्ट और राइट क्लिक के लिए रीडिंग शामिल हैं।
4. सिस्टम रीडिंग में 1 बाइट या 8 बिट्स की डेटा स्ट्रीम शामिल होती है, जिसमें पहले तीन बिट्स में एक्स-निर्देशांक होते हैं, दूसरे तीन बिट्स में वाई-कॉर्डिनेट होते हैं, दूसरा अंतिम बिट प्राप्त करने के लिए स्टेटस बिट होता है। माउस के बाएं क्लिक की स्थिति और अंतिम बिट की स्थिति राइट क्लिक की स्थिति प्राप्त करने के लिए है।
5. पहले तीन बिट्स यानी X-निर्देशांक का मूल्य 100 <= Xcord <= 999 से हो सकता है, जबकि Y-निर्देशांक का मान 100 <= Ycord <= 800 से हो सकता है। राइट क्लिक और लेफ्ट क्लिक के मान 0 या 1 बाइनरी मान हैं, जिसमें 1 इंगित करता है कि क्लिक किया गया है और 0 वह क्लिक उपयोगकर्ता द्वारा नहीं किया गया है।
6. बटन को उछालने न देना कर्सर की स्थिति को प्रभावित करता है माउस के ट्रिगर बटन के हर क्लिक के बाद 4 सेकंड की ज्ञात देरी को रखा जाता है।
7. एयर माउस में राइट और लेफ्ट क्लिक के लिए, हमें पहले लेफ्ट या राइट पुशबटन को दबाना होगा, और उसके बाद, हमें उस माउस माउस की स्थिति में जाने के लिए ट्रिगर बटन दबाना होगा जहाँ हम चाहते हैं।
एयर माउस के लिए Arduino प्रोग्रामिंग
एक्स और वाई-एक्सिस में त्वरण मूल्यों को पढ़ने के लिए Arduino को प्रोग्राम किया जाना चाहिए। पूरा कार्यक्रम के अंत में दिया जाता है, नीचे दिए गए कोड से महत्वपूर्ण के टुकड़े कर रहे हैं।
वैश्विक चर की स्थापना
जैसा कि पहले कहा गया था कि हम सॉफ्टवेयर सीरियल पिन के साथ ब्लूटूथ मॉड्यूल को हुक करेंगे। इसलिए सॉफ्टवेयर सीरियल सेट करने के लिए हमें सॉफ्टवेयर सीरियल की लाइब्रेरी घोषित करने की जरूरत है और टीएक्स और आरएक्स के लिए पिन सेट करें। Arduino नैनो और Uno Pin 2 और 3 में एक सॉफ्टवेयर सीरियल के रूप में काम कर सकते हैं। अगला, हम Tx और Rx के लिए पिन सेट करने के लिए सॉफ़्टवेयर सीरियल लाइब्रेरी से ब्लूटूथ ऑब्जेक्ट की घोषणा करते हैं।
#शामिल
व्यर्थ व्यवस्था()
में सेटअप समारोह, हम कार्यक्रम है कि क्या वे इनपुट या आउटपुट रूप में कार्य करेगा बताने के लिए चर सेट करने के लिए जा रहे हैं। ट्रिगर बटन को इनपुट पुल-अप के रूप में सेट किया जाएगा, और बाएं और दाएं क्लिक को इनपुट के रूप में घोषित किया जाएगा और उन्हें इनपुट पुलअप के रूप में कार्य करने के लिए उच्च के रूप में सेट किया जाएगा।
धारावाहिक और ब्लूटूथ संचार के लिए बॉड दर को 9600 पर सेट करें।
शून्य सेटअप () { pinMode (x, INPUT); पिनमोड (y, INPUT); pinMode (ट्रिगर, INPUT_PULLUP) पिनमोड (lclick, INPUT); पिनमोड (rclick, INPUT); पिनमोड (एलईडी, OUTPUT); digitalWrite (lclick, HIGH); digitalWrite (rclick, HIGH); सीरियल.बेगिन (9600); bluetooth.begin (9600); }
शून्य लूप ()
जैसा कि हमें यह बताने के लिए ट्रिगर बटन की आवश्यकता होगी जब हमें सिस्टम को डेटा स्ट्रीम भेजने की आवश्यकता होती है, इसलिए हम पूरे कोड को लूप के अंदर सेट करते हैं जो लगातार पुल-अप ट्रिगर की डिजिटल स्थिति की निगरानी करेंगे, क्योंकि यह कम हो जाएगा प्रसंस्करण के लिए इसे और पास करें।
जब हमने ट्रिगर बटन दबाए जाने के लिए सिस्टम की स्थिति जानने के लिए हमें एक एलईडी संलग्न किया है, तो हम शुरू में लूप के बाहर कम सेट करते हैं क्योंकि यह डिफ़ॉल्ट स्थिति है और जबकि लूप के अंदर उच्च होगा जो एलईडी को हल्का करेगा । जब भी ट्रिगर बटन दबाया जाता है ।
बाएं और दाएं क्लिक बटन की स्थिति को पढ़ने के लिए हमने विश्व स्तर पर दो चर lclick और rclick घोषित किए हैं जिनके मूल्य शुरुआत में 0 पर सेट किए गए थे।
और लूप में , उन वेरिएबल्स का मान बाईं और दाईं ओर दिए गए बटन के डिजिटल स्टेटस के हिसाब से सेट करें कि बटन दबाए जाएं या नहीं।
हम एक्सीलरोमीटर के X और Y आउट पिंस के मान को analogRead फ़ंक्शन का उपयोग करते हुए पढ़ रहे होंगे और माउस पॉइंटर को पूरी स्क्रीन पर ले जाने के लिए स्क्रीन साइज़ पर उन मानों को मैप करेंगे। चूंकि स्क्रीन का आकार स्क्रीन में पिक्सल है, इसलिए हमें इसे तदनुसार सेट करने की आवश्यकता है और जैसा कि हमें आउटपुट मान की आवश्यकता है तीन अंक होने के लिए हमने एक्स के लिए सीमा को जानबूझकर 100 <= एक्स <= 999 के रूप में सेट किया है और इसी तरह। Y के लिए मान 100 <= Y <= 800 के रूप में। याद रखें, पिक्सल को ऊपरी बाएँ कोने से पढ़ा जा रहा है अर्थात शीर्ष बाएँ कोने में मान (0,0) है, लेकिन चूंकि हमने x और y के लिए तीन अंक घोषित किए हैं, इसलिए हमारे मान बिंदु (100,100) से पढ़े जाएंगे।
इसके अलावा, निर्देशांक और सीरियल और ब्लूटूथ पर क्लिक के साथ Serial.print और bluetooth.print कार्यों की मदद से वे सीरियल मॉनिटर पर मान प्राप्त करने में मदद करते हैं और ब्लूटूथ के माध्यम से आपके सिस्टम पर।
अंत में, एक बटन के उछल जाने के कारण एक ही मान दोहराया जा सकता है जो एक माउस कर्सर को एक ही स्थिति में अधिक देर तक चलने का कारण होगा, इसलिए इससे छुटकारा पाने के लिए हमें इस देरी को जोड़ना होगा।
शून्य लूप () { digitalWrite (led, LOW); जबकि (digitalRead (ट्रिगर) == कम) { digitalWrite (led, HIGH); lstate = digitalRead (lclick); rstate = digitalRead (rclick); xh = analogRead (x); yh = analogRead (y); xcord = map (xh, 286,429,100,999); ycord = map (yh, 282,427,100,800); सिरियल.प्रिंट (xcord); सिरियल.प्रिंट (ycord); if (lstate == LOW) Serial.print (1); और सीरियल। छाप (0); if (rstate == LOW) Serial.print (1); और सीरियल। छाप (0); bluetooth.print (xcord); bluetooth.print (ycord); if (lstate == LOW) bluetooth.print (1); अन्य bluetooth.print (0); if (rstate == कम) bluetooth.print (1); अन्य ब्लूटूथ.प्रिंट (0); देरी (4000); }}
पायथन ड्राइवर स्क्रिप्ट
अब तक, हमने हार्डवेयर और उसके फर्मवेयर भाग के साथ काम पूरा कर लिया है, अब एयर माउस को काम करने के लिए हमें एक ड्राइवर स्क्रिप्ट की आवश्यकता है जो एयर माउस से संकेतों को कर्सर की चाल में डिकोड कर सके, इसलिए इसके लिए, हमने चुना है अजगर। पायथन एक स्क्रिप्टिंग भाषा है और यहां स्क्रिप्टिंग से हमारा मतलब है कि यह हमें दूसरे प्रोग्राम का नियंत्रण पाने में मदद करता है, क्योंकि यहां हम माउस कर्सर को नियंत्रित कर रहे हैं।
तो अपने अजगर के खोल को खोलें और नीचे दिए गए कमांड का उपयोग करके निम्नलिखित लाइब्रेरी स्थापित करें:
पाइप स्थापित करें धारावाहिक पाइप स्थापित करें
धारावाहिक है जो इस तरह कॉम बंदरगाहों के रूप में धारावाहिक इंटरफेस से डेटा प्राप्त करने में मदद करता है और यह भी हमें यह हेरफेर जबकि देता है अजगर के लिए एक पुस्तकालय है pyautogui अजगर, इस मामले में, जीयूआई सुविधाओं पर नियंत्रण पाने के लिए माउस के लिए पुस्तकालय है।
अब हम ड्राइवरों के लिए कोड प्राप्त करते हैं, पहली चीज जो हमें करने की आवश्यकता है वह धारावाहिक और pyutogui पुस्तकालयों को आयात कर रहा है, और फिर धारावाहिक पुस्तकालय से, हमें 9600 की बॉड दर के साथ संचार के लिए कॉम पोर्ट सेट करना होगा, Bluetooth.serial पर समान रूप से काम कर रहा है। इसके लिए आपको अपने सिस्टम से ब्लूटूथ मॉड्यूल को कनेक्ट करना होगा और फिर सिस्टम सेटिंग्स में आपको यह देखना होगा कि यह किस कॉम पोर्ट से जुड़ा है।
अगली बात यह है कि ब्लूटूथ से सीरियल संचार को सिस्टम में पढ़ना है और इसे लगातार चालू रखना है जबकि 1 की मदद से एक निरंतर लूप में बाकी कोड रखें।
जैसा कि पहले कहा गया था कि Arduino 8 बिट्स, निर्देशांक के लिए पहले 6 और क्लिक बटन की स्थिति के लिए अंतिम दो को भेज रहा है। इसलिए सभी बिट्स को ser.read की मदद से पढ़ें और इसकी लंबाई 8 बिट्स तक सेट करें।
इसके बाद, कर्सर को निर्देशांक और क्लिक के लिए बिट्स को उन पर विभाजित करके विभाजित करें, और फिर कर्सर बिट्स को X और Y में अलग से नीचे स्लाइड करें। वही बाएँ और दाएँ क्लिक के लिए जाता है।
अब संचार से, हम एक बाइट स्ट्रिंग प्राप्त कर रहे हैं और हमें इसे पूर्णांक में बदलने की आवश्यकता है ताकि वे निर्देशांक के लिए फिट हो सकें, हम उन्हें डिकोड करके ऐसा करते हैं और फिर उन्हें पूर्णांक में टाइप करते हैं।
अब कर्सर को स्थानांतरित करने के लिए हम pyautogui Moveto फ़ंक्शन का उपयोग करते हैं, जो उन पूर्णांक निर्देशांक के तर्क के रूप में लेता है और कर्सर को उस स्थिति में ले जाता है।
क्लिकों के लिए अगला चेक, हम पिछले दो बिट्स और pyautogui के क्लिक फ़ंक्शन का उपयोग करके ऐसा करते हैं, इसका डिफ़ॉल्ट क्लिक एक छोड़ दिया जाता है, हालांकि हम इसे राइट टू बटन मान घोषित करके सही में सेट कर सकते हैं, हम क्लिकों की संख्या को भी परिभाषित कर सकते हैं। क्लिक पैरामीटर को 2 पर सेट करके इसे डबल क्लिक पर सेट करें।
कंप्यूटर पर चलने वाला पूरा पायथन कोड नीचे दिया गया है:
आयात धारावाहिक आयात pyautogui ser = serial। क्रमिक ('com3', 9600) जबकि 1: k = ser.read (8) कर्सर = k क्लिक = k x = कर्सर y = कर्सर l = क्लिक r = क्लिक xcor = int.decode ('utf-8')) ycor = int (y.decode ('utf-8')) pyautogui.moveTo (xcor, ycor) यदि l == 49: pyautogui.click (क्लिक = 2) elif r = = 49: pyautogui.click (बटन = 'सही', क्लिक = 2)
Arduino एयर माउस का परीक्षण
इसलिए एयर माउस के संचालन के लिए इसे एक शक्ति स्रोत संलग्न करें। यह Arduino Nano USB स्लॉट या 7805 IC का उपयोग कर 5v विनियमित बिजली आपूर्ति से हो सकता है। फिर अपने ब्लूटूथ से कनेक्ट होने वाले कॉम पोर्ट को सेट करके अजगर ड्राइवर स्क्रिप्ट को चलाएं। जैसे ही स्क्रिप्ट चलती है आपको ब्लूटूथ के पलक झपकने में समय लगेगा, इसका मतलब है कि यह आपके सिस्टम से जुड़ा है। फिर इसे संचालित करने के लिए ट्रिगर बटन पर क्लिक करें और आप देखेंगे कि निर्देशांक की स्थिति बदल जाएगी और यदि आप बाएं या दाएं क्लिक चाहते हैं, तो पहले बाएं या दाएं पुशबटन और ट्रिगर बटन को एक साथ दबाएं, आपको क्लिक की कार्रवाई दिखाई देगी कर्सर का बदला हुआ स्थान।
नीचे दिए गए विस्तृत वीडियो की जांच करें।