विषयसूची:
वीडियो: हैंडहेल्ड शॉर्टकट कंट्रोलर (फ़ोटोशॉप + अधिक के लिए) [Arduino]: ४ कदम
2024 लेखक: John Day | [email protected]. अंतिम बार संशोधित: 2024-01-30 09:21
पिछली बार मैंने फ़ोटोशॉप में उपयोग करने के लिए एक छोटा नियंत्रण पैड बनाया था। इसने अद्भुत काम किया, और मैं अभी भी इसका उपयोग करता हूँ! लेकिन यह भी सीमित है, केवल पांच बटन और उपयोगी आकार और अस्पष्टता डायल के साथ। मैंने अभी भी खुद को कीबोर्ड के लिए बहुत कुछ पाया है …
इसलिए मैंने नियंत्रण पैड के अगले पुनरावृत्ति पर काम करना शुरू कर दिया, एक तरह से अधिक बटन और कार्यक्षमता के साथ। उन सभी पर शासन करने के लिए एक नियंत्रण पैड।
यह वह कंट्रोल पैड नहीं है। लेकिन एक तरह से यह बेहतर हो सकता है।
क्या होगा यदि आपके पास बहुत सारे शॉर्टकट हो सकते हैं, लेकिन एक सुपर स्नग और हल्के पैकेज में आप अपने खाली हाथ से पकड़ सकते हैं जबकि आप निर्बाध रूप से आकर्षित करते हैं? … ठीक है, infomercial के साथ पर्याप्त।
यह नियंत्रक इस तरह से प्रोग्राम किया गया है कि, केवल 4 बटन के साथ, इसे 32 संभावित शॉर्टकट तक मैप किया जा सकता है! मुझे किसी भी संयोजन में संशोधक कुंजियों का उपयोग करने की अनुमति देने के लिए अतिरिक्त 5 वां बटन है, जो कई कार्यक्रमों के लिए उपयोगी है (क्या आपने कभी PS में Alt-RMB कॉम्बो की कोशिश की? यदि आपने नहीं किया है, तो कृपया करें। यह एक जीवनरक्षक है)। मैं बाद में सिस्टम की व्याख्या करता हूं।
यह सब बनाने के लिए आपको आवश्यकता होगी:
- 1 माइक्रोकंट्रोलर (मैंने Adafruit ItsyBitsy 32u4 का उपयोग किया है लेकिन किसी को भी तब तक करना चाहिए जब तक उसमें atmega32u4 चिप हो)
- 1 माइक्रो-यूएसबी एडाप्टर (डेटा, केवल पावर नहीं)
- 5 पुश बटन (मैंने इन जैसे सॉफ्ट वाले का इस्तेमाल किया)
- 10k ओम प्रतिरोधक (1 प्रति बटन)
- तार, ब्रेडबोर्ड, सोल्डर सामग्री, आदि।
- (3D प्रिंटर, आदि) के साथ आवरण बनाने के लिए कुछ
यह एक मध्यवर्ती स्तर की Arduino परियोजना है, और मैं सुझाव देता हूं कि मेरे पिछले ट्यूटोरियल को बेहतर ढंग से समझने के लिए कि क्या हो रहा है, क्योंकि इसमें से अधिकांश उन चीजों का दोहराव है जो मैंने वहां समझाया था।
ठीक है, चलिए शुरू करते हैं!
चरण 1: योजना
यह एक बुनियादी योजनाबद्ध है जिसे मैंने नियंत्रक से आकर्षित किया है। जब आप इसकी तुलना मेरे पिछले प्रोजेक्ट से करते हैं तो सर्किट वास्तव में सरल होता है! लेकिन हम संयुक्त प्रेस की शक्ति के साथ, इसके कुछ बटनों के साथ और भी बहुत कुछ करने में सक्षम होंगे!
नियंत्रण योजना के पीछे विचार यह है कि प्रत्येक बटन या तो मुक्त, दबाया और छोड़ा जा सकता है, या दबाया और रखा जा सकता है। दबाने और जारी करने से वास्तव में शॉर्टकट सक्रिय हो जाएगा, जबकि बटन दबाए रखने से हमें विभिन्न शॉर्टकट तक पहुंच प्राप्त होगी। इसलिए यदि आप केवल ए बटन दबाते हैं, तो आप शॉर्टकट ए को सक्रिय कर देंगे, लेकिन यदि आप ए दबाते समय बी को पकड़ते हैं, तो आपको एक अलग शॉर्टकट मिलेगा। आप दबाते समय एक बार में 3 बटन तक पकड़ सकते हैं, इसलिए जब आप कुछ बुनियादी संयोजन लागू करते हैं, तो आप देखेंगे कि इस प्रणाली के साथ कितने संयोजन संभव हैं!
अतिरिक्त पांचवें बटन को एक प्राकृतिक जोड़ की तरह महसूस किया गया था, जिसे मैं हाथ में लेकर आया था। मैंने फ़ोटोशॉप में संशोधक कुंजियों तक पहुँचने के लिए इसका उपयोग करने का निर्णय लिया। जिस तरह से यह काम करता है वह अन्य बटनों से थोड़ा अलग है: जब भी अंगूठे का बटन होता है, तो केवल संशोधक का उपयोग किया जाएगा। ये सक्रिय होने पर सक्रिय हो जाएंगे और एकाधिक दबाए जा सकते हैं। तो अगर बटन ए शिफ्ट है, और बटन बी Ctrl है, जब आप ए और बी को दबाए रखते हैं तो यह शिफ्ट और Ctrl दोनों को दबाने जैसा होगा, लेकिन केवल तब तक जब तक अंगूठे का बटन दबाए रखा जाता है!
खोल को एर्गोनोमिक और उभयलिंगी दोनों के लिए डिज़ाइन किया गया है। मैंने इसे अच्छी तरह से फिट करने के लिए बहुत सावधानी बरती ताकि छोटी उंगली का उपयोग करना बहुत थकाऊ न हो, और यह उन लोगों के लिए भी काम करना चाहिए जिनके हाथ मेरे से बड़े हैं।
चरण 2: प्रोटोटाइप + कोड
ब्रेडबोर्ड पर बटनों का परीक्षण करना अच्छा अभ्यास है। यह बहुत आसान है, बस दिखाए गए अनुसार बटन और प्रतिरोधों को कनेक्ट करें। आप यहां कोड के साथ इसका परीक्षण कर सकते हैं (पेस्टबिन लिंक विकल्प):
#शामिल
// MacOS के लिए vthisv विकल्प का उपयोग करें:
// चार ctrlKey = KEY_LEFT_GUI;
// विंडोज और लिनक्स के लिए vthisv विकल्प का उपयोग करें:
चार ctrlKey = KEY_LEFT_CTRL; चार शिफ्टकी = KEY_LEFT_SHIFT; चार ऑल्टकी = KEY_LEFT_ALT;
// फंक्शन कुंजियाँ यहाँ
चार Fn1Key = KEY_F2; चार Fn2Key = KEY_F3; चार Fn3Key = KEY_F4; चार Fn4Key = KEY_F5;
कॉन्स्ट इंट पिन = {९, १०, ११, १२, १३}; // सभी बटन पिन की सरणी
// संवेदनशीलता
कास्ट इंट THRESH_0 = 10; कॉन्स्ट इंट THRESH_1 = 20; कास्ट इंट THRESH_2 = 25; कास्ट इंट THRESH_3 = 50; कास्ट इंट THRESH_4 = 100; कॉन्स्ट इंट THRESH_5 = 200;
कॉन्स्ट इंट BUTTON_NUM = 5;
// फ्रीज फ्रेम
कॉन्स्ट इंट देरी = 0;
एनम स्टेट्स {मुक्त, दबाया, आयोजित, जारी किया गया};
संरचना बटन {
इंट पिन; राज्य राज्य; इंट टाइमहेल्ड; }; // अंगूठे, सूचकांक, मध्य, अंगूठी, थोड़ा;
बटन बटन [BUTTON_NUM] = {};
बटन इनिटबटन (इंट पी) {
बटन बी; पिनमोड (पी, इनपुट); बी.पिन = पी; बी.राज्य = राज्य:: मुक्त; बी.टाइमहेल्ड = 0; वापसी ख; }
व्यर्थ व्यवस्था() {
// अपना सेटअप कोड यहां डालें, एक बार चलाने के लिए: Serial.begin(9600); कीबोर्ड.बेगिन ();
जबकि (! सीरियल) {};
// के लिए बटन (int i = 0; i <(BUTTON_NUM); ++i) {Serial.print ("सेट बटन"); सीरियल.प्रिंट (i); सीरियल.प्रिंट ("पिन पर:"); Serial.println (पिन ); // बटन । पिन = 1; बटन = initButton (पिन ); Serial.println (बटन .pin); }
}
बूल रीडबटन (इंट पिन) {
// चेक और डिबेट बटन अगर (डिजिटल रीड (पिन) == हाई) {देरी (10); अगर (डिजिटल रीड (पिन) == हाई) {रिटर्न ट्रू; } } विवरण झूठा है; }
इंट पिंटोबिन (इंट पिन) {
अगर (पिन == पिन [0]) वापसी 1; अगर (पिन == पिन [1]) वापसी १०; अगर (पिन == पिन [2]) १०० लौटाएं; अगर (पिन == पिन [3]) 1000 लौटाएं; अगर (पिन == पिन [4]) 10000 लौटाएं; } बटन बटनस्टेटअपडेट (बटन बी) {
बूल प्रेस = रीडबटन (बी.पिन);
स्विच (बी.स्टेट) {केस स्टेट्स:: मुक्त: बी.टाइमहेल्ड = 0; अगर (प्रेस) b.state=States::pressed; टूटना; केस दबाया गया: b.timeHeld+=1; अगर (दबाएं) { अगर (बी.टाइमहेल्ड>(THRESH_1/(1+DELAY))) { b.state=States:: आयोजित; } } और {//if (b.timeHeld
int getButtonStateCode (बटन बी)
{वापसी b.state*pintobin(b.pin); }
int getCodeByButton (इंट कोड, इंट इंडेक्स) {
इंट r1, r2, r3, r4, r5; int opStep = BUTTON_NUM - (1+इंडेक्स);
// पहला ऑपरेशन
अगर (opStep==0) रिटर्न कोड/10000; r1 = कोड% १००००;
अगर (ऑपस्टेप == 1)
वापसी r1/1000; r2 = r1%1000; अगर (opStep==2) r2/100 लौटाएं; r3 = r2%100; अगर (opStep==3) रिटर्न r3/10; r4 = r3%10; अगर (opStep==4) रिटर्न r4/1; r5 = r4%1; }
शून्य पूर्ण प्रेस (इंट पिन) {
// सीरियल.प्रिंट ("इनपुट"); // सीरियल.प्रिंट्लन (पिन); विलंब (THRESH_3); कीबोर्ड.रिलीज ऑल (); }
शून्य कार्य (इंट कोड) {
// संशोधक अगर (getCodeByButton (कोड, 0) == 2) {// Serial.println ("--- संशोधक ----"); अगर (getCodeByButton (कोड, 1)> 0) {कीबोर्ड.प्रेस (altKey); // सीरियल.प्रिंट्लन ("---------- alt-----------"); } और कीबोर्ड.रिलीज़ (altKey); अगर (getCodeByButton (कोड, 2)> 0) {कीबोर्ड.प्रेस (ctrlKey); // सीरियल.प्रिंट्लन ("------------ctrl----------"); } और कीबोर्ड.रिलीज (ctrlKey); अगर (getCodeByButton (कोड, 3)> 0) {कीबोर्ड.प्रेस (''); } और कीबोर्ड.रिलीज (''); अगर (getCodeByButton (कोड, 4)> 0) {कीबोर्ड.प्रेस (शिफ्टकी); // सीरियल.प्रिंट्लन ("------ शिफ्ट ------"); } और कीबोर्ड.रिलीज (शिफ्टकी); } अन्यथा {
// कार्य करें
स्विच (कोड) {केस 30: //---| ब्रश कीबोर्ड।प्रेस (शिफ्टकी); कीबोर्ड.प्रिंट ('बी'); पूर्णप्रेस (कोड); टूटना; केस 300: //---| इरेज़र कीबोर्ड.प्रेस (शिफ्टकी); कीबोर्ड.प्रिंट ('ई'); पूर्णप्रेस (कोड); टूटना; केस 3000: //---| बाल्टी कीबोर्ड।प्रेस (शिफ्टकी); कीबोर्ड.प्रिंट ('जी'); पूर्णप्रेस (कोड); टूटना; मामला ३००००: //---| लासो कीबोर्ड.प्रेस (शिफ्टकी); कीबोर्ड.प्रिंट ('एल'); पूर्णप्रेस (कोड); टूटना; केस 320: //-- | ओ कीबोर्ड को पूर्ववत करें। प्रेस (ctrlKey); कीबोर्ड.प्रिंट ('जेड'); पूर्णप्रेस (कोड); टूटना; केस 3020: //-|-o फिर से करें Keyboard.press(ctrlKey); कीबोर्ड.प्रिंट ('वाई'); पूर्णप्रेस (कोड); टूटना; केस 30020: //|--ओ हिस्ट्री कीबोर्ड.प्रेस (शिफ्टकी); कीबोर्ड.प्रिंट ('वाई'); पूर्णप्रेस (कोड); टूटना; मामला 230: //--o| कीबोर्ड सेव करें। प्रेस (ctrlKey); कीबोर्ड.प्रिंट ('एस'); पूर्णप्रेस (कोड); टूटना; केस 3200: //-|ओ- क्विक पीएनजी कीबोर्ड।प्रेस (शिफ्टकी); कीबोर्ड.प्रेस (ctrlKey); कीबोर्ड.प्रिंट ('\''); पूर्णप्रेस (कोड); टूटना; केस २२२३०: //ooo| Fn1 कीबोर्ड.प्रेस (Fn1Key); पूर्णप्रेस (कोड); टूटना; केस 22320: //oo|o Fn2 Keyboard.press(Fn2Key); पूर्णप्रेस (कोड); टूटना; केस 23220: //0|00 Fn3 कीबोर्ड.प्रेस (Fn3Key); पूर्णप्रेस (कोड); टूटना; केस 32220: //| ऊ Fn4 कीबोर्ड।प्रेस (Fn4Key); पूर्णप्रेस (कोड); टूटना; } } } इंट एफ = 0; //--------------------- मुख्य लूप --------------------------- शून्य लूप () {
इंट बटनकोड = 0;
for(int i = 0; i < BUTTON_NUM; ++i) {बटन = बटनस्टेटअपडेट (बटन ); बटनकोड + = getButtonStateCode (बटन ); }
अगर (बटन कोड! = 0) {
सीरियल.प्रिंट ("बटन कोड:"); Serial.println (बटन कोड); }
डूएक्शन (बटन कोड);
// बार-बार चलाने के लिए अपना मुख्य कोड यहां रखें: // for(int i = button[0]; i < sizeof(buttons)/sizeof(buttons[0])+buttons[0]; ++i) { / // अगर (रीडबटन (i)) {// doAction (i); // } // }
अगर (getCodeByButton(buttonCode, 0)!=2)
कीबोर्ड.रिलीज ऑल ();
देरी (देरी);
}
तर्क के बारे में कहने के लिए बहुत कुछ नहीं है क्योंकि यह मेरे पिछले नियंत्रक के समान है, जिसमें दो उल्लेखनीय अंतर हैं:
- बटन अपने स्वयं के राज्य मशीनों के साथ संरचनाएं हैं
- कार्रवाई को निर्धारित करने वाले कोड बनाने के लिए राज्यों को एक साथ जोड़ा जाता है
सिद्धांत बिट-शिफ्टिंग के समान है, लेकिन क्योंकि बटन में कई राज्य होते हैं और इसे केवल एक बाइनरी के साथ प्रदर्शित नहीं किया जा सकता है, इसके बजाय उन्हें दस की शक्तियों से गुणा किया जाता है। मैं फिर सभी बटन राज्यों को एक ही नंबर में जोड़ता हूं, और इसे doAction() स्विच स्टेटमेंट पर पास करता हूं, जहां मैं सभी शॉर्टकट कोड डालता हूं।
जैसा कि आप देख सकते हैं, मैंने हर संभव संयोजन को मैप नहीं किया। मैंने केवल अपने कुछ पसंदीदा शॉर्टकट जोड़े हैं, बाकी को भरने के लिए मैं इसे आप पर छोड़ देता हूं कि आप सबसे अच्छे तरीके से कैसे फिट दिखते हैं;)
चरण 3: आवरण
मैंने आवरण के लिए एक 3D प्रिंटर का उपयोग किया। जैसा कि आप देख सकते हैं, डिजाइन में कुछ खामियां हैं और मुझे मैकगाइवर को इसे बंद करने का एक तरीका था। इसलिए मैं अभी मॉडल फ़ाइल पोस्ट नहीं करूँगा।
बटन "बेंच" पर गर्म-चिपके होते हैं ताकि वे कैप को जगह पर रखें। नरम पुशबटन उस पर विशेष रूप से अच्छे होते हैं, इसलिए यदि आप मेरे जैसा मामला बनाने की योजना बना रहे हैं तो उनमें से कुछ प्राप्त करना सुनिश्चित करें।
इसके अलावा, मैं मामले के अंदर थोड़ा वजन जोड़ने का सुझाव देता हूं, क्योंकि यह बहुत हल्का है। अतिरिक्त ग्राम इसे और अधिक प्राकृतिक महसूस कराएगा।
दिखाए गए अनुसार सब कुछ मिलाएं और यूएसबी केबल कनेक्ट करें, और सब कुछ जगह में फिट होना चाहिए (कुछ गोंद की मदद से)!
चरण 4: परिणाम और संभावित सुधार
ये लो! एक हैंडहेल्ड कंट्रोलर जिसका उपयोग आप अपने सभी महत्वपूर्ण शॉर्टकट को केवल एक हाथ से एक्सेस करने के लिए कर सकते हैं!
यह उपयोग करने के लिए कुछ मांसपेशी-स्मृति लेता है, लेकिन यह वास्तव में बहुमुखी है!
बेशक यह सही नहीं है, और अभी मैं इसे सुधारने के कुछ तरीकों के बारे में सोच रहा हूं। आवरण में सुधार और शॉर्टकट जोड़ने के अलावा, मुझे लगता है कि विभिन्न शॉर्टकट के साथ कई अनुप्रयोगों का समर्थन करना दिलचस्प होगा। मैं नियंत्रण योजनाओं के बीच स्विच करने के लिए एक बटन संयोजन रखने के बारे में सोच रहा हूं, जैसे एक ही समय में 4 बटन दबाकर एक फ़ोटोशॉप शॉर्टकट लाइब्रेरी के बीच माया के लिए बने एक-दर्जी में स्विच करने के लिए।
बस कुछ विचार।
अगली बार तक पढ़ने के लिए धन्यवाद!
सिफारिश की:
Arduino आधारित DIY गेम कंट्रोलर - Arduino PS2 गेम कंट्रोलर - DIY Arduino गेमपैड के साथ टेककेन बजाना: 7 कदम
Arduino आधारित DIY गेम कंट्रोलर | Arduino PS2 गेम कंट्रोलर | DIY Arduino गेमपैड के साथ Tekken खेलना: हेलो दोस्तों, गेम खेलना हमेशा मजेदार होता है लेकिन अपने खुद के DIY कस्टम गेम कंट्रोलर के साथ खेलना ज्यादा मजेदार होता है।
चंचल दबाव संवेदनशील पैड (डिजिटल खेल के मैदानों के लिए - और अधिक): 11 कदम (चित्रों के साथ)
चंचल दबाव संवेदनशील पैड (डिजिटल खेल के मैदानों के लिए - और अधिक): यह आपको एक दबाव-संवेदनशील पैड बनाने का तरीका दिखाने के लिए एक निर्देश है - जिसका उपयोग डिजिटल खिलौने या गेम बनाने के लिए किया जा सकता है। इसका उपयोग बड़े पैमाने पर बल संवेदनशील प्रतिरोधी के रूप में किया जा सकता है, और हालांकि चंचल, इसका उपयोग अधिक गंभीर परियोजनाओं के लिए किया जा सकता है
टाइमलैप्स, पोर्ट्रेट्स और अधिक के लिए बड़ी एलईडी "रिंग" लाइट: 11 कदम (चित्रों के साथ)
टाइमलैप्स, पोर्ट्रेट्स और अधिक के लिए बड़ी एलईडी "रिंग" लाइट…: मैं बहुत सारे टाइमलैप्स वीडियो शूट करता हूं जो कुछ दिनों तक चलते हैं, लेकिन उस असमान रोशनी से नफरत करते हैं जो क्लैंप लाइट देती है - खासकर रात में। एक बड़ी रिंग लाइट बहुत महंगी है - इसलिए मैंने एक ही शाम में अपने हाथ में सामान लेकर कुछ बनाने का फैसला किया।
पालतू भोजन (कुत्ता, बिल्ली, चिकन, आदि) फेंकने के लिए स्वचालित गुलेल, गेंदें और अधिक फेंकना !: 4 कदम (चित्रों के साथ)
पालतू भोजन (कुत्ता, बिल्ली, चिकन, आदि) फेंकने के लिए स्वचालित गुलेल, गेंद फेंकना और बहुत कुछ !: नमस्कार और मेरे पहले निर्देश में आपका स्वागत है! हमारा कुत्ता अपना खाना पसंद करता है, वह सचमुच सेकंड के भीतर यह सब खा लेगी। मैं इसे धीमा करने के तरीके तैयार कर रहा हूं, गेंदों से अंदर के भोजन के साथ इसे पूरे पिछवाड़े में फेंकने के लिए। आश्चर्यजनक रूप से, वह
वायरलेस कंट्रोलर और सेंसर के साथ हैंडहेल्ड कंसोल (Arduino MEGA & UNO): 10 कदम (चित्रों के साथ)
वायरलेस कंट्रोलर और सेंसर के साथ हैंडहेल्ड कंसोल (Arduino MEGA & UNO): मैंने क्या इस्तेमाल किया:- Arduino MEGA- 2x Arduino UNO- Adafruit 3.5" TFT 320x480 टचस्क्रीन HXD8357D- बजर- 4Ohm 3W स्पीकर- 5mm LED लाइट्स- अल्टिमेकर 2+ प्रिंटर w/ब्लैक PLA फिलामेंट- Lasercutter w/MDF वुड- ब्लैक स्प्रे पेंट (लकड़ी के लिए)- 3x nRF24