فهرست مطالب:

مینی کنترل پد برای فتوشاپ (آردوینو): 6 مرحله
مینی کنترل پد برای فتوشاپ (آردوینو): 6 مرحله

تصویری: مینی کنترل پد برای فتوشاپ (آردوینو): 6 مرحله

تصویری: مینی کنترل پد برای فتوشاپ (آردوینو): 6 مرحله
تصویری: از امتحان جا موندم | زندگی دانشجویی 2024, جولای
Anonim
مینی کنترل پد برای Photoshop (Arduino)
مینی کنترل پد برای Photoshop (Arduino)

در اینجا به شما نشان خواهم داد که چگونه یک ابزار کوچک بسازید تا به شما کمک کند در فتوشاپ سریعتر کار کنید!

صفحه کلیدهایی که مخصوص PS ساخته شده اند جدید نیستند ، اما دقیقاً آنچه را که من نیاز دارم ارائه نمی دهند. به عنوان یک نقاش ، بیشتر وقت من در Photoshop صرف تنظیم تنظیم قلم مو می شود و من فکر می کنم دکمه های میانبر ساده به من کنترل مطابقت با گردش کار را نمی دهند. بنابراین تصمیم گرفتم صفحه کلید خودم را بسازم ، صفحه ای کوچک ، بدون مزاحمت ، و دارای صفحه های شماره گیر است تا آن تعامل آنالوگ را که همیشه می خواستم به من بدهد.

روش کار آن ساده است: برای تعامل میکروکنترلر با فتوشاپ ، از میانبرهای پیش فرض استفاده می کنیم. با بردی که کامپیوتر می تواند به عنوان صفحه کلید/ماوس بخواند ، تنها کاری که باید انجام دهیم این است که از چند خط کد ساده استفاده کنیم تا به کامپیوتر بگوییم هر ورودی را به صورت ترکیبی از فشارهای کلید بخواند. اکنون دکمه واگرد تنها یک دکمه را فشار دهید!

بیایید شروع کنیم! برای این پروژه شما نیاز دارید:

  • 1 Sparkfun ProMicro (یا Arduino Leonardo ، توصیه نمی شود)
  • 1 عدد آداپتور میکرو USB
  • 6 دکمه فشاری (یا هر عددی که دوست دارید)
  • مقاومتهای 10k اهم (1 عدد برای هر دکمه)
  • 1 پتانسیومتر
  • 1 رمزگذار چرخشی
  • سیم ، تخته نرد ، ورق ورق ، لحیم کاری ، پین هدر و غیره

شما می توانید از Arduino Leonardo برای این پروژه استفاده کنید ، اما ProMicro یک جایگزین بسیار ارزان تر است که از همان تراشه atmega32u4 استفاده می کند ، پین های بیشتری دارد و در شکل بسیار کوچکتر عرضه می شود و برای صفحه کلید مناسب است.

برای برنامه نویسی ProMicro در Arduino IDE ، ابتدا باید برخی موارد را تنظیم کنید. می توانید در مورد آن در راهنمای SparkFun بیشتر بخوانید:

اگر رایانه شما در یافتن دستگاه مشکل دارد ، مطمئن شوید میکرو USB مورد استفاده شما فقط قدرت ندارد و از انتقال داده پشتیبانی می کند.

این اولین پروژه آردوینو من است و برای مبتدیان مناسب است.

مرحله 1: نمونه سازی پد کنترل

نمونه سازی پد کنترل
نمونه سازی پد کنترل

توصیه می کنم قبل از شروع لحیم کاری ، برنامه خود را روی تخته نان تست کنید.

در اینجا می توانید شماتیک من را ببینید.

دکمه های 1 و 2 Undo و Redo ، 3 تا 5 مخصوص ابزار Brush ، Eraser و Lasso ، دکمه 6 یک دکمه ذخیره سریع است. رمزگذار و اندازه گیر به ترتیب اندازه و کدورت را کنترل می کنند.

توجه داشته باشید که من چپ دست هستم و طرح را به گونه ای طراحی کرده ام که برای من راحت تر است. لحظه ای را که از تخته نورد خود استفاده می کنید به عنوان فرصتی برای فکر کردن درباره عملکردهایی که دوست دارید کنترل کننده شما داشته باشد ، برای شما بهتر کار می کند و در نهایت اگر برای ساخت آن به قطعات بیشتری نیاز دارید ، توجه کنید.

مرحله 2: دکمه ها را فشار دهید

دکمه ها را فشار دهید
دکمه ها را فشار دهید

ساده ترین دکمه ها برای پیاده سازی هستند. بیایید نگاهی به کد بیندازیم:

#عبارتند از

const int buttons = {2 ، 3 ، 4 ، 5 ، 6 ، 7 ، 8 ، 9} ؛ // آرایه همه پین های دکمه char ctrlKey = KEY_LEFT_GUI؛ // از این گزینه برای Windows و Linux استفاده کنید: // 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 (buttons)/sizeof (buttons [0]))+buttons [0]؛ ++ i) {را بررسی کنید. pinMode (i ، INPUT) ؛ }} boolean readButton (int pin) {// دکمه های check and debounce if (digitalRead (pin) == HIGH) {تاخیر (10) ؛ if (digitalRead (pin) == HIGH) {return true؛ }} false false؛ } void doAction (int pin) {// انجام وظایف (سوئیچ) {// ---- میانبرها ---- // واگرد مورد 4: Keyboard.press (ctrlKey) ؛ Keyboard.print ('z')؛ Serial.print ("ورودی") ؛ Serial.println (پین) ؛ تأخیر (200) ؛ Keyboard.releaseAll ()؛ زنگ تفريح؛ // تکرار مورد 5: Keyboard.press (ctrlKey) ؛ Keyboard.print ('y') ؛ Serial.print ("ورودی") ؛ Serial.println (پین) ؛ تأخیر (200) ؛ Keyboard.releaseAll ()؛ زنگ تفريح؛ // مورد قلم مو 6: Keyboard.press ('b') ؛ Serial.print ("ورودی") ؛ Serial.println (پین) ؛ تأخیر (200) ؛ Keyboard.releaseAll ()؛ زنگ تفريح؛ // محفظه پاک کن 7: Keyboard.press ('e') ؛ Serial.print ("ورودی") ؛ Serial.println (پین) ؛ تأخیر (200) ؛ Keyboard.releaseAll ()؛ زنگ تفريح؛ // مورد Lasso 8: Keyboard.press ('l')؛ Serial.print ("ورودی") ؛ Serial.println (پین) ؛ تاخیر (200) ؛ Keyboard.releaseAll ()؛ زنگ تفريح؛ // ذخیره مورد 9: Keyboard.press (ctrlKey) ؛ Keyboard.print ('s')؛ Serial.print ("ورودی") ؛ Serial.println (پین) ؛ تأخیر (200) ؛ Keyboard.releaseAll ()؛ زنگ تفريح؛ پیش فرض: Keyboard.releaseAll ()؛ زنگ تفريح؛ }}

حلقه خالی () {

// کد اصلی خود را در اینجا قرار دهید تا بارها اجرا شود:

برای (int i = دکمه [0] ؛ i <sizeof (دکمه)/sizeof (دکمه [0])+دکمه [0] ؛ ++ i) {if (readButton (i)) {doAction (i) ؛ }} // بازنشانی اصلاح کننده ها Keyboard.releaseAll ()؛

}

آنها نسبتاً ساده هستند. برای اینکه رایانه یک دکمه را به عنوان فشار کلید تشخیص دهد ، ما به سادگی از تابع Keyboard.press () استفاده می کنیم. بنابراین برای فعال کردن میانبر Undo (ctrl+z) ، ما به سادگی از Keyboard.press (ctrlKey) و سپس Keyboard.press ('z') استفاده می کنیم. به یاد داشته باشید برای دسترسی به این عملکردها باید Keyboard.h را وارد کنید و صفحه کلید را مقداردهی کنید.

پین های ورودی در یک آرایه ذخیره می شوند ، بنابراین می توانید همه آنها را به راحتی در تابع حلقه () حلقه کنید. یک راه آسان برای دسترسی و طول آرایه در c ++ با تقسیم اندازه کل آرایه بر روی عنصر آرایه ، به علاوه یک عنصر. ما همه دکمه ها را حلقه می کنیم تا بررسی کنیم که آیا دکمه ای فشار داده شده است یا خیر.

برای نظم بخشیدن به امور ، همه عملکردهای دکمه را در دستور switch یک تابع که شماره پین را به عنوان آرگومان می گیرد ذخیره کردم.

اگر می خواهید دکمه های شما کارهای متفاوتی انجام دهند یا می خواهید دکمه های بیشتری اضافه کنید ، به سادگی محتویات عملکرد doAction را ویرایش کنید!

به دلیل نحوه عملکرد دکمه های فیزیکی ، باید آنها را حذف کنیم. این کار به منظور جلوگیری از خواندن هر گونه پرس ناخواسته ناشی از فنری بودن دکمه های فشار است. روشهای زیادی برای انجام این کار وجود دارد ، اما من یک تابع () readButton ساده اضافه کردم که از آن مراقبت می کند.

کافی است دکمه های خود را با برخی از مقاومت های 10k سیم ببندید و باید طلایی شوید!

مرحله 3: پتانسیومتر

پتانسیومتر
پتانسیومتر

حالا روی قابلمه سنج:

#عبارتند از

int dial0 = 0؛ void setup () {// کد راه اندازی خود را در اینجا قرار دهید تا یکبار اجرا شود: Serial.begin (9600)؛ Keyboard.begin ()؛ // شماره گیری dial0 = analogRead (0)؛ dial0 = نقشه (dial0، 0، 1023، 1، 20)؛ } void dialAction (int dial، int newVal، int lastVal) {switch (dial) {// Opacity case 0: delay (200)؛ if (newVal! = lastVal) {int decim = ((newVal*5)/10)؛ واحد int = ((newVal *5)٪ 10)؛ if (newVal == 20) {Keyboard.write (48+0) ؛ Keyboard.write (48+0)؛ Serial.println ("حداکثر شماره گیری 1") ؛ } else {decim = constrain (decim، 0، 9)؛ واحد = محدود (واحد ، 0 ، 9) ؛ Serial.println (newVal*2) ؛ Keyboard.write (48+ decim) ؛ Keyboard.write (48+ واحد) ؛ }} dial0 = newVal؛ زنگ تفريح؛ پیش فرض: break؛ }} // ------------------ MAIN LOOP ------------------------- خالی است loop () {// کد اصلی خود را در اینجا قرار دهید تا بارها اجرا شود: // Opacity // delay (500)؛ int val0 = analogRead (0) ؛ val0 = نقشه (val0 ، 0 ، 1023 ، 1 ، 20) ؛ //Serial.print ("dial0:") ؛ //Serial.println(val0)؛ if (val0! = dial0) {// کاری انجام دهید dialAction (0 ، val0 ، dial0) ؛ }}

دیگ سنج از همان منطق پیروی می کند ، اما کمی پیچیده تر است.

ابتدا اجازه دهید نحوه عملکرد ما را مورد بررسی قرار دهیم: Photoshop دارای تعدادی میانبر مفید برای تغییر کدورت قلم مو است. اگر هر کلید عددی را فشار دهید ، کدورت با این عدد*10 برابر می شود. اما اگر دو عدد را فشار دهید ، عدد دوم را به صورت واحد خوانده و کنترل دقیق تری به شما می دهد.

بنابراین ما می خواهیم دستگاه اندازه گیری اندازه گیری چرخش آن را درصدی نشان دهد ، اما ما نمی خواهیم این کار را دائما انجام دهیم زیرا این کار احمقانه است. ما فقط زمانی می خواهیم که کدورت را تغییر دهیم. بنابراین ما مقدار اضافی را که با مقدار analogRead () مقایسه می کنیم ذخیره می کنیم و فقط در صورت وجود تفاوت اسکریپت را اجرا می کنیم.

مسئله دیگری که با آن روبرو می شویم این است که چگونه بازگشت analogRead را به عنوان ورودی تبدیل کنیم. از آنجا که هیچ راهی آسان برای تبدیل یک int به یک رشته وجود ندارد ، ما باید از خود int استفاده کنیم. با این حال ، اگر شما به سادگی Keyboard.press (int) را بنویسید ، متوجه خواهید شد که ورودی آن چیزی نخواهد بود که می خواهید ، و در عوض کلید دیگری فشرده می شود.

این به این دلیل است که کلیدهای صفحه کلید شما به صورت عدد صحیح کدگذاری شده اند و هر کلید دارای فهرست مخصوص به خود است. برای استفاده صحیح از کلید شماره ، باید فهرست آنها را در جدول ASCII جستجو کنید:

همانطور که مشاهده می کنید ، کلیدهای شماره از فهرست 48 شروع می شوند. بنابراین برای فشار دادن کلید صحیح ، تنها کاری که باید انجام دهیم این است که مقدار شماره گیری را به 48 اضافه کنیم. مقادیر اعشاری و واحدی پرس های جداگانه هستند.

سرانجام ، ما به روشی نیاز داریم که مانع پرش ارزش به این سو و آن سو شود. زیرا اگر از شماره گیری با نقشه (val0، 0، 1023، 0، 100) استفاده کنید ، نتایج را بسیار تکان دهنده خواهید دید. به همان شیوه ای که ما دکمه ها را حذف کردیم ، با فدا کردن بخشی از دقت ، این مشکل را برطرف می کنیم. من دریافتم که نگاشتن آن به 1-20 و سپس ضرب مقدار آرگومان ها در 5 یک سازش قابل قبول است.

برای اتصال پتانسیومتر ، فقط یک سیم 5 ولت ، یک سیم زمین و یک سیم ورودی آنالوگ را وصل کنید و مشکلی ایجاد نشود.

واقعیت جالب: اگر از این میانبر در حالی که ابزاری مانند Lasso انتخاب شده است استفاده کنید ، در عوض کدورت لایه را تغییر می دهد. چیزی که باید به آن توجه کرد

مرحله 4: رمزگذار روتاری

رمزگذار روتاری
رمزگذار روتاری

رمزگذارهای روتاری کمی شبیه پتانسیومتر هستند ، اما بدون محدودیت در میزان چرخش آنها. به جای مقدار آنالوگ ، ما جهت چرخش رمزگذار را به صورت دیجیتالی بررسی خواهیم کرد. من جزئیات زیادی در مورد نحوه عملکرد این دستگاه ها نمی دهم ، اما آنچه باید بدانید این است که از دو پین ورودی در آردوینو استفاده می کند تا بگوید در چه جهتی چرخانده شده است. کار با رمزگذار دوار می تواند پیچیده تر باشد ، رمزگذارهای مختلف ممکن است به تنظیمات متفاوتی نیاز داشته باشند. برای سهولت کار ، من یکی با PCB خریدم ، که آماده اتصال به پین های زن است. حالا کد:

#عبارتند از

// رمزگذار چرخشی #خروجی را تعریف کنید 15 #خروجی را تعریف کنید B 14 int counter = 0؛ int aState؛ int aLastState؛ void setup () {// کد راه اندازی خود را در اینجا قرار دهید تا یکبار اجرا شود: // Rotary pinMode (outputA، INPUT)؛ pinMode (خروجی B ، INPUT) ؛ // حالت اولیه خروجی را می خواند aLastState = digitalRead (outputA)؛ } void rotaryAction (int dir) {if (dir> 0) {Keyboard.press (']')؛ } else {Keyboard.press ('[')؛ } Keyboard.releaseAll ()؛ } // ------------------ MAIN LOOP ------------------------- حلقه خالی () {// کد اصلی خود را در اینجا قرار دهید تا بارها اجرا شود: // اندازه aState = digitalRead (outputA)؛ if (aState! = aLastState) {if (digitalRead (outputB)! = aState) {// counter ++؛ rotaryAction (1) ؛ } else {// counter -؛ rotaryAction (-1) ؛ } //Serial.print("Position: ")؛ //Serial.println(counter) ؛ } aLastState = aState؛ }

به طور پیش فرض ، میانبرهای Photoshop] و [اندازه قلم مو را افزایش و کاهش می دهند. درست مانند قبل ، ما می خواهیم آنها را به عنوان فشارهای کلیدی وارد کنیم. رمزگذار تعدادی ورودی در هر نوبت (که بستگی به مدل دارد) ارسال می کند ، و ما می خواهیم اندازه قلم مو را برای هر یک از این ورودی ها افزایش یا کاهش دهیم ، بنابراین شما می توانید شماره گیری را به سرعت بالا یا پایین کنید ، اما همچنین می توانید آن را به آرامی با دقت زیاد کنترل کنید

درست مانند دستگاه دیگ سنج ، ما فقط می خواهیم عمل را هنگامی انجام دهیم که صفحه شماره گیری در حال چرخش است. بر خلاف دستگاه قابل اندازه گیری ، همانطور که قبلاً توضیح دادم ، رمزگذار چرخشی دارای دو ورودی متناوب است. ما نگاه می کنیم که کدام یک از این موارد تغییر کرده است تا جهت چرخاندن صفحه را مشخص کند.

سپس بسته به جهت ، کلید صحیح را فشار می دهیم.

تا زمانی که مشکلات تماس ندارید ، باید کار کند.

مرحله 5: همه چیز را با هم ترکیب کنید

همه اش را بگذار کنار هم
همه اش را بگذار کنار هم
همه اش را بگذار کنار هم
همه اش را بگذار کنار هم
همه اش را بگذار کنار هم
همه اش را بگذار کنار هم

حالا روی لحیم کاری. ابتدا ، دو سوراخ را در تخته چوبی سوراخ می کنیم تا دو صفحه را جا بدهد. دکمه ها و مقاومت های مربوطه را لحیم می کنیم. من دو سوراخ کوچک اضافی ایجاد کردم تا سیم های ورودی از بالا عبور کنند تا فضای زیرین ذخیره شود ، اما این لازم نیست. سیمهای ورودی زیادی وجود ندارد بنابراین سیمهای GND و 5V به طور موازی کار می کنند ، اما اگر احساس ترفند می کنید ممکن است بخواهید یک ماتریس بسازید. من میکروکنترلر را به یک تخته ورودی کوچکتر دیگر که در زیر آن در کنار رمزگذار و دیگ سنج قرار داشت ، لحیم کردم. حالا من همه سیم ها را به ProMicro لحیم کردم. نیازی به خلاقیت نیست ، من فقط مجبور بودم از همان طرح واره ای که روی تخته نان است استفاده کنم ، اما لحیم کاری در چنین مکان کوچکی می تواند خسته کننده باشد. مثل من نباشید ، از سیم کش و لحیم خوب استفاده کنید!

در نهایت ، ممکن است بخواهید یک مورد خوب برای دوست جدید Photoshop خود بسازید. حداقل یکی بهتر از من!

اما اگر مشتاق هستید آن را امتحان کنید ، مقداری مقوا و نوار استفاده کنید و میکرو USB خود را وصل کنید.

مرحله 6: کد + نمایش

Image
Image

مطمئن شوید که برنامه کنترل پد را هنگام حرکت در پروژه آزمایش می کنید تا از شگفتی جلوگیری کنید!

در اینجا کد کامل وجود دارد:

از خواندن این مطلب متشکریم!

توصیه شده: