সুচিপত্র:

ফটোশপের জন্য মিনি কন্ট্রোল প্যাড (আরডুইনো): 6 টি ধাপ
ফটোশপের জন্য মিনি কন্ট্রোল প্যাড (আরডুইনো): 6 টি ধাপ

ভিডিও: ফটোশপের জন্য মিনি কন্ট্রোল প্যাড (আরডুইনো): 6 টি ধাপ

ভিডিও: ফটোশপের জন্য মিনি কন্ট্রোল প্যাড (আরডুইনো): 6 টি ধাপ
ভিডিও: How to Edit JPEG Document || Form Edit in Photoshop 2024, নভেম্বর
Anonim
ফটোশপের জন্য মিনি কন্ট্রোল প্যাড (আরডুইনো)
ফটোশপের জন্য মিনি কন্ট্রোল প্যাড (আরডুইনো)

এখানে আমি আপনাকে দেখাব কিভাবে ফটোশপে দ্রুত কাজ করতে আপনাকে সাহায্য করার জন্য একটি ছোট টুল তৈরি করতে হয়!

পিএস -এর জন্য বিশেষভাবে তৈরি কীবোর্ডগুলি নতুন নয়, তবে তারা আমার প্রয়োজনীয় জিনিসগুলি ঠিক করে না। একজন চিত্রশিল্পী হিসাবে, ফটোশপে আমার বেশিরভাগ সময় ব্রাশ সেটিং সামঞ্জস্য করতে ব্যয় হয় এবং আমি মনে করি যে সহজ শর্টকাট বোতামগুলি আমার কর্মপ্রবাহের সাথে মেলে এমন নিয়ন্ত্রণ দেয় না। তাই আমি আমার নিজের কীবোর্ড বানানোর সিদ্ধান্ত নিয়েছি, যেটি ছোট, অবাঞ্ছিত এবং ডায়াল আছে যাতে আমাকে সেই এনালগ ইন্টারঅ্যাকশন দেয় যা আমি সবসময় চেয়েছিলাম।

এটি যেভাবে কাজ করে তা সহজ: মাইক্রোকন্ট্রোলারকে ফটোশপের সাথে ইন্টারঅ্যাক্ট করতে, আমরা ডিফল্ট শর্টকাটগুলির সুবিধা গ্রহণ করি। একটি বোর্ডের সাথে যা কম্পিউটার একটি কীবোর্ড/মাউস হিসাবে পড়তে পারে, আমাদের যা করতে হবে তা হল কোডের কিছু সাধারণ লাইন ব্যবহার করে কম্পিউটারকে বলা হবে প্রতিটি ইনপুট কী প্রেসের সংমিশ্রণ হিসেবে পড়তে। এখন পূর্বাবস্থায় ফেরানো বোতামটি কেবল একটি বোতাম টিপুন!

চল শুরু করি! এই প্রকল্পের জন্য আপনার প্রয়োজন হবে:

  • 1 স্পার্কফুন প্রো মাইক্রো (বা একটি আরডুইনো লিওনার্দো, প্রস্তাবিত নয়)
  • 1 মাইক্রো-ইউএসবি অ্যাডাপ্টার
  • 6 pushbuttons (বা আপনার পছন্দ মত কোন সংখ্যা)
  • 10k ওহম প্রতিরোধক (প্রতিটি বোতামের জন্য 1)
  • 1 পটেন্টিওমিটার
  • 1 ঘূর্ণমান এনকোডার
  • তারের, breadboard, perfboard, ঝাল, হেডার পিন, ইত্যাদি

আপনি এই প্রকল্পের জন্য একটি Arduino লিওনার্দো ব্যবহার করতে পারেন, কিন্তু ProMicro একটি অনেক সস্তা বিকল্প যা একই atmega32u4 চিপ ব্যবহার করে, আরো পিন আছে এবং অনেক ছোট আকারে আসে, এটি একটি কীবোর্ডের জন্য নিখুঁত করে তোলে।

Arduino IDE তে ProMicro প্রোগ্রাম করার জন্য আপনাকে প্রথমে কিছু জিনিস সেট করতে হতে পারে। আপনি স্পার্কফুনের গাইডে এটি সম্পর্কে আরও পড়তে পারেন:

যদি আপনার কম্পিউটারে ডিভাইসটি খুঁজে পেতে সমস্যা হয়, তাহলে নিশ্চিত করুন যে আপনি যে মাইক্রো-ইউএসবি ব্যবহার করছেন তা শুধুমাত্র পাওয়ার নয় এবং ডেটা ট্রান্সফার সমর্থন করে।

এটি আমার প্রথম Arduino প্রকল্প, এবং নতুনদের জন্য উপযুক্ত।

ধাপ 1: কন্ট্রোল প্যাড প্রোটোটাইপ করা

কন্ট্রোল প্যাড প্রোটোটাইপ করা
কন্ট্রোল প্যাড প্রোটোটাইপ করা

সোল্ডারিং শুরু করার আগে আমি আপনাকে প্রথমে একটি রুটিবোর্ডে আপনার প্রোগ্রামটি পরীক্ষা করার পরামর্শ দিই।

এখানে আপনি আমার পরিকল্পিত দেখতে পারেন।

বাটন 1 এবং 2 পূর্বাবস্থায় ফেরানো এবং পুনরায় করা হবে, 3 থেকে 5 ব্রাশ, ইরেজার এবং লাসো সরঞ্জামগুলির জন্য, বাটন 6 একটি দ্রুত সংরক্ষণ বাটন। এনকোডার এবং পটমিটার যথাক্রমে আকার এবং অস্বচ্ছতা নিয়ন্ত্রণ করে।

মনে রাখবেন যে আমি বামহাতি এবং লেআউটটি এমনভাবে ডিজাইন করেছি যা আমার ব্যবহারের জন্য সবচেয়ে আরামদায়ক। আপনার কন্ট্রোলারের কোন ফাংশনগুলি আপনি চান, কোনটি আপনার জন্য সবচেয়ে ভালো কাজ করে এবং শেষ পর্যন্ত যদি এটি তৈরির জন্য আপনার অতিরিক্ত যন্ত্রাংশের প্রয়োজন হয় সে সম্পর্কে চিন্তা করার সুযোগ হিসেবে আপনার রুটিবোর্ড ব্যবহার করার মুহূর্তটি দেখুন।

ধাপ 2: পুশ বোতাম

পুশ বোতাম
পুশ বোতাম

বোতামগুলি প্রয়োগ করা সবচেয়ে সহজ। আসুন কোডটি দেখুন:

#অন্তর্ভুক্ত

const int বাটন = {2, 3, 4, 5, 6, 7, 8, 9}; // সমস্ত বোতাম পিনের চারটি সারি ctrlKey = KEY_LEFT_GUI; // উইন্ডোজ এবং লিনাক্সের জন্য এই বিকল্পটি ব্যবহার করুন: // char ctrlKey = KEY_LEFT_CTRL; char shiftKey = KEY_LEFT_SHIFT; char altKey = KEY_LEFT_ALT; void setup () {// আপনার সেটআপ কোড এখানে রাখুন, একবার চালানোর জন্য: Serial.begin (9600); Keyboard.begin (); // বোতাম - অ্যারের মাধ্যমে লুপ করুন এবং (int i = buttons [0]; i <(sizeof (button)/sizeof (buttons [0]))+button [0]; ++ i) { পিনমোড (আমি, ইনপুট); }} বুলিয়ান readButton (int pin) {// চেক এবং ডিবাউন্স বোতাম যদি (digitalRead (pin) == HIGH) {বিলম্ব (10); যদি (ডিজিটাল রিড (পিন) == উচ্চ) {রিটার্ন ট্রু; }} মিথ্যা প্রত্যাবর্তন; } অকার্যকর doAction (int pin) {// সঞ্চালন কাজ সুইচ (পিন) {// ---- শর্টকাট ---- // কে পূর্বাবস্থায় ফেরানো 4: Keyboard.press (ctrlKey); Keyboard.print ('z'); সিরিয়াল.প্রিন্ট ("ইনপুট"); Serial.println (পিন); বিলম্ব (200); Keyboard.releaseAll (); বিরতি; // কেস 5 পুনরায় করুন: Keyboard.press (ctrlKey); Keyboard.print ('y'); সিরিয়াল.প্রিন্ট ("ইনপুট"); Serial.println (পিন); বিলম্ব (200); Keyboard.releaseAll (); বিরতি; // ব্রাশ কেস 6: Keyboard.press ('b'); সিরিয়াল.প্রিন্ট ("ইনপুট"); Serial.println (পিন); বিলম্ব (200); Keyboard.releaseAll (); বিরতি; // ইরেজার কেস 7: কীবোর্ড.প্রেস ('ই'); সিরিয়াল.প্রিন্ট ("ইনপুট"); Serial.println (পিন); বিলম্ব (200); Keyboard.releaseAll (); বিরতি; // Lasso case 8: Keyboard.press ('l'); সিরিয়াল.প্রিন্ট ("ইনপুট"); Serial.println (পিন); বিলম্ব (200); Keyboard.releaseAll (); বিরতি; // কেস 9 সেভ করুন: Keyboard.press (ctrlKey); Keyboard.print ('s'); সিরিয়াল.প্রিন্ট ("ইনপুট"); Serial.println (পিন); বিলম্ব (200); Keyboard.releaseAll (); বিরতি; ডিফল্ট: Keyboard.releaseAll (); বিরতি; }}

অকার্যকর লুপ () {

// বারবার চালানোর জন্য এখানে আপনার প্রধান কোডটি রাখুন:

জন্য }} // সংশোধনকারী রিসেট করুন Keyboard.releaseAll ();

}

তারা মোটামুটি সোজা। কম্পিউটারকে একটি কী প্রেস হিসাবে একটি বোতাম প্রেস চিনতে আমরা কেবল Keyboard.press () ফাংশনটি ব্যবহার করি। তাই পূর্বাবস্থায় শর্টকাট (ctrl+z) সক্রিয় করতে, আমরা কেবল Keyboard.press (ctrlKey) এবং তারপর Keyboard.press ('z') ব্যবহার করি। মনে রাখবেন আপনাকে Keyboard.h অন্তর্ভুক্ত করতে হবে, এবং এই ফাংশনগুলি অ্যাক্সেস করতে কীবোর্ড আরম্ভ করুন।

ইনপুট পিনগুলি একটি অ্যারেতে সংরক্ষণ করা হয়, যাতে আপনি লুপ () ফাংশনে তাদের সকলের মাধ্যমে সহজেই লুপ করতে পারেন। অ্যারে এলিমেন্ট, প্লাস এক এলিমেন্ট দ্বারা পুরো অ্যারের সাইজ ভাগ করে c ++ এ অ্যারের দৈর্ঘ্য অ্যাক্সেস এবং অ্যারের একটি সহজ উপায়। আমরা একটি বোতাম চাপা আছে কিনা তা পরীক্ষা করার জন্য সমস্ত বোতামগুলির মাধ্যমে লুপ করি।

জিনিসগুলিকে সংগঠিত রাখার জন্য, আমি আমার বোতামের সমস্ত ক্রিয়াকলাপ একটি ফাংশনের সুইচ স্টেটমেন্টে সংরক্ষণ করেছি যা পিন নম্বরকে যুক্তি হিসাবে নেয়।

আপনি যদি আপনার বোতামগুলি বিভিন্ন জিনিস করতে চান, বা আরও বোতাম যুক্ত করতে চান, তাহলে কেবল doAction ফাংশনের বিষয়বস্তু সম্পাদনা করুন!

শারীরিক বোতামগুলি কীভাবে কাজ করে তার কারণে আমাদের সেগুলি ডিবাউন্স করতে হবে। এটি পুশবাটনের স্প্রিংনেস দ্বারা সৃষ্ট কোনো অবাঞ্ছিত প্রেস পড়তে প্রোগ্রামটিকে প্রতিরোধ করতে হয়। এটি করার অনেক উপায় আছে, কিন্তু আমি একটি সহজ readButton () ফাংশন যোগ করেছি যা এটির যত্ন নেয়।

শুধু 10k প্রতিরোধক সঙ্গে আপনার বোতাম আপ তারের, এবং আপনি সুবর্ণ হতে হবে!

ধাপ 3: পটেন্টিওমিটার

পোটেন্টিওমিটার
পোটেন্টিওমিটার

এখন পটমিটারের দিকে:

#অন্তর্ভুক্ত

int ডায়াল 0 = 0; void setup () {// আপনার সেটআপ কোড এখানে রাখুন, একবার চালানোর জন্য: Serial.begin (9600); Keyboard.begin (); // ডায়াল ডায়াল 0 = analogRead (0); ডায়াল 0 = মানচিত্র (ডায়াল 0, 0, 1023, 1, 20); } অকার্যকর ডায়াল অ্যাকশন (int ডায়াল, int newVal, int lastVal) {সুইচ (ডায়াল) {// অস্পষ্টতা কেস 0: বিলম্ব (200); যদি (newVal! = lastVal) {int decim = ((newVal*5)/10); int ইউনিট = ((newVal *5)% 10); যদি (newVal == 20) {Keyboard.write (48+0); Keyboard.write (48+0); Serial.println ("সর্বোচ্চ ডায়াল 1"); } অন্যথায় {decim = constrain (decim, 0, 9); একক = সীমাবদ্ধতা (একক, 0, 9); Serial.println (newVal*2); Keyboard.write (48+decim); Keyboard.write (48+ইউনিট); }} ডায়াল 0 = নতুন ভ্যাল; বিরতি; ডিফল্ট: বিরতি; }} // ------------------ প্রধান লুপ ------------------------- অকার্যকর loop () {// আপনার প্রধান কোড এখানে রাখুন, বারবার চালানোর জন্য: // অস্পষ্টতা // বিলম্ব (500); int val0 = analogRead (0); val0 = মানচিত্র (val0, 0, 1023, 1, 20); // সিরিয়াল.প্রিন্ট ("ডায়াল 0:"); // সিরিয়াল.প্রিন্টলন (মান 0); যদি (val0! = dial0) {// কিছু ডায়াল অ্যাকশন করো (0, val0, dial0); }}

পটমিটার একই যুক্তি অনুসরণ করে, কিন্তু এটি একটু জটিল।

প্রথমে দেখা যাক কিভাবে আমরা এটি কাজ করতে চাই: ফটোশপের ব্রাশের অস্বচ্ছতা পরিবর্তন করার জন্য কিছু সহজ শর্টকাট রয়েছে। যদি আপনি কোন num কী টিপেন, তাহলে অস্পষ্টতা সেই সংখ্যা*10 এর সমান হবে। কিন্তু যদি আপনি দুটি সংখ্যা টিপেন, তাহলে এটি একটি ইউনিট হিসাবে দ্বিতীয় সংখ্যাটি পড়বে, যা আপনাকে আরো সুনির্দিষ্ট নিয়ন্ত্রণ দেবে।

তাই আমরা চাই আমাদের পটমিটারটি তার ঘূর্ণনকে শতাংশে মানচিত্র করে, কিন্তু আমরা এটি সব সময় করতে চাই না কারণ এটি নির্বোধ হবে। পটমিটার চালু হওয়ার সময় আমরা কেবল অস্বচ্ছতা পরিবর্তন করতে চাই। সুতরাং আমরা একটি অতিরিক্ত মান সঞ্চয় করি যা আমরা analogRead () মানের সাথে তুলনা করি এবং যখন একটি পার্থক্য থাকে তখনই অ্যাকশন স্ক্রিপ্টটি চালাই।

আরেকটি সমস্যা যা আমরা চালাব তা হল কিভাবে আমরা একটি ইনপুট হিসাবে analogRead এর রিটার্ন int চালু করি। যেহেতু একটি স্ট্রিং এ একটি int চালু করার কোন সহজ উপায় নেই, আমরা int নিজেই ব্যবহার করতে হবে। যাইহোক, যদি আপনি কেবল Keyboard.press (int) লিখেন তবে আপনি লক্ষ্য করবেন যে ইনপুটটি আপনি যা চান তা হবে না, এবং পরিবর্তে অন্য একটি কী চাপতে হবে।

এর কারণ হল আপনার কীবোর্ডের চাবিগুলি পূর্ণসংখ্যা হিসাবে কোডেড, প্রতিটি কী এর নিজস্ব সূচক রয়েছে। সংখ্যা কী সঠিকভাবে ব্যবহার করতে, আপনাকে ASCII টেবিলে তাদের সূচকটি দেখতে হবে:

আপনি দেখতে পাচ্ছেন, সংখ্যা কীগুলি সূচী 48 থেকে শুরু হয়। সুতরাং সঠিক কী টিপতে, আমাদের যা করতে হবে তা হল ডায়ালের মান 48 তে যোগ করা। দশমিক এবং একক মানগুলি পৃথক প্রেস।

অবশেষে, আমাদের সামনে এবং পিছনে লাফানো থেকে মান রাখার একটি উপায় দরকার। কারণ আপনি যদি মানচিত্রের সাথে ডায়াল ব্যবহার করার চেষ্টা করেন (val0, 0, 1023, 0, 100), আপনি ফলাফলগুলি খুব বিরক্তিকর পাবেন। একইভাবে আমরা কীভাবে বোতামগুলি প্রত্যাহার করেছি, আমরা কিছু নির্ভুলতার বলি দিয়ে এটি ঠিক করব। আমি দেখেছি যে এটি 1-20 তে ম্যাপ করা এবং তারপরে আর্গুমেন্টের মানকে 5 দ্বারা গুণ করে একটি গ্রহণযোগ্য আপস করা।

পোটেন্টিওমিটার সংযোগ করার জন্য, শুধু একটি 5V তারের, একটি স্থল তারের এবং একটি এনালগ ইনপুট তারের সংযোগ করুন এবং কোন সমস্যা হওয়া উচিত নয়।

মজার ঘটনা: যদি আপনি এই শর্টকাটটি ব্যবহার করেন যখন লাসোর মতো একটি সরঞ্জাম নির্বাচন করা হয়, এটি পরিবর্তে লেয়ারের অস্বচ্ছতা পরিবর্তন করবে। নোট করার মতো কিছু।

ধাপ 4: রোটারি এনকোডার

রোটারি এনকোডার
রোটারি এনকোডার

রোটারি এনকোডারগুলি একটু পোটেন্টিওমিটারের মতো, কিন্তু কতটা ঘুরতে পারে তার সীমা ছাড়াই। একটি এনালগ মানের পরিবর্তে, আমরা এনকোডারের বাঁক দিকটি ডিজিটালভাবে দেখব। এই কাজগুলি সম্পর্কে আমি খুব বিস্তারিতভাবে বলব না, কিন্তু আপনার যা জানা দরকার তা হল এটি আরডুইনোতে দুটি ইনপুট পিন ব্যবহার করে তা কোন দিকে মোড়ানো হচ্ছে তা বলার জন্য। ঘূর্ণমান এনকোডারটি কাজ করার জন্য আরও জটিল হতে পারে, বিভিন্ন এনকোডারের বিভিন্ন সেটআপের প্রয়োজন হতে পারে। জিনিসগুলিকে সহজ করার জন্য, আমি পিসিবি দিয়ে একটি কিনেছি, যা মহিলা পিনের সাথে যুক্ত হওয়ার জন্য প্রস্তুত। এখন, কোড:

#অন্তর্ভুক্ত

// রোটারি এনকোডার #ডিফাইন আউটপুট এ 15 #ডিফাইন আউটপুট বি 14 ইন্ট কাউন্টার = 0; int aState; int aLastState; অকার্যকর সেটআপ () {// আপনার সেটআপ কোডটি এখানে রাখুন, একবার চালানোর জন্য: // রোটারি পিনমোড (আউটপুটএ, ইনপুট); পিনমোড (আউটপুট বি, ইনপুট); // আউটপুটের প্রাথমিক অবস্থা পড়ে aALastState = digitalRead (outputA); } অকার্যকর rotaryAction (int dir) {if (dir> 0) {Keyboard.press (']'); } অন্য {Keyboard.press ('['); } Keyboard.releaseAll (); } // ------------------ প্রধান লুপ ------------------------- অকার্যকর লুপ () {// আপনার প্রধান কোডটি এখানে রাখুন, বারবার চালানোর জন্য: // সাইজ aState = digitalRead (outputA); if (aState! = aLastState) {if (digitalRead (outputB)! = aState) {// counter ++; rotaryAction (1); } অন্য {// পাল্টা -; rotaryAction (-1); } // সিরিয়াল.প্রিন্ট ("অবস্থান:"); // সিরিয়াল.প্রিন্টলন (গণনা); } aLastState = aState; }

ডিফল্টরূপে, ফটোশপের] এবং [শর্টকাটগুলি ব্রাশের আকার বাড়ায় এবং হ্রাস করে। ঠিক আগের মতই, আমরা সেগুলিকে কী প্রেস হিসাবে ইনপুট করতে চাই। এনকোডার প্রতি মোড়কে বেশ কয়েকটি ইনপুট পাঠায় (যা মডেলের উপর নির্ভর করে), এবং আমরা এই প্রতিটি ইনপুটের জন্য ব্রাশের আকার বাড়াতে বা হ্রাস করতে চাই, যাতে আপনি ডায়ালটি দ্রুত বা নিচে চালু করতে পারেন, কিন্তু এটিও সক্ষম মহান নির্ভুলতার সাথে ধীরে ধীরে এটি নিয়ন্ত্রণ করুন।

পটমিটারের মতো, আমরা কেবল ডায়ালটি চালু করার সময় ক্রিয়াটি চালাতে চাই। পটমিটারের বিপরীতে, যেমনটি আমি আগে ব্যাখ্যা করেছি, ঘূর্ণমান এনকোডারের দুটি বিকল্প ইনপুট রয়েছে। ডায়ালটি কোন দিকে মোড়ানো হচ্ছে তা স্থাপন করতে আমরা এর মধ্যে কোনটি পরিবর্তিত হয়েছে তা দেখি।

তারপরে দিকের উপর নির্ভর করে আমরা সঠিক কী টিপুন।

যতক্ষণ আপনার যোগাযোগের সমস্যা নেই, এটি কাজ করা উচিত।

ধাপ 5: সব একসাথে রাখা

সবগুলোকে একত্রে রাখ
সবগুলোকে একত্রে রাখ
সবগুলোকে একত্রে রাখ
সবগুলোকে একত্রে রাখ
সবগুলোকে একত্রে রাখ
সবগুলোকে একত্রে রাখ

এখন সোল্ডারিং এর দিকে। প্রথমত, আমরা দুটি ডায়াল ফিট করার জন্য পারফবোর্ডে দুটি গর্ত ড্রিল করি। আমরা বোতাম এবং তাদের নিজ নিজ প্রতিরোধক ঝালাই। আমি নীচের স্থান বাঁচাতে ইনপুট তারের উপর দিয়ে যেতে দুটি অতিরিক্ত ছোট গর্ত ড্রিল, কিন্তু এটি প্রয়োজনীয় নয়। অনেকগুলি ইনপুট তার নেই তাই GND এবং 5V তারগুলি সমান্তরালে চলে, কিন্তু যদি আপনি নৈপুণ্য অনুভব করেন তবে আপনি একটি ম্যাট্রিক্স তৈরি করতে চাইতে পারেন। আমি মাইক্রোকন্ট্রোলারকে আরেকটি, ছোট পারফবোর্ডে বিক্রি করেছি, যা নীচে এনকোডার এবং পটমিটারের সাথে মানানসই। এখন আমি প্রোমিক্রোতে সমস্ত তারগুলি বিক্রি করি। সৃজনশীল হওয়ার কোন প্রয়োজন নেই, আমাকে শুধু একই রীতি অনুসরণ করতে হয়েছিল যেমনটি রুটিবোর্ডে ছিল, কিন্তু এত ছোট জায়গায় সোল্ডারিং বোঝা যায় ক্লান্তিকর। আমার মত হবেন না, একটি তারের স্ট্রিপার এবং একটি ভাল ঝাল ব্যবহার করুন!

অবশেষে, আপনি আপনার নতুন ফটোশপ বন্ধুর জন্য একটি সুন্দর কেস তৈরি করতে চাইতে পারেন। আমার চেয়ে ভাল, অন্তত!

কিন্তু যদি আপনি এটি চেষ্টা করতে আগ্রহী হন, তাহলে কিছু কার্ডবোর্ড এবং টেপ ব্যবহার করুন এবং আপনার মাইক্রো-ইউএসবি প্লাগ করুন।

ধাপ 6: কোড + বিক্ষোভ

Image
Image

কন্ট্রোল প্যাডের প্রোগ্রামটি পরীক্ষা করতে ভুলবেন না যখন আপনি প্রকল্পে এগিয়ে যাচ্ছেন বিস্ময় এড়াতে!

এখানে সম্পূর্ণ কোড:

পড়ার জন্য আপনাকে অনেক ধন্যবাদ!

প্রস্তাবিত: