הפוך את הרובוט לעוקב הקו הזה לפרויקט של יריד מדע

נסה את הכלי שלנו לביטול בעיות





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

מאת navneet sajwan



מהו רובוט עוקב קו

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

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



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

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

רכיבים נדרשים:

ארדואינו אונו

שִׁלדָה

שני מנועים המופעלים באמצעות סוללות וצמיגים תואמים

כדור קיק

שני חיישני אינפרא אדום

מודול נהג מנוע

ספק כוח

תוכנת Arduino IDE

עכשיו, בואו נסתכל על המרכיבים שלנו:

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

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

כמה סיבות רלוונטיות היו:

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

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

גודל קטן יותר, הרובוט מהיר יותר והסיבובים יעילים יותר.

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

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

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

זה צריך להיות קל וחזק.

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

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

שמור על המרכב שלך נמוך ככל האפשר - זה נותן יציבות לבוט.

מנועים : השתמש בסוללה המופעלת במשקל קל (B.O.) DC. מנועים.

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

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

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

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

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

צריך להיות ממוקם בקצה הקדמי של הבוט שלך.

המרווח המינימלי ביניהם חייב להיות גדול מרוחב הקו השחור.

לוח נהיגה למנועים : מנועי מנועים הם מעגלי חיץ התופסים אותות מתח נמוך להפעלת המנועים הדורשים מתח גבוה יותר.

במקרה שלנו, Arduino יכול לספק מתח מספיק כדי להניע את המנועים אך הוא אינו יכול לספק זרם רב. פינים 5v ו- GND של Arduino UNO הם בעלי דירוג זרם של 200mA ואילו לכל סיכה של GPIO יש דירוג של 40 mA. זה נמוך בהרבה ממנועי הזרם ההתחלתיים והדוכנים שאנו זקוקים להם.

ישנם שני נהגים מנועים שאני מעדיף לפרויקט זה: L298N ו- L293D. שניהם מתאימים באותה מידה להכנת פרויקט זה.

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

ספק כוח :

השתמש במתאם 12 וולט או בסוללה (לא יותר מ 12 וולט).

מיקום רכיבים (מקדימה לקצה האחורי):

חיישנים בראש הבוט שלך.

גלגל גלגלים באמצע.

מנועים וצמיגים בשורה אחת מאחור.

חיבורים:

חיישנים לארדו :

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

סיכת חיישןסיכה של ארדואינו
VCC (5v)5V
GND (G)GND
חיישן שמאל החוצה (DO)סיכה 6
חיישן ימני (DO)סיכה 7

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

נהג מנוע למנוע:

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

מנועL298NL293D
מנוע שמאליPIN 1 ו -2PIN 7 ו- 8
מנוע ימניPIN 13 ו- 14PIN 9 ו -10

נהג מנוע לארדוונו אונו:

נהג מנוע (L298N)ארדו אחד
PIN 4יַיִן
PIN 5GND
PIN 65V
PIN 8 ו- PIN 9PIN 3 ו- PIN 9
PIN 10 ו- PIN 11PIN 5 ו- PIN 10
PIN 7 ו- PIN 125V
נהג מנוע (L293D)ארדו אחד
PIN 3יַיִן
PIN 2GND
PIN 15V
PIN 5 ו- PIN 6PIN 3 ו- PIN 9
PIN 11 ו- PIN 12PIN 5 ו- PIN 10
PIN 4 ו- PIN 55V

הערה: סיכות 8 ו -9 של l298n משמשות לשליטה במנוע המחובר ל- 1 ו- 2. וכן, מנוע בקרה 10 ו- 11 המחובר לסיכות 13 ו 14. באופן דומה, סיכות 5 ו -6 של l293d משמשות לשליטה במנוע המחובר ל 7 ו 8. ומנוע בקרה 12 ו -11 המחובר לסיכות 9 ו -10.

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

כיצד עובד חיישן אינפרא אדום:

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

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

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

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

כיצד עובד רובוט חסיד קו:

פריסת עוקבים אחר קווים

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

הוא מתוכנת לסובב את שני המנועים כך שהבוט ינוע קדימה.

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

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

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

דיאגרמת מעגלים:

פרטי חיווט:

תכנות וקונספטים:

לאחר שסיימנו עם חלק המעגל, נעבור כעת לחלק התכנותי. בחלק זה נבין את התוכנית השולטת ברובוט שלנו. הנה הקוד: / *
Created and tested by Navneet Singh Sajwan
*Based on digital output of two sensors
*Speed control added
*/
int left, right
int value=250
void setup()
{
pinMode(6,INPUT)//left sensor
pinMode(7,INPUT)//right sensor
pinMode(9,OUTPUT)//left motor
pinMode(3,OUTPUT)//left motor
pinMode(10,OUTPUT)//right motor
pinMode(5,OUTPUT)//right motor
// Serial.begin(9600)
}
void read_sensors()
{
left=digitalRead(6)
right= digitalRead(7)
}
void move_forward()
{
analogWrite(9,value)//3,9 for left motor
digitalWrite(3,LOW)
analogWrite(10,value)//10,5 for right motor
digitalWrite(5,LOW)
}
void turn_left()
{
digitalWrite(9,LOW)//9,3 for left motor
digitalWrite(3,LOW)
analogWrite(10,value)//10,5 for right motor
digitalWrite(5,LOW)
}
void turn_right()
{
analogWrite(9,value)// 9,3 for left motor
digitalWrite(3,LOW)
digitalWrite(10,LOW)// 10,5 for right motor
digitalWrite(5,LOW)
}
void halt()
{
digitalWrite(9,LOW)// 9,3 for left motor
digitalWrite(3,LOW)
digitalWrite(10,LOW)// 10,5 for right motor
digitalWrite(5,LOW)
}
void print_readings()
{
Serial.print(' leftsensor')
Serial.print(' ')
Serial.print(left)
Serial.print('rightsensor')
Serial.print(' ')
Serial.print(right)
Serial.println()
}
void loop()
{
read_sensors()
while((left==0)&&(right==1)) // left sensor is over black line
{
turn_left()
read_sensors()
print_readings()
}
while((left==1)&&(right==0)) // right sensor is over black line
{
turn_right()
read_sensors()
print_readings()
}
while((left==0)&&(right==0)) // both sensors over the back line
{
halt()
read_sensors()
print_readings()
}
while((left==1)&&(right==1))// no sensor over black line
{
move_forward()
read_sensors()
print_readings()
}
}

תיאור הפונקציות המשמשות:

read_sensors (): זה לוקח את הקריאות של שני החיישנים ושומר אותם במשתנים שמאלה וימינה.

move_forward (): כאשר הארדואינו מבצע פונקציה זו, שני המנועים נעים בכיוון קדימה.

turn_left (): המנוע השמאלי נעצר. בוט פונה שמאלה.

turn_right (): מנוע ימני עוצר. בוט פונה ימינה.

עצור (): עצירות בוט.

print_readings (): מציג קריאות של חיישנים בצג סדרתי. לשם כך עליך לבטל את התגובה של 'Serial.begin (9600)' בהגדרת הריק.

קריאות חיישן:

חיישן מעל קוקריאת חיישנים
שמאלהימין
חיישן שמאלי01
חיישן נכון10
אף אחד11
שניהם00

בקרת מהירות:

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

כדי להימנע מנסיבות כאלה, אנו מורידים את מהירות הבוט בטכניקת PWM. בקוד שלעיל יש משתנה בשם ערך.

פשוט הקטינו את הערך המספרי בפונקציה כדי להקטין את המהירות. ב- Arduino UNO אתה יכול לקבל ערכי pwm בין 0 ל 255 בלבד.

analogWrite (סיכה, ערך)

0<= value <=255

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




קודם: מכונית רובוט נשלטת בטלפון נייד באמצעות מודול DTMF הבא: מתג הפעלה / כיבוי לרשת AC נשלט באמצעות סיסמה