תוכן עניינים:

כרית בקרה מיני לפוטושופ (ארדואינו): 6 שלבים
כרית בקרה מיני לפוטושופ (ארדואינו): 6 שלבים

וִידֵאוֹ: כרית בקרה מיני לפוטושופ (ארדואינו): 6 שלבים

וִידֵאוֹ: כרית בקרה מיני לפוטושופ (ארדואינו): 6 שלבים
וִידֵאוֹ: ✅ОБЗОР МОДА PETERBILT 362 CABOVER 1.0 ATS 1.41 2024, יולי
Anonim
משטח שליטה מיני לפוטושופ (ארדואינו)
משטח שליטה מיני לפוטושופ (ארדואינו)

להלן אני אראה לך כיצד להכין כלי קטן שיעזור לך לעבוד בפוטושופ מהר יותר!

מקלדות שנעשו במיוחד עבור PS אינן חדשות, אך הן לא בדיוק מציעות את מה שאני צריך. כצייר, חלק ניכר מזמני בפוטושופ מושקע בהתאמת הגדרת המברשת, ואני חושב שכפתורי קיצור פשוטים אינם נותנים לי את השליטה בהתאמה לזרימת העבודה שלי. אז החלטתי להכין מקלדת משלי, קטנה, לא בולטת, ויש לה חוגים שיעניקו לי את האינטראקציה האנלוגית שתמיד רציתי.

אופן פעולתו פשוט: כדי לגרום למיקרו -בקר ליצור אינטראקציה עם פוטושופ, אנו מנצלים את קיצורי הדרך המוגדרים כברירת מחדל. עם לוח שהמחשב יכול לקרוא כמקלדת/עכבר, כל שעלינו לעשות הוא להשתמש בכמה שורות קוד פשוטות כדי לומר למחשב לקרוא כל קלט כשילוב של לחיצות מקשים. עכשיו כפתור הביטול נמצא במרחק לחיצה אחת בלבד!

בואו נתחיל! לפרויקט זה תזדקק ל:

  • 1 Sparkfun ProMicro (או ארדואינו לאונרדו, לא מומלץ)
  • מתאם מיקרו USB אחד
  • 6 לחצנים (או כל מספר שאתה אוהב)
  • נגדי 10k אוהם (1 לכל כפתור)
  • פוטנציומטר אחד
  • מקודד סיבוב אחד
  • חוטים, קרש לחם, פרבורד, הלחמה, סיכות כותרת וכו '.

אתה יכול להשתמש בארדואינו לאונרדו לפרויקט זה, אך ה- ProMicro היא חלופה זולה בהרבה המשתמשת באותו שבב atmega32u4, יש לו יותר סיכות ומגיעה בצורה הרבה יותר קטנה, מה שהופך אותו מושלם למקלדת.

כדי לתכנת את ה- ProMicro ב- Arduino IDE ייתכן שיהיה עליך להגדיר כמה דברים תחילה. תוכל לקרוא עוד על כך במדריך של SparkFun:

אם המחשב שלך מתקשה למצוא את המכשיר, ודא שמיקרו- USB שבו אתה משתמש אינו כוח בלבד ותומך בהעברת נתונים.

זהו פרויקט הארדואינו הראשון שלי, ומתאים למתחילים.

שלב 1: אב טיפוס של לוח הבקרה

אב טיפוס של כרית הבקרה
אב טיפוס של כרית הבקרה

אני ממליץ לך לבדוק את התוכנית שלך על לוח לחם לפני שתתחיל בהלחמה.

כאן תוכלו לראות את הסכימה שלי.

לחצנים 1 ו -2 יהיו ביטול וחידוש, 3 עד 5 מיועדים לכלים של מברשת, מחק ולסו, כפתור 6 הוא לחצן שמירה מהיר. המקודד ומד הסיר שולטים בגודל ואטימות בהתאמה.

שימו לב שאני שמאלי ומעצב את הפריסה בצורה שהכי נוחה לי לשימוש. ראו את הרגע בו אתם משתמשים בלוח הלוח שלכם כהזדמנות לחשוב אילו פונקציות תרצו שיהיו לבקר שלכם, מה הכי מתאים לכם ובסופו של דבר אם תזדקקו לחלקים נוספים כדי לבצע אותו.

שלב 2: לחצני לחיצה

ללחוץ על כפתורים
ללחוץ על כפתורים

הכפתורים הם הפשוטים ביותר ליישום. בואו נסתכל על הקוד:

#לִכלוֹל

כפתורי const int = {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 () {// שים את קוד ההתקנה שלך כאן, להפעלה פעם אחת: Serial.begin (9600); Keyboard.begin (); // לחצנים - הלוך במערך ובדוק אם יש לחיצות על (int i = כפתורים [0]; i <(sizeof (כפתורים)/sizeof (כפתורים [0]))+לחצנים [0]; ++ i) { pinMode (i, INPUT); }} readButton בוליאני (int pin) {// לבדוק ולבטל לחצנים אם (digitalRead (pin) == HIGH) {delay (10); if (digitalRead (pin) == HIGH) {return true; }} החזר שקר; } void doAction (int pin) {// בצע מתג משימות (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 (); לשבור; // מארז לאסו 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 (). אז כדי להפעיל את קיצור ביטול (ctrl+z), אנו פשוט משתמשים ב- Keyboard.press (ctrlKey) ולאחר מכן ב- Keyboard.press ('z'). זכור שתצטרך לכלול את Keyboard.h ואתחול המקלדת כדי לגשת לפונקציות אלה.

סיכות הקלט מאוחסנות במערך, כך שתוכל לעבור בקלות על כולן בפונקציית הלולאה (). דרך קלה אחת לגשת ואורך המערך ב- c ++ על ידי חלוקת גודל המערך כולו ברכיב המערך, ועוד אלמנט אחד. אנו מעיינים בכל הכפתורים כדי לבדוק אם לחצו על אחד מהם.

כדי לשמור על סדר הדברים, שמרתי את כל פעולות הכפתור שלי בהצהרת המתג של פונקציה שלוקחת את מספר הסיכה כארגומנט.

אם אתה רוצה שהכפתורים שלך יעשו דברים שונים, או שאתה רוצה להוסיף לחצנים נוספים, פשוט ערוך את תוכן הפונקציה doAction!

בגלל אופן הפעולה של כפתורים פיזיים, נצטרך להפחית אותם. זאת כדי למנוע מהתוכנית לקרוא כל לחיצות לא רצויות הנגרמות כתוצאה מקפיצות הלחצנים. ישנן דרכים רבות לעשות זאת, אך הוספתי פונקציית readButton () פשוטה הדואגת לכך.

פשוט חבר את הכפתורים שלך עם כמה נגדים של 10k, ואתה צריך להיות זהוב!

שלב 3: הפוטנציומטר

פוטנציומטר
פוטנציומטר

עכשיו על מד הסיר:

#לִכלוֹל

int dial0 = 0; התקנת void () {// שים את קוד ההתקנה שלך כאן, להפעלה פעם אחת: Serial.begin (9600); Keyboard.begin (); // חיוג חיוג 0 = analogRead (0); dial0 = מפה (dial0, 0, 1023, 1, 20); } void dialAction (int dial, int newVal, int lastVal) {switch (dial) {// מקרה אטימות 0: עיכוב (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"); } אחר {decim = constrain (decim, 0, 9); יחידה = אילוץ (יחידה, 0, 9); Serial.println (newVal*2); Keyboard.write (48+דצימים); Keyboard.write (48+יחידה); }} dial0 = newVal; לשבור; ברירת מחדל: הפסקה; }} // ------------------ LOOP MAIN ------------------------- בטל loop () {// שים את הקוד הראשי שלך כאן, להפעלה שוב ושוב: // אטימות // עיכוב (500); int val0 = analogRead (0); val0 = מפה (val0, 0, 1023, 1, 20); //Serial.print ("dial0:"); //Serial.println(val0); if (val0! = dial0) {// עשה משהו dialAction (0, val0, dial0); }}

מד הסיר עוקב אחר אותו היגיון, אבל זה קצת יותר מסובך.

ראשית בואו נסתכל איך אנחנו רוצים שזה יעבוד: לפוטושופ יש כמה קיצורי דרך נוחים לשינוי אטימות המברשת. אם תלחץ על מקש num כלשהו, האטימות תהיה שווה למספר זה*10. אבל אם תלחץ על שני מספרים, הוא יקרא את המספר השני כיחידה, וייתן לך שליטה מדויקת יותר.

אז אנחנו רוצים שמד הקוטר שלנו ימפה את הסיבוב שלו לאחוזים, אבל אנחנו לא רוצים לעשות את זה כל הזמן כי זה יהיה טיפשי. אנו רוצים לשנות את האטימות רק כאשר סובב את מד הסיר. אז אנו שומרים ערך נוסף אותו אנו משווים לערך analogRead () ומריצים את סקריפט הפעולה רק כאשר יש הבדל.

סוגיה נוספת שנתקל בה היא כיצד אנו הופכים את החזרה של analogRead כקלט. מכיוון שאין דרך פשוטה להפוך int למחרוזת, נצטרך להשתמש ב- int עצמו. עם זאת, אם אתה פשוט כותב Keyboard.press (int) תבחין שהקלט לא יהיה מה שרצית, ובמקום זאת יילחץ על מקש אחר.

הסיבה לכך היא שמפתחות המקלדת כולם מקודדים כמספרים שלמים, לכל מפתח יש אינדקס משלו. כדי להשתמש במקש num בצורה נכונה, יהיה עליך לחפש את האינדקס שלהם בטבלת ASCII:

כפי שאתה יכול לראות, מקשי num מתחילים באינדקס 48. אז כדי ללחוץ על המקש הנכון, כל שנצטרך לעשות הוא להוסיף את ערך החוגה ל- 48. הערכים העשרוניים והערך הם לחיצות נפרדות.

לבסוף, אנו צריכים דרך לשמור על הערך שלא יקפוץ קדימה ואחורה. כי אם תנסה להשתמש בחוגה עם מפה (val0, 0, 1023, 0, 100), תמצא שהתוצאות עצבניות מאוד. בדומה לאופן בו ניתקנו את הכפתורים, נתקן זאת על ידי ויתור על חלק מהדיוק. גיליתי שמיפוי זה ל- 1-20 ולאחר מכן הכפלת ערך הארגומנטים ב -5 להוות פשרה מקובלת.

כדי לחבר את הפוטנציומטר, פשוט חבר כבל 5V, חוט הארקה וכבל קלט אנלוגי ולא אמורות להיות בעיות.

עובדה מהנה: אם תשתמש בקיצור הדרך הזה בזמן שנבחר כלי כמו לאסו, הוא ישנה את אטימות השכבה במקום זאת. משהו שצריך לשים לב אליו.

שלב 4: המקודד הרוטרי

המקודד הרוטרי
המקודד הרוטרי

מקודדים רוטרי הם קצת כמו פוטנציומטרים, אך ללא גבול לכמה הם יכולים לפנות. במקום ערך אנלוגי, נבחן את כיוון הסיבוב של המקודד באופן דיגיטלי. לא אפרט על אופן הפעולה של אלה, אך מה שאתה צריך לדעת הוא שהוא משתמש בשני סיכות קלט בארדואינו כדי לספר לאיזה כיוון הוא פונה. המקודד הרוטרי יכול להיות מסובך יותר לעבודה, מקודדים שונים עשויים לדרוש הגדרות שונות. כדי להקל על הדברים, קניתי אחד עם PCB, שמוכנים להיסגר עם סיכות נקבות. עכשיו הקוד:

#לִכלוֹל

// מקודד סיבובי #פלט הגדרה A 15 #פלט הגדר B מונה int 14 = 0; int aState; int aLastState; התקנת void () {// שים את קוד ההתקנה שלך כאן, להפעלה פעם אחת: // Rotary pinMode (outputA, INPUT); pinMode (פלט B, INPUT); // קורא את המצב ההתחלתי של outputA aLastState = digitalRead (outputA); } void rotaryAction (int dir) {if (dir> 0) {Keyboard.press (']'); } אחר {Keyboard.press ('['); } Keyboard.releaseAll (); } // ------------------ LOOP MAIN ------------------------- לולאת חלל () {// שים את הקוד הראשי שלך כאן, כדי להריץ שוב ושוב: // Size aState = digitalRead (outputA); if (aState! = aLastState) {if (digitalRead (outputB)! = aState) {// counter ++; rotaryAction (1); } אחר {// מונה -; rotaryAction (-1); } //Serial.print("Position: "); //Serial.println(counter); } aLastState = aState; }

כברירת מחדל, Photoshop] ו [קיצורי דרך מגדילים ומקטינים את גודל המברשת. בדיוק כמו קודם, אנחנו רוצים להזין את אלה בלחיצות על מקשים. המקודד שולח מספר כניסות לכל סיבוב (תלוי בדגם), ואנו רוצים להגדיל/להקטין את גודל המברשת לכל אחת מהקלטים הללו, כך שתוכל להפוך את החוגה למעלה או למטה ממש מהר, אך גם תוכל לשלוט בו לאט בדיוק רב.

בדיוק כמו עם מד הסיר, אנחנו רוצים להפעיל את הפעולה רק כאשר הלוח הופך. שלא כמו מד הקוטר, כפי שהסברתי קודם, למקודד הרוטרי יש שתי כניסות מתחלפות. אנו בוחנים איזה מהם השתנה כדי לקבוע את הכיוון אליו סובבים את החוגה.

לאחר מכן בהתאם לכיוון, אנו לוחצים על המקש הנכון.

כל עוד אין לך בעיות במגע, זה אמור לעבוד.

שלב 5: הרכבת הכל ביחד

לשים את הכל ביחד
לשים את הכל ביחד
לשים את הכל ביחד
לשים את הכל ביחד
לשים את הכל ביחד
לשים את הכל ביחד

עכשיו על הלחמה. ראשית, אנו מקדחים שני חורים בלוח הבישול כך שיתאימו לשתי החוגות. כאשר אנו מלחמים את הכפתורים והנגדים שלהם. קידחתי שני חורים קטנים במיוחד כדי לתת לחוטי הקלט לעבור מלמעלה כדי לחסוך מקום מתחת, אבל זה לא הכרחי. אין הרבה חוטי קלט ולכן חוטי ה- GND ו- 5V פועלים במקביל, אבל אם אתה מרגיש ערמומי אולי תרצה ליצור מטריצה. הלחמתי את הבקר למיקרבורד אחר וקטן יותר, שהתאים מתחת לצד המקודד ומד הסיר. עכשיו אני מלחם את כל החוטים ל- ProMicro. אין צורך להיות יצירתיים, פשוט הייתי צריך לעקוב אחר אותו סכמטי של זה שעל לוח הלחם, אך הלחמה במקום כה קטן יכולה להיות מייגעת. אל תהיה כמוני, השתמש בפשיטת תיל והלחמה טובה!

לבסוף, אולי תרצה ליצור מארז נחמד לחבר החדש שלך בפוטושופ. אחד טוב משלי, לפחות!

אבל אם אתה משתוקק לנסות זאת, השתמש בקרטון ובסרט וחבר את המיקרו- USB שלך.

שלב 6: קוד + הדגמה

Image
Image

הקפד לבדוק את התוכנית של לוח הבקרה תוך כדי תנועה בפרויקט כדי להימנע מהפתעות!

להלן הקוד המלא:

תודה רבה שקראתם!

מוּמלָץ: