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

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

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

וִידֵאוֹ: רובוט החמאה: רובוט הארדואינו עם משבר קיומי: 6 שלבים (עם תמונות)
וִידֵאוֹ: מדהים #מצחיק #gaming 2024, יולי
Anonim
Image
Image

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

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

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

כדי לסכם מחדש, הרובוט צריך למלא את הדרישות הבאות:

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

שלב 1: הרעיון המרכזי

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

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

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

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

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

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

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

שלב 2: חומרים

חלקים מכניים

  • מדפסת תלת מימד ומכונת חיתוך בלייזר

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

    רוב הרכיבים מוחזקים יחד בעזרת ברגי כפתור M3, מכונות כביסה ואומים, אך לחלקם יש צורך בהגדרת ברגי M2 או M4. אורך הברגים נע בין 8-12 מ"מ

  • מרווחי PCB, 25 מ"מ ו -15 מ"מ
  • 2 מנועי סרוו עם גלגלים תואמים
  • כמה חוטי מתכת עבים בקוטר של 1-2 מ"מ

חלקים אלקטרוניים

  • מיקרו -בקר

    1 לוח ארדואינו UNO

  • מנועי סרוו

    • 2 מנועי סרוו גדולים: פיטק רציף 6 ק"ג 360 מעלות
    • 2 מנועי מיקרו סרוו: Feetech FS90
  • חיישנים

    • חיישן 1 קולי
    • 2 חיישני קרבה IR
    • 2 פוטודיודות IR
  • סוללות

    • מחזיק סוללה 9V + סוללה
    • מחזיק סוללה 4AA + סוללות
    • 1 קופסת סוללות 9V + סוללה
  • רכיבים נוספים

    • כמה חוטי קפיצה, חוטים ולוחות הלחמה
    • כמה נגדים
    • 1 נורית IR
    • 3 מתגים
    • זמזם 1
    • כפתור 1
    • מחבר סוללה מסוג Arduino עד 9V

שלב 3: בדיקת האלקטרוניקה

בדיקת האלקטרוניקה
בדיקת האלקטרוניקה
בדיקת האלקטרוניקה
בדיקת האלקטרוניקה

יצירת הכפתור:

הכפתור נעשה פשוט על ידי מתג, LED אינפרא אדום ונגד 220 אוהם בסדרה, המופעל על ידי סוללת 9V. זה מוכנס באריזה של 9V לעיצוב קומפקטי ונקי.

יצירת מודולי מקלט אינפרא אדום:

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

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

  • מנועי סרוו רציפים;
  • חיישן קולי;
  • מנועי סרוו לא רציפים;
  • זַמזָם;
  • זיהוי כיוון כפתור IR;
  • זיהוי קצוות על ידי חיישני קרבה;

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

שלב 4: עיצוב חתיכות מודפסות תלת מימד וחיתוך לייזר

עיצוב חתיכות מודפסות תלת מימד וחיתוך לייזר
עיצוב חתיכות מודפסות תלת מימד וחיתוך לייזר
עיצוב חתיכות מודפסות תלת מימד וחיתוך לייזר
עיצוב חתיכות מודפסות תלת מימד וחיתוך לייזר
עיצוב חתיכות מודפסות תלת מימד וחיתוך לייזר
עיצוב חתיכות מודפסות תלת מימד וחיתוך לייזר

חתיכות בלייזר

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

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

חתיכות קטנות יותר נחתכות למידות הסרוו הגדול כדי לתקן אותן במכלול.

חלקים מודפסים בתלת מימד

בנוסף לחיתוך בלייזר, יש צורך להדפיס כמה חלקים בתלת מימד:

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

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

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

ניתן למצוא את כל קבצי SOLIDWORKS בתיקייה המכווצת.

שלב 5: הרכבה וחיווט

Image
Image
הרכבה וחיווט
הרכבה וחיווט
הרכבה וחיווט
הרכבה וחיווט
הרכבה וחיווט
הרכבה וחיווט

המכלול יהיה תערובת של חיווט והברגה של הרכיבים, החל מלמטה למעלה.

צלחת תחתונה

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

צלחת אמצעית

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

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

צלחת עליונה

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

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

הדבר האחרון לבדוק ולתקן הוא זווית הסרוו לפתיחת המכסה בצורה נכונה.

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

בסוף שלב זה, ההרכבה מסתיימת והחלק האחרון שנותר הוא הקודים החסרים.

שלב 6: קידוד: חיבור הכל ביחד

כל הקוד הדרוש כדי שהרובוט יעבוד נמצא בקובץ המכווץ שניתן להוריד. החשוב ביותר הוא הקוד "הראשי" הכולל את ההתקנה והלולאה הפונקציונלית של הרובוט. רוב הפונקציות האחרות כתובות בקבצי משנה (גם בתיקייה המכווצת). יש לשמור קבצי משנה אלה באותה תיקייה (שנקראת "ראשית") כתסריט הראשי לפני העלאתה ל- Arduino

ראשית, המהירות הכללית של הרובוט מוגדרת יחד עם המשתנה "תזכיר". "תזכורת" זו היא ערך הזוכר לאיזה כיוון הסתובב הרובוט. אם "תזכיר = 1", הרובוט פנה/שמאל, אם "הזכיר = 2", הרובוט פנה/ימינה.

מהירות int = 9; // מהירות כללית של הרובוט

int להזכיר = 1; // כיוון ראשוני

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

// הגדרות @ איפוס // ----------------

הגדרת void () {initialize_IR_sensors (); אתחול_אובסטקלים_אדג'ים (); initialize_movement (); initialize_lid (); אתחול_בוזר (); // r2D2 (); int להזכיר = 1; // כיוון התחלתי Starter (להזכיר); }

הפונקציה Starter (תזכיר) נקראת לראשונה בהתקנה. פונקציה זו גורמת לרובוט להסתובב ולחפש את אות ה- IR של אחד הכפתורים. לאחר שמצאה את הכפתור, התוכנית תצא מהפונקציה Starter על ידי שינוי המשתנה 'cond' ל- false. במהלך סיבוב הרובוט הוא צריך להיות מודע לסביבתו: עליה לזהות קצוות ומכשולים. זה נבדק כל פעם לפני שהוא ממשיך להסתובב. ברגע שהרובוט יזהה מכשול או קצה, הפרוטוקול למניעת מכשולים או קצוות אלה יבוצע. פרוטוקולים אלה יוסברו בהמשך שלב זה. לפונקציית Starter יש משתנה אחד שהוא משתנה הזכירה שנדון בו קודם. על ידי מתן ערך הזכירה לפונקציית Starter, הרובוט יודע לאיזה כיוון הוא צריך לפנות כדי לחפש את הכפתור.

// לולאת התחלה: הסתובבו וחפשו את הכפתור // ------------------------------------ ----------------

void Starter (int rem) {if (isedgeleft () || isedgeright ()) {// איתור הקצוות edgeDetected (reminder); } אחר {bool cond = true; בעוד (cond == true) {if (buttonleft () == false && buttonright () == false && isButtonDetected () == true) {cond = false; } אחר {if (תזכיר == 1) {// פנינו שמאלה אם (isobstacleleft ()) {stopspeed (); הימנע_מכשול (להזכיר); } אחרת אם (isedgeleft () || isedgeright ()) {// איתור הקצוות edgeDetected (להזכיר); } אחר {turnleft (מהירות); }} אחרת אם (תזכיר == 2) {if (isobstacleright ()) {stopspeed (); הימנע_מכשול (להזכיר); } אחרת אם (isedgeleft () || isedgeright ()) {// איתור הקצוות edgeDetected (להזכיר); } אחר {פנייה ימינה (מהירות); }}}}}}}

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

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

אופן הפעולה של שגרת המסלול הוא כדלקמן: כאשר הכפתור מזוהה, הרובוט נע לכיוון הכפתור על ידי סיבוב לאותו כיוון בו הוא פנה (באמצעות משתנה הזכירה) ובאותו הזמן התקדם מעט קדימה. אם הרובוט פונה רחוק מדי, הלחצן יאבד שוב, ובשלב זה הרובוט זוכר שהוא צריך לפנות לכיוון השני. זה נעשה גם תוך כדי התקדמות קלה. בכך הרובוט פונה כל הזמן שמאלה ופונה ימינה, אך בינתיים עדיין מתקדם לעבר הכפתור. בכל פעם שהרובוט מוצא את הכפתור, הוא פשוט ממשיך להסתובב עד שאיבד אותו ובמקרה זה הוא מתחיל לנוע בכיוון השני. שימו לב להבדל בפונקציות המשמשות בלולאת המתנע ולולאה הראשית: לולאת המתח משתמשת "turnleft ()" או "turnright ()", בעוד הלולאה הראשית משתמשת ב- "moveleft ()" ו- "moveright ()". הפונקציות moveleft/right לא רק גורמות לרובוט להסתובב אלא גם גורמות לו להתקדם בו זמנית.

/ * לולאה פונקציונלית ---------------------------- הנה רק שגרת המסלול */

int lost = 0; // אם הלך לאיבוד = 0 הכפתור נמצא, אם הלך לאיבוד = 1 הלחצן אבד לולאת חלל () {if (isedgeleft () || isedgeright ()) {

אם (! isobstacle ()) {

קדימה (מהירות); עיכוב (5); } אחר {הימנעות_מכשולים (תזכיר); } אחר {if (תזכיר == 1 && lost == 1) {// פנינו שמאלה עצירה מהירה (); אם (! isobstacleright ()) {moveright (מהירות); // הסתובב כדי למצוא את הכפתור} else {avoid_obstacle (תזכיר); } תזכיר = 2; } אחרת אם (תזכיר == 2 && lost == 1) {stopspeed (); אם (! isobstacleleft ()) {moveleft (מהירות); // פנינו ימינה} else {avoid_obstacle (להזכיר); } תזכיר = 1; } אחר אם (איבד == 0) {אם (תזכיר == 1) {// פנינו שמאלה אם (! isobstacleleft ()) {moveleft (מהירות); // פנינו ימינה} else {stopspeed (); הימנע_מכשול (להזכיר); } //} אחר אם (תזכיר == 2) {אם (! isobstacleright ()) {moveright (מהירות); // הסתובב כדי למצוא את הכפתור} else {stopspeed (); הימנע_מכשול (להזכיר); }}} עיכוב (10); אבוד = 0; }} //}}

כעת ניתן הסבר קטן לשתי השגרות המורכבות ביותר:

הימנע מקצוות

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

הימנע ממכשולים

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

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

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

מוּמלָץ: