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

FaceBot: 8 שלבים
FaceBot: 8 שלבים

וִידֵאוֹ: FaceBot: 8 שלבים

וִידֵאוֹ: FaceBot: 8 שלבים
וִידֵאוֹ: רוטב בולונז | איך להכין בולונז מושלם ב-8 שלבים 2024, נוֹבֶמבֶּר
Anonim
FaceBot
FaceBot

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

ישנם כמה רובוטים קטנים בעלות נמוכה הזמינים בפחות מ -25 $ המאפשרים לך ללמד את היסודות של מדעי המחשב. אחת הבעיות ברובוטים אלה היא שהם אינם מספקים שקיפות באשר למתרחש בתוך הרובוט בזמן שאתה בונה אותו. בשנת 2018 כל זה התחיל להשתנות עם זמינותם של מסכי OLED באיכות גבוהה בעלות נמוכה. לתצוגות אלה יש את היתרונות הבאים:

  • הם בהירים מאוד ובעלי ניגודיות גבוהה. אפילו חדר מואר הם קלים לקריאה מזוויות רבות.
  • יש להם רזולוציה טובה. אלה שבהם אני משתמש הם 168x64 פיקסלים. זהו כמעט פי 4 מהתצוגות הקודמות שהשתמשנו בהן.
  • הם בעלי הספק נמוך והם פועלים בעקביות גם כאשר כוח הרובוט שלך יורד.
  • העלות שלהם יחסית נמוכה (בסביבות 16 $ כל אחד) והמחירים יורדים.

בעבר הם היו קשים לתכנות והיו משתמשים בזיכרון רב מדי לשימוש עם Arduino Nanos בעלות נמוכה. ל- Nano יש רק 2K או זיכרון RAM דינאמי. מדריך זה יראה לכם כיצד לעקוף בעיות אלה ולבנות רובוט שילדים אוהבים לתכנת.

שלב 1: שלב 1: בנה את רובוט הבסיס שלך

שלב 1: בנה את רובוט הבסיס שלך
שלב 1: בנה את רובוט הבסיס שלך

כדי לבנות FaceBot בדרך כלל אנו מתחילים עם רובוט בסיס. דוגמה אחת היא רובוט CoderDojo של 25 $ המתואר כאן. רובוט זה משתמש בארדואינו ננו בעלות נמוכה ופופולרית, בקר מנוע פשוט, 2 מנועי DC ו -4 או 6 סוללות AA. רוב התלמידים מתחילים להשתמש בחיישן הפינג כדי לבנות רובוט למניעת התנגשות. מכיוון שהוא מספק מערכת כוח של 5V הוא מושלם עבור FaceBot. כדי לשמור על עלויות נמוכות אני בדרך כלל מבקש מהתלמידים שלי להזמין את החלקים באינטרנט מ- e-Bay. לעתים קרובות לוקח החלקים 2-3 שבועות להגיע ודורשים כמות קטנה של הלחמות עבור המנועים ומתג ההפעלה. שאר החיבורים נעשים באמצעות לוח לחם של 400 קשרים. תלמידים חמים לעתים קרובות את החוטים כדי להדביק אותם כדי שלא יחליקו החוצה.

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

ברגע שיש לך את התכנות להימנעות מהתנגשות אתה נקרא כדי להוסיף פנים!

שלב 2: שלב 2: מצא והזמין את תצוגת OLED שלך

שלב 2: מצא והזמין את תצוגת OLED שלך
שלב 2: מצא והזמין את תצוגת OLED שלך

כשיצאו תצוגות OLED, אלה בעלות נמוכה נועדו לשעונים או למסכי כושר. כתוצאה מכך הם היו קטנים, בדרך כלל סביב סנטימטר אחד. החדשות הטובות הן שהן היו בעלות נמוכה, בסביבות 3 $. בנינו כמה רובוטים עם תצוגות אלה, אך מכיוון שהגודל של הצגים היה מוגבל, מה שנוכל לעשות על המסך. ואז בשנת 2018 התחלנו לראות את העלות של מסכי OLED הגדולים בגודל 2.42 אינץ 'יורדים במחיר. בינואר 2019 המחירים ירדו לכ -16 דולר. סוף סוף הייתה לנו תצוגה נהדרת בה נוכל להשתמש עבור פרצופי הרובוט שלנו.

להלן המפרט של תצוגות אלה:

  1. 2.42 אינץ '(מדידה אלכסונית)
  2. 128 פיקסלים לרוחב (ממד x)
  3. 64 פיקסלים גבוהים (ממד y)
  4. הספק נמוך (בדרך כלל 10ma)
  5. מונוכרום (הם מגיעים בצהוב, ירוק, כחול ולבן)
  6. ממשק SPI כברירת מחדל למרות שאתה יכול לשנות אותו ל- I2C אם תרצה
  7. מנהל התקן SSD1309 (מנהל התצוגה נפוץ מאוד)

ממשק ה- SPI כולל שבעה חוטים. להלן התוויות האופייניות בממשק:

  1. CS - בחר שבב
  2. DC - נתונים/פקודה
  3. RES - איפוס
  4. SDA - נתונים - זה צריך להיות מחובר לפין Arduino Nano 11
  5. SCL - שעון - זה צריך להיות מחובר לסיכה Arduino Nano 13
  6. VCC - +5 וולט
  7. GND - קרקע

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

שלב 3: שלב 3: חבר את ה- OLED ל- Arduino Nano

שלב 3: חבר את ה- OLED ל- Arduino Nano
שלב 3: חבר את ה- OLED ל- Arduino Nano
שלב 3: חבר את ה- OLED ל- Arduino Nano
שלב 3: חבר את ה- OLED ל- Arduino Nano

עכשיו אתה מוכן לבדוק את ה- OLED שלך. אני משתמש ב- Arduino Nano אחר רק כדי לבדוק שכל תצוגה שאני מקבל עובדת. ברגע שהבדיקות עובדות אז אני מחבר אותו לרובוט. תרשים החיווט של הבוחן מוצג באיור לעיל. שים לב שאתה יכול להעביר את חיבורי OLED לסיכות אחרות התומכות ביציאות דיגיטליות, אך אם אתה מוודא ש- SCL (שעון) נמצא בסיכת Arduino Nano 13 ו- SDA (נתונים) נמצאת ב- Arduino Nano pin 11 תוכל להשתמש בהגדרות ברירת המחדל ב- התוכנה. זה שומר על הקוד שלך קצת יותר פשוט.

שלב 4: שלב 4: בדוק את המסך שלך

שלב 4: בדוק את המסך שלך
שלב 4: בדוק את המסך שלך

כדי לבדוק את התצוגה שלך נשתמש בספריית u8g2. ישנן ספריות אחרות בהן תוכל להשתמש, אך מניסיוני, אף אחת מהן לא טובה בספריית u8g2. גורם קריטי אחד הוא כמה זיכרון RAM בתוך הארדואינו משמש את התצוגה. U8g2 היא הספרייה היחידה שמצאתי שמשתמשת ב"מצב דף "שיעבוד עם ה- Arduino Nano.

אתה יכול להוסיף ספרייה זו ל- IED Arduino שלך על ידי חיפוש "u8g2" בתפריט "נהל ספריות". תוכל גם להוריד את הקוד ישירות מ- gethub.

github.com/olikraus/u8g2

קוד הבדיקה שאני משתמש בו נמצא כאן:

github.com/dmccreary/coderdojo-robots/blob…

יש לשים לב לכמה דברים. מספרי הסיכות של SCL ו- SDA מגיבים מכיוון שהם סיכות ברירת המחדל ב- Nano. הבונה של u8g2 הוא שורת המפתח:

// אנו משתמשים ב- SSD1306, 128x64, עמוד אחד, ללא שם, 4 חוטים, חומרה, SPI ללא סיבוב שמשתמש רק ב 27% מהזיכרון הדינמי U8G2_SSD1306_128X64_NONAME_1_4W_HW_SPI u8g2 (U8G2_R0, CS_PIN, DC_PIN, RDS_PIN);

אנו משתמשים במצב של עמוד יחיד מכיוון שמצב זה משתמש בזיכרון RAM מינימלי. אנו משתמשים בממשק החומרה בעל 4 החוטים ו- OLED מגיע כברירת מחדל עם SPI.

שלב 5: שלב 5: הוסף את ה- OLED שלך לרובוט

שלב 5: הוסף את ה- OLED שלך לרובוט
שלב 5: הוסף את ה- OLED שלך לרובוט

כעת, כאשר יש לנו OLED עובד ואנו יודעים כיצד לאתחל את ספריות u8g2 אנו מוכנים לשלב את ה- OLED עם הרובוט הבסיסי שלנו. יש לקחת בחשבון כמה דברים. בבדיקת OLED שלנו השתמשנו בסיכות שהיו כולן זו ליד זו כדי להקל על החיווט. לרוע המזל, אנו זקוקים לסיכה 9 כדי להניע את הרובוט שלנו מכיוון שהוא אחד מהסיכות PWM שאנו צריכים לשלוח אות אנלוגי לנהג המנוע. הפתרון הוא להעביר את החוט שנמצא בסיכה 9 לסיכה חינמית אחרת ולאחר מכן לשנות את ההצהרה #define לסיכה החדשה הזו. כדי להרכיב את ה- OLED בחזית הרובוט חתכתי שתי חתיכות משולשות מפרספקס והדביקו חם. אותם למארז. אני תמיד אוהב להשתמש בנייר זכוכית מסובך כדי לחסוך את פני ה פרספקס לפני שאני דבק את החלקים יחד כדי שלא יתפרקו בקלות רבה מדי.

לאחר מכן, בואו נביא קצת נתונים על ה- OLED שלנו וצייר כמה פרצופים על הרובוט!

שלב 6: שלב 6: הצגת פרמטרים של רובוט

שלב 6: הצג פרמטרים של רובוט
שלב 6: הצג פרמטרים של רובוט

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

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

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

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

github.com/dmccreary/coderdojo-robots/blob…

שלב 7: שלב 7: צייר כמה פנים

שלב 7: צייר כמה פנים!
שלב 7: צייר כמה פנים!

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

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

אתה יכול להשתמש בפונקציות display.height () ו- display.width () כדי לקבל את גודל התצוגה. בקוד למטה הגדרנו משתנים

half_width = display.width ()/2; half_height = display.height ()/2;

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

// אנו עושים זאת בתחילת כל לולאה

display.clearDisplay (); // צייר פנים בהירות לרקע displaydisplay.fillCircle (חצי רוחב, חצי גובה, 31, לבן); // תצוגה כהה בעין ימין. fillCircle (חצי_ רוחב - 10, display.height ()/3, 4, שחור); // עין שמאל כהה display.fillCircle (half_width + 10, display.height ()/3, 4, BLACK); // צייר קו ישר לתצוגת הפה.שרטוט (חצי_ רוחב - 10, תצוגה.גובה ()/3 * 2, חצי_ רוחב + 10, תצוגה.גובה ()/3 * 2, שחור); // שורה זו שולחת את הפנים החדשות שלנו לתצוגת OLED display.display ();

שלב 8: שלב 8: התאמה אישית

שלב 8: התאמה אישית
שלב 8: התאמה אישית

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

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

  1. קדימה ימינה
  2. הפוך ימינה
  3. שמאל קדימה
  4. שמאל הפוך

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

דוגמה לתוכנית זו נמצאת כאן

github.com/dmccreary/coderdojo-robots/blob…

ישנן דוגמאות נוספות רבות ופרטי תכנות בדף ה- CoderDojo Robots GitHub FaceBot.

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

אנא יידע אותנו אילו פנים אתה ותלמידיך יוצאים!

קידוד שמח!

מוּמלָץ: