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

בקרי ארדואינו: 10 שלבים (עם תמונות)
בקרי ארדואינו: 10 שלבים (עם תמונות)

וִידֵאוֹ: בקרי ארדואינו: 10 שלבים (עם תמונות)

וִידֵאוֹ: בקרי ארדואינו: 10 שלבים (עם תמונות)
וִידֵאוֹ: איך להבין תוכנית נתונה של בקר ארדואינו 2024, נוֹבֶמבֶּר
Anonim
בקרי ארדואינו
בקרי ארדואינו
בקרי ארדואינו
בקרי ארדואינו

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

פרויקט זה נועד גם לנצל את ספריית JavaScript p5.js יחד עם ספריית p5.play המיועדת ל- p5.js. ספריות אלה מאפשרות לנו לתכנת את המשחקים שלנו בקלות. באתר p5.play יש חבורה של הדרכות ודוגמאות למשתמשים ליצור משחקים עבורו. פרויקט זה מאפשר למשתמשים לתרגל את כישורי פיתוח החומרה והתוכנה שלהם.

שלב 1: מה שאתה צריך

מה שאתה תצטרך
מה שאתה תצטרך

כלים:

  • מלחם
  • לְרַתֵך
  • חשפניות חוטים
  • חותכי צד
  • צְבָת

חוּמרָה:

  • לוח תואם Arduino (השתמשתי בלוח Red Sparkfun וכן ב- Arduino Uno ו- Leonardo)
  • לוח פרפ:

    • לוחות פרפר ירוקים בגודל 8 ס"מ על 6 ס"מ
    • לוח פרפוק מגן Aduino Uno
  • חיישנים שונים

    • ג'ויסטיקים
    • לחצנים (עם נגדים, 10k אוהם, ללכת איתם)
    • פוטנציומטרים
    • חיישני גמישות
    • חיישני לחץ
    • וכו…
  • חוּט:

    • חוט יחיד (השתמשתי 26 AWG מוצק)
    • חוט סרט וקמטים
  • כותרות פרידה (לפחות 20 כאלה)
  • חומרה אופציונלית (אתה יכול להשתמש בקרטונים ובעניבות דבק חם/רוכסן במקום):

    • לוחות קרש ומגשרים לאב טיפוס
    • מארזים מודפסים בתלת מימד
    • מחברים לחומרה (השתמשתי בברגי M2.5)

תוֹכנָה:

  • Arduino IDE
  • ספריית p5.js

    ספריית P5.play גם כן

  • p5.serialcontrol
  • Node.js

שלב 2: בנייה: מרכז המסוף, הגדרת המגן

בניין: מרכז הקונסולה, הגדרת המגן
בניין: מרכז הקונסולה, הגדרת המגן

הלחם את הכותרות ללוח ה- perf מגן Arduino Uno.

  • התחלתי עם כותרות המגן (כוח, אנלוגי ודיגיטלי)
  • להלן סיכות הכותרת 2x5. אתה יכול להשתמש בכותרות 2x5, או רק בשתי שורות של 5 כותרות מתנתקות. סידרתי את אלה עם A3 ו- A4 אנכית, והשארתי 2 רווחים ביניהם.

שלב 3: בנייה: מרכז הקונסולה, חיווט המגן

בניין: מרכז הקונסולה, חיווט המגן
בניין: מרכז הקונסולה, חיווט המגן
בניין: מרכז הקונסולה, חיווט המגן
בניין: מרכז הקונסולה, חיווט המגן
בניין: מרכז הקונסולה, חיווט המגן
בניין: מרכז הקונסולה, חיווט המגן

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

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

הרעיון של עיצוב מגן זה הוא לאפשר 3 כניסות אנלוגיות ו -5 כניסות דיגיטליות מכל בקר. זה מנצל באופן מלא את כל הכניסות האנלוגיות ב- Un Arduino כמו גם את החוטים הנותרים בכבל הסרט שלנו.

שלב 4: בנייה: הבקרים, הגדרת החלקים שלך

בניין: הבקרים, הגדרת החלקים שלך
בניין: הבקרים, הגדרת החלקים שלך
בניין: הבקרים, הגדרת החלקים שלך
בניין: הבקרים, הגדרת החלקים שלך
בניין: הבקרים, הגדרת החלקים שלך
בניין: הבקרים, הגדרת החלקים שלך

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

אם אתה רוצה לשכפל את זה, אתה יכול להציג את התמונות שלי למיקום.

השלב הבא הוא הלחמת כבל הסרט שלך ללוח perf.

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

השלב הבא הוא לנתב את החוטים שלך. התחלתי בחיווט החשמל (5V/חוט אדום) והקרקע (חוט חום) תחילה לחיישנים. לאחר מכן חיברתי את הכניסות האנלוגיות. מצאתי שקל להשתמש בכבל הכתום (אנלוגי A0 או A3) לתנועה אופקית ובכבל הצהוב (אנלוגי A1 או A4) לתנועה אנכית.

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

העלתי סכמטי מהיר של בקר הג'ויסטיק שלי אם תרצה להסתכל על זה. מתרשים ה- pin-out שלנו, אתה יכול לראות את האפשרות של כל חיבור בקר (3 כניסות אנלוגיות ו -5 דיגיטליות).

שלב 5: אופציונלי: מארזים

אופציונלי: מארזים
אופציונלי: מארזים
אופציונלי: מארזים
אופציונלי: מארזים
אופציונלי: מארזים
אופציונלי: מארזים

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

תוכל למצוא את דגמי התלת מימד שלי המצורפים לשלב זה. יצרתי מארזים לרכזת הן ל- Arduino Uno/Leonardo והן ל- Sparkfun RedBoard (הלוח הזה קצת יותר רחב ומשתמש במיני USB).

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

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

אתה יכול למצוא את כל קבצי התלת -ממד ב- GitHub.

שלב 6: תכנות: ארדואינו

תכנות: ארדואינו
תכנות: ארדואינו

נתחיל בלהקים סקיצה פשוטה לבדיקה. אני מציע להשתמש במדריך שנוצר על ידי ITP ב- NYU שנמצא כאן. כדי לבצע הדרכה זו, יהיה עליך להתקין p5.serialcontroll ו- node.js. במדריך זה תתוודע להגדרת Arduino לשליחת נתונים סדרתיים הניתנים לשימוש על ידי ספריית javascript שלנו, p5.js. אתה יכול להשתמש ברכזת ובקר שיצרנו בשלבים הקודמים לשם כך, או שתוכל לשכפל את המעגלים שהוכחו במדריך. הדרכה זו משתמשת בסיכת הכניסה האנלוגית A0 ב- Arduino Uno אשר ממופה לחוט הכתום של הבקר הראשון שלך.

את ההדרכה הבאה שתרצה לעקוב אחריה תוכל למצוא כאן. מדריך זה ינחה אותך בהגדרת תשומות מרובות וניצולן ב- p5.js. במדריך נעשה שימוש בכניסות האנלוגיות A0 ו- A1. אלה יתאימו לחוטים הכתומים והצהובים בבקר 1 של המערכת שלנו.

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

// בקר 1 קונסט int int dig2 = 2; // כחול const int dig3 = 3; // סגול const int dig4 = 4; // אפור const int dig5 = 5; // const const int dig6 = 6; // שחור // בקר 2 const int dig7 = 7; // כחול const int dig8 = 8; // סגול const int dig9 = 9; // אפור const int dig10 = 10; // const const int dig11 = 11; //שָׁחוֹר

הגדרת בטל () {

Serial.begin (9600); while (Serial.available () <= 0) {Serial.println ("שלום"); // לשלוח עיכוב של הודעת התחלה (300); // המתן 1/3 שנייה} pinMode (dig2, INPUT); pinMode (dig3, INPUT); pinMode (dig4, INPUT); pinMode (dig5, INPUT); pinMode (dig6, INPUT); pinMode (dig7, INPUT); pinMode (dig8, INPUT); pinMode (dig9, INPUT); pinMode (dig10, INPUT); pinMode (dig11, INPUT); }

לולאת חלל () {

if (Serial.available ()> 0) {// קרא את הבייט הנכנס: int inByte = Serial.read (); // קרא את החיישן:

// בקר ANALOG 1

int analog0 = analogRead (A0); int analog1 = analogRead (A1); int analog2 = analogRead (A2); // בקר ANALOG 2 int analog3 = analogRead (A3); int analog4 = analogRead (A4); int analog5 = analogRead (A5); // בקר DIGITAL 1 int digital2 = digitalRead (dig2); int digital3 = digitalRead (dig3); int digital4 = digitalRead (dig4);

int digital5 = digitalRead (dig5);

int digital6 = digitalRead (dig6); // בקר DIGITAL 2 int digital7 = digitalRead (dig7); int digital8 = digitalRead (dig8); int digital9 = digitalRead (dig9); int digital10 = digitalRead (dig10); int digital11 = digitalRead (dig11); // הדפס את התוצאות: Serial.print (analog0); // [0] Serial.print (","); Serial.print (אנלוגי 1); // [1] Serial.print (","); Serial.print (אנלוגי 2); // [2] Serial.print (","); // Start Controller 2 data Serial.print (analog3); // [3] Serial.print (","); Serial.print (אנלוגי 4); // [4] Serial.print (","); Serial.print (אנלוגי 5); // [5] Serial.print (","); Serial.print (digital2); // [6] Serial.print (","); Serial.print (digital3); // [7] Serial.print (","); Serial.print (digital4); // [8] Serial.print (","); Serial.print (digital5); // [9] Serial.print (","); Serial.print (digital6); // [10] Serial.print (","); // התחל בקר 2 נתונים Serial.print (digital7); // [11] Serial.print (","); Serial.print (דיגיטלי 8); // [12] Serial.print (","); Serial.print (digital9); // [13] Serial.print (","); Serial.println (digital10); // [14] Serial.print (","); Serial.println (digital11); // [15]}}

קוד זה שולח את הנתונים הטוריים משני הבקרים שלנו כמערך של 16 מספרים. ששת המספרים הראשונים הם הכניסות האנלוגיות שלנו (הנעים בין 0-1023) ו -10 הערכים הנותרים הם הערכים הדיגיטליים שלנו (0 או 1).

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

שלב 7: תכנות: HTML

לאחר שנעשה את העבודה והארדואינו, נוכל להתחיל לתכנת את חומרי הרשת שלנו. קוד ה- HTML פשוט מאוד.

גוף {ריפוד: 0; שוליים: 0;}

קוד html פשוט מקשר את קבצי ה- javascript שלנו יחד. רוב הקוד שלנו יקרה בפועל בקובץ ה-.js של הסקיצה שלנו.

שלב 8: תכנות: P5.js ו- Javascript

לאחר שהגדרנו את ה- HTML שלנו, נוכל לעבוד על JavaScript שלנו. אם עדיין לא עשית זאת, עליך להוריד את p5.js וכן את p5.play ולהוסיף אותם לתיקיית הספריות שלך בספריית האתר שלך.

  • p5.js
  • p5.play

בשלב הקודם הגדרנו את קובץ ה- HTML שלנו כך שיתקשר לספריות p5.js ו- p5.play שלנו. הגדרנו אותו לשימוש בקובץ sketch.js שלנו, שם נבצע את רוב התכנות שלנו. להלן הקוד לשלד שלנו. תוכל למצוא אותו גם כאן.

// Serial Variablesvar סדרתי; // משתנה בכדי להחזיק מופע של ספריית הסדרות הספורט var portName = 'COM4'; // מלא את שם היציאה הטורית שלך כאן // משתני משחק גלובליים ---------------

// פונקציית התקנה ----------------------

הגדרת פונקציות () {createCanvas (640, 480); serial = new p5. SerialPort (); // צור מופע חדש של ספריית הסדרת היציאות serial.on ('list', printList); // הגדר פונקציית התקשרות חזרה לאירוע רשימת הסדרות הטורקיות serial.on ('מחובר', serverConnected); // callback לחיבור לשרת serial.on ('open', portOpen); // שיחה חוזרת לפתיחת היציאה serial.on ('data', serialEvent); // התקשרות חזרה כאשר נתונים חדשים מגיעים serial.on ('error', serialError); // החזרה לשגיאות serial.on ('close', portClose); // התקשרות חוזרת ליציאה הסופרת serial.list (); // רשום את היציאות הטורקיות serial.open (portName); // פתח יציאה טורית} // פונקציית צייר ----------------------- פונקציה ציירה () {רקע (0); // רקע שחור} // פרש כאן נתונים סדרתיים ---------- פונקציה serialEvent () {// קרא מחרוזת מהיציאה הטורית // עד שתקבל החזרה לכרכרה ו- newline: var inString = serial. readStringUntil ('\ r / n'); // בדוק אם יש שם למעשה ssetring: אם (inString.length> 0) {if (inString! == 'שלום') {// אם אתה מקבל שלום, התעלם ממנו var sensors = split (inString, ', '); // לפצל את המחרוזת בפסיקים אם (חיישנים.אורך> 16) {// אם ישנם שישה עשר אלמנטים (6 אנלוגיים, 10 דיגיטליים) // השתמשו בנתוני חיישנים כאן:

}

} serial.write ('x'); // שלח בת לבקש עוד נתונים סדרתיים}} // קבל את רשימת היציאות: function printList (portList) {// portList הוא מערך של שמות יציאות טוריות עבור (var i = 0; i <portList.length; i ++) {// הצג את הרשימה במסוף: print (i + "" + portList ); }} function serverConnected () {print ('מחובר לשרת.'); } function portOpen () {print ('הנמל הסידורי נפתח.')} function serialError (err) {print ('משהו השתבש ביציאה הטורית.' + שגיאה); } function portClose () {print ('היציאה הסדרתית סגורה.'); } פונקציה סגירת קוד () {serial.close (portName); להחזיר null; } window.onbeforeunload = סגירת קוד;

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

// לפרש כאן נתונים סדרתיים ----------

פונקציה serialEvent () {// לקרוא מחרוזת מהיציאה הטורית // עד שתקבל החזרה לכרכרה ו- newline: var inString = serial.readStringUntil ('\ r / n'); // בדוק שיש שם למעשה ssetring: אם (inString.length> 0) {if (inString! == 'שלום') {// אם אתה מקבל שלום, התעלם מזה var sensors = split (inString, ', '); // לפצל את המחרוזת בפסיקים אם (sensors.length> 16) {// אם ישנם שישה עשר אלמנטים (6 אנלוגיים, 10 דיגיטליים) // השתמשו בנתוני חיישנים כאן:}} serial.write ('x'); // שלח בתים המבקש נתונים טוריים נוספים}}

כעת אנו יכולים להריץ את התוכנית שלנו כדי לראות אם היא עובדת!

שלב 9: הפעלת התוכנית

הפעלת התוכנית שלך
הפעלת התוכנית שלך

כעת נוכל להריץ את התוכנית כדי לראות אם היא עובדת. אתה יכול ליצור משחק משלך באמצעות קובץ skeleton.js בקובץ הקודם שלנו או להשתמש במשחק הצינור הפשוט שנמצא כאן.

בדומה למעבדת ITP, כדי להפעיל את התוכנית שלנו, נבצע את השלבים שלהלן.

  • חבר את ה- Arduino עם הבקר (ים) שאתה מתכוון להשתמש בו.
  • פתח את p5.serialcontrol
  • שנה את הפורט של סקיצת p5 שלך לזה שאתה משתמש (אם אתה משתמש בשלד, זה נמצא בקו 3)
  • פתח את קובץ ה- HTML המקשר למערכון p5 שלך

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

שלב 10: התקדמות נוספת

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

מוּמלָץ: