- כיצד לבנות מכשול הימנעות מרובוט באמצעות חיישן קולי
- רכיבים נדרשים
- תרשים מעגל
- מכשול הימנעות מרובוט באמצעות ארדואינו - קוד
מכשול הימנעות מרובוט הוא מכשיר חכם שיכול לחוש באופן אוטומטי את המכשול שמולו ולהימנע ממנו על ידי פנייתו לכיוון אחר. תכנון זה מאפשר לרובוט לנווט בסביבה לא ידועה על ידי הימנעות מהתנגשויות, שהיא דרישה ראשונית לכל רובוט נייד אוטונומי. היישום של הרובוט הימנעות ממכשולים אינו מוגבל והוא משמש ברוב הארגונים הצבאיים המסייע בביצוע עבודות מסוכנות רבות אשר אינן יכולות להיעשות על ידי אף חייל.
בנינו בעבר מכשול הימנעות מרובוט באמצעות Raspberry Pi ובאמצעות מיקרו-בקר PIC. הפעם נבנה רובוט המונע מכשולים באמצעות חיישן קולי וארדואינו. כאן משתמשים בחיישן קולי לחישת המכשולים בדרך על ידי חישוב המרחק בין הרובוט למכשול. אם הרובוט מוצא מכשול כלשהו הוא משנה את הכיוון וממשיך לנוע.
כיצד לבנות מכשול הימנעות מרובוט באמצעות חיישן קולי
לפני שנלך לבנות את הרובוט, חשוב להבין כיצד עובד החיישן הקולי מכיוון שלחיישן זה יהיה תפקיד חשוב בזיהוי מכשול. העיקרון הבסיסי שעומד מאחורי העבודה של חיישן קולי הוא לרשום את הזמן שלוקח החיישן להעברת קרני אולטראסאונד וקבלת קרני האולטראסאונד לאחר הפגיעה במשטח. ואז המרחק מחושב באמצעות הנוסחה. בפרויקט זה נעשה שימוש בחיישן הקולי HC-SR04 הזמין באופן נרחב. כדי להשתמש בחיישן זה, גישה דומה תוסבר לעיל.
אז, סיכת הטריגר של HC-SR04 עשויה להיות גבוהה עבור לפחות 10 אנשים. קרן קולית מועברת עם 8 פעימות של 40KHz כל אחת.
לאחר מכן האות פוגעת על פני השטח וחוזרת חזרה ונלכדת על ידי פין הד המקלט של HC-SR04. סיכת ההד כבר התייצבה באותה תקופה בשליחה גבוהה.
הזמן שלוקח לקורה לחזור נשמר במשתנה ומומר למרחק באמצעות חישובים מתאימים כמו להלן
מרחק = (זמן x מהירות הצליל באוויר (343 m / s)) / 2
השתמשנו בחיישן קולי בפרויקטים רבים, כדי ללמוד עוד על חיישן אולטרסאונד, בדוק פרויקטים אחרים הקשורים לחיישן אולטרסאונד.
ניתן למצוא את הרכיבים לרובוט המונע מכשול זה. על מנת לייצר שלדה, ניתן להשתמש בכל שלדת צעצוע או לייצר אותה בהתאמה אישית.
רכיבים נדרשים
- Arduino NANO או Uno (כל גרסה)
- חיישן קולי HC-SR04
- מודול נהג מנוע LM298N
- מנועי DC 5V
- סוֹלְלָה
- גלגלים
- שִׁלדָה
- חוטי מגשר
תרשים מעגל
תרשים המעגל השלם לפרויקט זה ניתן להלן, כפי שניתן לראות שהוא משתמש בננו של ארדואינו. אבל אנחנו יכולים גם לבנות מכשול הימנעות מרובוט באמצעות ארדואינו UNO עם אותו מעגל (עקוב אחר אותו pinout) וקוד.
לאחר שהמעגל מוכן עלינו לבנות את המכשול שלנו על הימנעות ממכונית על ידי הרכבת המעגל על גבי שלדה רובוטית כפי שמוצג להלן.
מכשול הימנעות מרובוט באמצעות ארדואינו - קוד
התוכנית המלאה עם סרטון הדגמה ניתנת בסוף פרויקט זה. התוכנית תכלול הגדרת מודול HC-SR04 והוצאת האותות לסיכות המנוע כדי להזיז את כיוון המנוע בהתאם. בפרויקט זה לא ישמשו ספריות.
ראשית הגדר טריג וסיכת הד של HC-SR04 בתוכנית. בפרויקט זה סיכת הטריג מחוברת ל- GPIO9 וסיכת ההד מחוברת ל- GPIO10 של Arduino NANO.
int trigPin = 9; // סיכת טריג של HC-SR04 int echoPin = 10; // סיכת הד של HC-SR04
הגדר סיכות לקלט של מודול נהג המנוע LM298N. ל- LM298N 4 סיכות קלט נתונים המשמשות לבקרת כיוון המנוע המחובר אליו.
int revleft4 = 4; // תנועה הפוכה של המנוע השמאלי int fwdleft5 = 5; // תנועת ForWarD של המנוע השמאלי int revright6 = 6; // תנועה הפוכה של המנוע הימני int fwdright7 = 7; // תנועת ForWarD של המנוע הימני
בשנת התקנה () פונקציה, להגדיר את כיוון הנתונים של סיכות GPIO מנוצלות. ארבעת סיכות המנוע וסיכת ההדק מוגדרים כ- OUTPUT ו- Pin Pin מוגדר כקלט.
pinMode (revleft4, OUTPUT); // הגדר סיכות מנוע כסיכת pinMode (fwdleft5, OUTPUT); pinMode (revright6, OUTPUT); pinMode (fwdright7, OUTPUT); pinMode (trigPin, OUTPUT); // הגדר פין טריג כ pinMode פלט (echoPin, INPUT); // הגדר סיכת הד כהקלט לתפיסת גלים מוחזרים
בשנת לולאה () פונקציה, לקבל את המרחק בין HC-SR04 ובהתבסס על מרחק לנוע לכיוון המנוע. המרחק יראה את מרחק האובייקט שמגיע מול הרובוט. המרחק נלקח על ידי פריצת קרן אולטרסאונד עד 10 אותנו וקבלת אותה לאחר 10 us. למידע נוסף על מדידת מרחק באמצעות חיישן קולי וארדואינו, עקוב אחר הקישור.
digitalWrite (trigPin, LOW); עיכוב מיקרו-שניות (2); digitalWrite (trigPin, HIGH); // שלח גלים בעיכוב של 10 usMicroseconds (10); משך = pulseIn (echoPin, HIGH); // לקבל מרחק גלים משתקפים = משך / 58.2; // להמיר לעיכוב מרחק (10);
אם המרחק גדול מהמרחק שהוגדר אומר שאין מכשול בדרכו והוא ינוע בכיוון קדימה.
אם (מרחק> 19) { digitalWrite (fwdright7, HIGH); // להתקדם קדימה digitalWrite (revright6, LOW); digitalWrite (fwdleft5, HIGH); digitalWrite (revleft4, LOW); }
אם המרחק קטן מהמרחק שהוגדר כדי להימנע ממכשול פירושו שיש מכשול כלשהו לפניו. כך שבמצב זה הרובוט יעצור לזמן מה ויעבור אחורה לאחר מכן שוב יעצור לזמן מה ואז יפנה לכיוון אחר.
אם (מרחק <18) { digitalWrite (fwdright7, LOW); // עצור את DigitalWrite (revright6, LOW); digitalWrite (fwdleft5, LOW); digitalWrite (revleft4, LOW); עיכוב (500); digitalWrite (fwdright7, LOW); // movebackword digitalWrite (revright6, HIGH); digitalWrite (fwdleft5, LOW); digitalWrite (revleft4, HIGH); עיכוב (500); digitalWrite (fwdright7, LOW); // עצור את DigitalWrite (revright6, LOW); digitalWrite (fwdleft5, LOW); digitalWrite (revleft4, LOW); עיכוב (100); digitalWrite (fwdright7, HIGH); digitalWrite (revright6, LOW); digitalWrite (revleft4, LOW); digitalWrite (fwdleft5, LOW); עיכוב (500); }
אז ככה רובוט יכול להימנע ממכשולים בדרכו מבלי להיתקע בשום מקום. מצא את הקוד והווידאו המלאים למטה.