विषयसूची:

फोटोशॉप के लिए मिनी कंट्रोल पैड (Arduino): 6 कदम
फोटोशॉप के लिए मिनी कंट्रोल पैड (Arduino): 6 कदम

वीडियो: फोटोशॉप के लिए मिनी कंट्रोल पैड (Arduino): 6 कदम

वीडियो: फोटोशॉप के लिए मिनी कंट्रोल पैड (Arduino): 6 कदम
वीडियो: What is Arduino | All Basic Concept of ArduinoUno in hindi | Arduino tutorial in hindi | ArduinoUno 2024, जुलाई
Anonim
फोटोशॉप के लिए मिनी कंट्रोल पैड (Arduino)
फोटोशॉप के लिए मिनी कंट्रोल पैड (Arduino)

यहाँ मैं आपको दिखा रहा हूँ कि फ़ोटोशॉप में तेज़ी से काम करने में आपकी मदद करने के लिए एक छोटा सा टूल कैसे बनाया जाता है!

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

जिस तरह से यह काम करता है वह सरल है: माइक्रोकंट्रोलर को फोटोशॉप के साथ इंटरैक्ट करने के लिए, हम डिफ़ॉल्ट शॉर्टकट का लाभ उठाते हैं। एक बोर्ड के साथ जिसे कंप्यूटर कीबोर्ड/माउस के रूप में पढ़ सकता है, हमें केवल कोड की कुछ सरल पंक्तियों का उपयोग करना है ताकि कंप्यूटर को प्रत्येक इनपुट को कुंजी प्रेस के संयोजन के रूप में पढ़ने के लिए कहा जा सके। अब पूर्ववत करें बटन केवल एक बटन दबाने की दूरी पर है!

आएँ शुरू करें! इस परियोजना के लिए आपको आवश्यकता होगी:

  • 1 स्पार्कफुन प्रोमाइक्रो (या एक अरुडिनो लियोनार्डो, अनुशंसित नहीं)
  • 1 माइक्रो-यूएसबी एडाप्टर
  • 6 पुशबटन (या कोई भी नंबर जो आपको पसंद हो)
  • 10k ओम प्रतिरोधक (प्रत्येक बटन के लिए 1)
  • 1 पोटेंशियोमीटर
  • 1 रोटरी एनकोडर
  • तार, ब्रेडबोर्ड, परफ़ॉर्मर, सोल्डर, हेडर पिन, आदि।

आप इस परियोजना के लिए एक Arduino लियोनार्डो का उपयोग कर सकते हैं, लेकिन ProMicro एक बहुत सस्ता विकल्प है जो समान atmega32u4 चिप का उपयोग करता है, इसमें अधिक पिन होते हैं और यह बहुत छोटे रूप में आता है, जो इसे कीबोर्ड के लिए एकदम सही बनाता है।

Arduino IDE में ProMicro को प्रोग्राम करने के लिए आपको पहले कुछ चीजें सेट करने की आवश्यकता हो सकती है। आप इसके बारे में स्पार्कफन की गाइड में अधिक पढ़ सकते हैं:

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

यह मेरा पहला Arduino प्रोजेक्ट है, और शुरुआती लोगों के लिए उपयुक्त है।

चरण 1: कंट्रोल पैड का प्रोटोटाइप बनाना

नियंत्रण पैड का प्रोटोटाइप बनाना
नियंत्रण पैड का प्रोटोटाइप बनाना

मैं अनुशंसा करता हूं कि आप सोल्डरिंग शुरू करने से पहले अपने प्रोग्राम को ब्रेडबोर्ड पर परीक्षण करें।

यहां आप मेरा योजनाबद्ध देख सकते हैं।

बटन 1 और 2 पूर्ववत करें और फिर से करें, 3 से 5 ब्रश, इरेज़र और लासो टूल के लिए हैं, बटन 6 एक त्वरित सहेजें बटन है। एन्कोडर और पॉटमीटर क्रमशः आकार और अस्पष्टता को नियंत्रित करते हैं।

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

चरण 2: पुश बटन

दबाकर लगाया जाने वाला बटन
दबाकर लगाया जाने वाला बटन

बटन लागू करने के लिए सबसे सरल हैं। आइए कोड पर एक नज़र डालें:

#शामिल

कॉन्स्ट इंट बटन = {२, ३, ४, ५, ६, ७, ८, ९}; // सभी बटन पिन की सरणी चार ctrlKey = KEY_LEFT_GUI; // Windows और Linux के लिए इस विकल्प का उपयोग करें: //char ctrlKey = KEY_LEFT_CTRL; चार शिफ्टकी = KEY_LEFT_SHIFT; चार ऑल्टकी = KEY_LEFT_ALT; शून्य सेटअप () {// अपना सेटअप कोड यहां एक बार चलाने के लिए डालें: Serial.begin(9600); कीबोर्ड.बेगिन (); // बटन - सरणी के माध्यम से लूप और प्रेस के लिए जाँच करें (int i = बटन [0]; i <(sizeof(buttons)/sizeof(buttons[0]))+buttons[0]; ++i) { पिनमोड (i, INPUT); }} बूलियन रीडबटन (इंट पिन) {// चेक और डिब्यू बटन अगर (डिजिटल रीड (पिन) == हाई) {देरी (10); अगर (डिजिटल रीड (पिन) == हाई) {रिटर्न ट्रू; } } विवरण झूठा है; } शून्य कार्य (इंट पिन) {// कार्य स्विच करें (पिन) {/----शॉर्टकट ---- // केस 4 पूर्ववत करें: कीबोर्ड.प्रेस (ctrlKey); कीबोर्ड.प्रिंट ('जेड'); सीरियल.प्रिंट ("इनपुट"); सीरियल.प्रिंट्लन (पिन); देरी (200); कीबोर्ड.रिलीज ऑल (); टूटना; // केस 5 फिर से करें: कीबोर्ड.प्रेस (ctrlKey); कीबोर्ड.प्रिंट ('वाई'); सीरियल.प्रिंट ("इनपुट"); सीरियल.प्रिंट्लन (पिन); देरी (200); कीबोर्ड.रिलीज ऑल (); टूटना; // ब्रश केस 6: कीबोर्ड.प्रेस ('बी'); सीरियल.प्रिंट ("इनपुट"); सीरियल.प्रिंट्लन (पिन); देरी (200); कीबोर्ड.रिलीज ऑल (); टूटना; // इरेज़र केस 7: कीबोर्ड.प्रेस ('ई'); सीरियल.प्रिंट ("इनपुट"); सीरियल.प्रिंट्लन (पिन); देरी (200); कीबोर्ड.रिलीज ऑल (); टूटना; // कमंद केस 8: कीबोर्ड.प्रेस ('एल'); सीरियल.प्रिंट ("इनपुट"); सीरियल.प्रिंट्लन (पिन); देरी (200); कीबोर्ड.रिलीज ऑल (); टूटना; // केस 9 सहेजें: कीबोर्ड.प्रेस (ctrlKey); कीबोर्ड.प्रिंट ('एस'); सीरियल.प्रिंट ("इनपुट"); सीरियल.प्रिंट्लन (पिन); देरी (200); कीबोर्ड.रिलीज ऑल (); टूटना; डिफ़ॉल्ट: कीबोर्ड.रिलीजऑल (); टूटना; } }

शून्य लूप () {

// अपना मुख्य कोड यहां रखें, बार-बार चलाने के लिए:

for(int i = बटन [0]; i < sizeof(buttons)/sizeof(buttons[0])+buttons[0];++i) { if (readButton(i)) {doAction(i); } } // संशोधक रीसेट करें Keyboard.releaseAll ();

}

वे काफी सीधे हैं। कंप्यूटर को एक बटन प्रेस को एक कुंजी प्रेस के रूप में पहचानने के लिए हम बस कीबोर्ड.प्रेस () फ़ंक्शन का उपयोग करते हैं। इसलिए पूर्ववत करें शॉर्टकट (ctrl+z) को सक्रिय करने के लिए, हम बस Keyboard.press(ctrlKey) और फिर Keyboard.press('z') का उपयोग करते हैं। याद रखें कि इन कार्यों को एक्सेस करने के लिए आपको Keyboard.h को शामिल करना होगा, और कीबोर्ड को इनिशियलाइज़ करना होगा।

इनपुट पिन एक सरणी में संग्रहीत होते हैं, ताकि आप लूप () फ़ंक्शन में उन सभी के माध्यम से आसानी से लूप कर सकें। ऐरे एलिमेंट के साथ-साथ एक एलिमेंट द्वारा पूरे ऐरे के आकार को विभाजित करके सी ++ में एक्सेस और ऐरे की लंबाई का एक आसान तरीका। हम यह जांचने के लिए सभी बटनों के माध्यम से लूप करते हैं कि क्या कोई दबाया गया है।

चीजों को व्यवस्थित रखने के लिए, मैंने अपने सभी बटन के कार्यों को एक फ़ंक्शन के स्विच स्टेटमेंट में संग्रहीत किया जो पिन नंबर को तर्क के रूप में लेता है।

यदि आप चाहते हैं कि आपके बटन अलग-अलग काम करें, या अधिक बटन जोड़ना चाहते हैं, तो बस doAction फ़ंक्शन की सामग्री को संपादित करें!

भौतिक बटन कैसे काम करते हैं, इस वजह से हमें उन पर बहस करने की आवश्यकता होगी। यह प्रोग्राम को पुशबटन के स्प्रिंगनेस के कारण होने वाले किसी भी अवांछित प्रेस को पढ़ने से रोकने के लिए है। ऐसा करने के कई तरीके हैं, लेकिन मैंने एक साधारण रीडबटन () फ़ंक्शन जोड़ा है जो इसका ख्याल रखता है।

बस अपने बटन को कुछ 10k प्रतिरोधों के साथ तार दें, और आपको सुनहरा होना चाहिए!

चरण 3: पोटेंशियोमीटर

पोटेंशियोमीटर
पोटेंशियोमीटर

अब पॉटमीटर पर:

#शामिल

इंट डायल0 = 0; शून्य सेटअप () {// अपना सेटअप कोड यहां एक बार चलाने के लिए डालें: Serial.begin(9600); कीबोर्ड.बेगिन (); // डायल 0 = एनालॉग रीड (0); डायल ० = नक्शा (डायल ०, ०, १०२३, १, २०); } शून्य डायलएक्शन (इंट डायल, इंट न्यूवैल, इंट लास्टवैल) {स्विच (डायल) {// ओपेसिटी केस 0: डिले (200); अगर (newVal!=lastVal) { int decim = ((newVal*5)/10); इंट यूनिट = ((न्यूवैल *5)% 10); अगर (newVal==20) {कीबोर्ड.लिखें(48+0); कीबोर्ड.राइट (48+0); Serial.println ("अधिकतम डायल 1"); } और { दशमलव = बाधा (दशमलव, 0, 9); इकाई = बाधा (इकाई, 0, 9); Serial.println(newVal*2); कीबोर्ड.राइट (४८+डेसिम); कीबोर्ड.राइट (48+यूनिट); } } डायल0=न्यूवैल; टूटना; डिफ़ॉल्ट: विराम; } } //--------------------- मुख्य लूप-------------------------- शून्य लूप () {// बार-बार चलाने के लिए अपना मुख्य कोड यहां रखें: // Opacity //delay(500); इंट वैल0 = एनालॉगरेड (0); वैल0 = नक्शा (वैल0, 0, 1023, 1, 20); // सीरियल.प्रिंट ("डायल0:"); // सीरियल.प्रिंट्लन (वैल 0); अगर (वैल०! = डायल ०) {// कुछ डायलएक्शन (०, वैल०, डायल०) करें; } }

पॉटमीटर उसी तर्क का अनुसरण करता है, लेकिन यह थोड़ा पेचीदा है।

आइए पहले देखें कि हम इसे कैसे काम करना चाहते हैं: फ़ोटोशॉप में ब्रश की अस्पष्टता को बदलने के लिए कुछ आसान शॉर्टकट हैं। यदि आप कोई अंक कुंजी दबाते हैं, तो अपारदर्शिता उस संख्या*10 के बराबर होगी। लेकिन अगर आप दो नंबर दबाते हैं, तो यह दूसरी संख्या को एक इकाई के रूप में पढ़ेगा, जिससे आपको अधिक सटीक नियंत्रण मिलेगा।

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

एक और मुद्दा जिस पर हम चलेंगे वह यह है कि कैसे हम एक इनपुट के रूप में एनालॉग रीड के रिटर्न इंट को चालू करते हैं। चूंकि इंट को स्ट्रिंग में बदलने का कोई आसान तरीका नहीं है, इसलिए हमें इंट का ही उपयोग करना होगा। हालाँकि, यदि आप केवल Keyboard.press(int) लिखते हैं, तो आप देखेंगे कि इनपुट वह नहीं होगा जो आप चाहते थे, और इसके बजाय दूसरी कुंजी दबा दी जाएगी।

ऐसा इसलिए है क्योंकि आपके कीबोर्ड की सभी कुंजियों को पूर्णांक के रूप में कोडित किया गया है, प्रत्येक कुंजी की अपनी अनुक्रमणिका होती है। अंक कुंजी का सही उपयोग करने के लिए, आपको ASCII तालिका में उनकी अनुक्रमणिका देखनी होगी:

जैसा कि आप देख सकते हैं, अंक कुंजियाँ सूचकांक 48 से शुरू होती हैं। इसलिए सही कुंजी दबाने के लिए, हमें केवल डायल के मान को 48 में जोड़ना होगा। दशमलव और इकाई मान अलग-अलग प्रेस हैं।

अंत में, हमें मूल्य को आगे और पीछे कूदने से रोकने का एक तरीका चाहिए। क्योंकि यदि आप मानचित्र के साथ डायल का उपयोग करने का प्रयास करते हैं (वैल0, 0, 1023, 0, 100), तो आप पाएंगे कि परिणाम बहुत परेशान करने वाले हैं। ठीक उसी तरह जैसे हमने बटनों को खारिज किया, हम कुछ सटीकता का त्याग करके इसे ठीक करेंगे। मैंने पाया कि इसे 1-20 पर मैप करना और फिर तर्कों के मान को 5 से गुणा करना एक स्वीकार्य समझौता है।

पोटेंशियोमीटर को जोड़ने के लिए, बस एक 5V तार, एक ग्राउंड वायर और एक एनालॉग इनपुट वायर कनेक्ट करें और कोई समस्या नहीं होनी चाहिए।

मजेदार तथ्य: यदि आप लैस्सो जैसे टूल का चयन करते समय इस शॉर्टकट का उपयोग करते हैं, तो यह इसके बजाय परत की अस्पष्टता को बदल देगा। नोट करने के लिए कुछ।

चरण 4: रोटरी एनकोडर

रोटरी एनकोडर
रोटरी एनकोडर

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

#शामिल

// रोटरी एनकोडर #डिफाइन आउटपुटए 15 #डिफाइन आउटपुटबी 14 इंट काउंटर = 0; इंट स्टेट; इंट एलास्टस्टेट; शून्य सेटअप () {// एक बार चलाने के लिए अपना सेटअप कोड यहां डालें: // रोटरी पिनमोड (आउटपुट ए, इनपुट); पिनमोड (आउटपुटबी, इनपुट); // आउटपुट की प्रारंभिक स्थिति को पढ़ता हैए aLastState = digitalRead(outputA); } शून्य रोटरीएक्शन (इंट डीआईआर) {अगर (डीआईआर> 0) {कीबोर्ड.प्रेस (']'); } और {कीबोर्ड.प्रेस ('['); } कीबोर्ड.रिलीजऑल (); } //--------------------- मुख्य लूप-------------------------- शून्य लूप () {// अपना मुख्य कोड यहां डालें, बार-बार चलाने के लिए://आकार aState = digitalRead(outputA); अगर (एस्टेट! = एलास्टस्टेट) {अगर (डिजिटल रीड (आउटपुट बी)! = एस्टेट) {//काउंटर ++; रोटरीएक्शन(1); } और {// काउंटर --; रोटरीएक्शन (-1); } // सीरियल.प्रिंट ("स्थिति:"); // सीरियल.प्रिंट्लन (काउंटर); } एलास्टस्टेट = एस्टेट; }

डिफ़ॉल्ट रूप से, फोटोशॉप के] और [शॉर्टकट ब्रश के आकार को बढ़ाते और घटाते हैं। पहले की तरह, हम उन्हें कुंजी प्रेस के रूप में इनपुट करना चाहते हैं। एन्कोडर प्रति मोड़ कई इनपुट भेजता है (जो मॉडल पर निर्भर करता है), और हम इनमें से प्रत्येक इनपुट के लिए ब्रश का आकार बढ़ाना/घटाना चाहते हैं, ताकि आप डायल को वास्तव में तेजी से ऊपर या नीचे कर सकें, लेकिन यह भी कर सकें इसे बड़ी सटीकता के साथ धीरे-धीरे नियंत्रित करें।

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

फिर दिशा के आधार पर, हम सही कुंजी दबाते हैं।

जब तक आपके पास संपर्क समस्याएँ नहीं हैं, तब तक इसे काम करना चाहिए।

चरण 5: यह सब एक साथ रखना

यह सब एक साथ डालें
यह सब एक साथ डालें
यह सब एक साथ डालें
यह सब एक साथ डालें
यह सब एक साथ डालें
यह सब एक साथ डालें

अब सोल्डरिंग पर। सबसे पहले, हम दो डायल फिट करने के लिए परफ़ॉर्मर में दो छेद ड्रिल करते हैं। हम बटन और उनके संबंधित प्रतिरोधों को मिलाते हैं। मैंने नीचे की जगह बचाने के लिए इनपुट तारों को ऊपर से गुजरने देने के लिए दो अतिरिक्त छोटे छेद ड्रिल किए, लेकिन यह आवश्यक नहीं है। कई इनपुट वायर नहीं हैं इसलिए GND और 5V तार समानांतर में चलते हैं, लेकिन अगर आप चालाक महसूस कर रहे हैं तो आप एक मैट्रिक्स बनाना चाह सकते हैं। मैंने माइक्रोकंट्रोलर को दूसरे, छोटे परफ़ॉर्मर में मिलाया, जो एनकोडर और पॉटमीटर के साथ नीचे फिट होता है। अब मैं सभी तारों को ProMicro में मिलाता हूं। रचनात्मक होने की कोई आवश्यकता नहीं है, मुझे बस उसी योजना का पालन करना था जैसा कि ब्रेडबोर्ड पर है, लेकिन इतनी छोटी जगह में टांका लगाना काफी थकाऊ हो सकता है। मेरे जैसा मत बनो, वायर स्ट्रिपर और एक अच्छे सोल्डर का उपयोग करो!

अंत में, आप अपने नए फ़ोटोशॉप मित्र के लिए एक अच्छा मामला बनाना चाहेंगे। एक मेरे से बेहतर, कम से कम!

लेकिन अगर आप इसे आजमाने के लिए उत्सुक हैं, तो कुछ कार्डबोर्ड और टेप का उपयोग करें और अपने माइक्रो-यूएसबी में प्लग करें।

चरण 6: कोड + प्रदर्शन

Image
Image

जैसे ही आप परियोजना में आगे बढ़ते हैं, आश्चर्य से बचने के लिए नियंत्रण पैड के कार्यक्रम का परीक्षण करना सुनिश्चित करें!

यहाँ पूरा कोड है:

पढ़ने के लिए आपको बहुत बहुत शुक्रिया!

सिफारिश की: