- חומרים הנדרשים לבניית רובוט ניקוי רצפות מבוסס ארדואינו
- שואב אבק נייד
- מודול חיישן קולי HC-SR04
- חיישן רצפה (חיישן IR) לזיהוי גרם מדרגות
- תרשים מעגלים של רובוט מנקה רצפות מבוסס ארדוינו
- בניית המעגל לרובוט ניקוי רצפות מבוסס ארדואינו
- ארדואינו
בתרחיש של ימינו, כולנו עסוקים בעבודה שלנו עד שאין לנו זמן לנקות את הבית כראוי. הפתרון לבעיה הוא פשוט מאוד, אתה רק צריך לקנות רובוט שואב אבק ביתי כמו irobot roomba אשר ינקה את הבית שלך בלחיצת כפתור. אבל מוצרים מסחריים כאלה הם סוגיה נפוצה, שהיא עלות. אז היום, החלטנו להכין רובוט פשוט לניקוי רצפות, שהוא לא רק פשוט להכנה אלא עולה פחות בהשוואה למוצרים מסחריים הקיימים בשוק. קוראים תכופים אולי זוכרים את הרובוט שלנו לניקוי אבק של Arduino, שבנו לפני זמן רב, אבל זה היה מגושם מאוד והיה זקוק לסוללה גדולה של חומצה עופרת כדי לנוע. שואב האבק החדש Arduino אנחנו הולכים לבנות כאן יהיה קומפקטי ופרקטי יותר. נוסף על כך, לרובוט הזה יהיו חיישנים קולי וחיישן קירבה IR. החיישן הקולי יאפשר לרובוט להימנע ממכשולים כך שהוא יכול לנוע בחופשיות עד לניקוי החדר כראוי, וחיישן הקרבה יעזור לו להימנע מנפילה ממדרגות. כל התכונות האלה נשמעות מעניינות, נכון? אז בואו נתחיל.
באחד המאמרים הקודמים שלנו, יצרנו רובוטים רבים כמו הרובוט המאזן העצמי, הרובוט האוטומטי לחיטוי פני השטח והרובוט להימנעות ממכשולים. האם בדוק את אלה אם זה נשמע לך מעניין.
חומרים הנדרשים לבניית רובוט ניקוי רצפות מבוסס ארדואינו
מכיוון שהשתמשנו ברכיבים כלליים מאוד לבניית חלק החומרה של רובוט השואב, אתה אמור להיות מסוגל למצוא את כל אלה בחנות התחביבים המקומית שלך. לפניכם הרשימה המלאה של החומר הנדרש יחד עם התמונה של כל הרכיבים.
- Arduino Pro Mini - 1
- מודול קולי HC-SR04 - 3
- נהג מנוע L293D - 1
- מנועים ותושבות הרכבה 5Volt N20 - 2
- גלגלי מנוע N20 - 2
- מתג - 1
- וסת מתח LM7805 - 1
- 7.4V סוללת ליתיום-יון - 1
- מודול IR - 1
- לוח perfboard - 1
- גלגל גלגלים - 1
- MDF
- שואב אבק נייד כללי
שואב אבק נייד
בסעיף דרישת הרכיבים דיברנו על שואב אבק נייד, התמונות שלמטה מראות בדיוק את זה. זהו שואב אבק נייד מאמזון. זה מגיע עם מנגנון פשוט מאוד. בחלקו התחתון יש שלושה חלקים (תא קטן לאחסון האבק, החלק האמצעי כולל את המנוע, המאוורר ושקע הסוללה בחלקו העליון (יש כיסוי או מכסה לסוללה). יש לו מנוע DC מאוורר. מנוע זה מחובר ישירות לסוללות 3 וולט (2 * 1.5 וולט AA) באמצעות מתג פשוט. כאשר אנו מפעילים את הרובוט שלנו בסוללת 7.4 וולט, ננתק את החיבור מהסוללה הפנימית ונחזק אותו מה -5 וולט אספקת חשמל. אז הסרנו את כל החלקים המיותרים ורק את המנוע עם שני חוטים. אתה יכול לראות את זה בתמונה למטה.
מודול חיישן קולי HC-SR04
כדי לאתר את המכשולים אנו משתמשים בחיישן המרחק הקולי הפופולרי HC-SR04 או שאנחנו יכולים לקרוא לו חיישני הימנעות ממכשולים. העבודה מאוד פשוטה, ראשית, מודול המשדר שולח גל אולטראסוני שעובר דרך האוויר, פוגע במכשול ומקפיץ חזרה והמקלט מקבל את הגל הזה. על ידי חישוב הזמן עם Arduino, אנו יכולים לקבוע את המרחק. במאמר קודם על פרויקט חיישן מרחק קולי מבוסס Arduino, דנו ביסודיות בעיקרון העבודה של חיישן זה. אתה יכול לבדוק זאת אם אתה רוצה לדעת יותר על מודול חיישן המרחק הקולי HC-SR04.
חיישן רצפה (חיישן IR) לזיהוי גרם מדרגות
בסעיף התכונות דיברנו על תכונה בה הרובוט יכול לזהות גרם מדרגות ויכול למנוע את נפילתו. לשם כך אנו משתמשים בחיישן IR. נכין ממשק בין חיישן ה- IR לארדואינו. העבודה של חיישן הקירבה היא פשוטה מאוד, יש לה נורית IR ופוטודיודה, נורית ה- IR פולטת אור IR ואם מכשול כלשהו יגיע מול האור הנפלט הזה, הוא יוחזר, והאור המוחזר יתגלה על ידי פוטודיודה. אך המתח הנוצר מההשתקפות יהיה נמוך מאוד. כדי להגדיל את זה, נוכל להשתמש במשווה מגבר אופ, נוכל להגביר ולקבל פלט. מודול IRבעל שלושה פינים - Vcc, קרקע ופלט. בדרך כלל, הפלט יורד כשמכשול מגיע מול החיישן. אז נוכל להשתמש בזה כדי לזהות את הרצפה. אם לשבריר שנייה, אנו מזהים גובה מהחיישן, נוכל לעצור את הרובוט, להחזיר אותו לאחור או לעשות כל דבר שנרצה בכדי למנוע את נפילתו מגרם המדרגות. במאמר קודם, יצרנו גרסת Breadboard של מודול חיישן הקרבה IR והסברנו את עיקרון העבודה בפרטים, תוכלו לבדוק זאת אם ברצונכם לדעת יותר על חיישן זה.
תרשים מעגלים של רובוט מנקה רצפות מבוסס ארדוינו
יש לנו שלושה חיישנים קולי המזהים מכשולים. לכן עלינו לחבר את כל השטח של חיישנים אולטראסוניים וחיבר אותם לקרקע משותפת. כמו כן, אנו מחברים את כל שלושת ה- Vcc של החיישן ומחברים את זה לסיכת ה- VCC הנפוצה. לאחר מכן, אנו מחברים את ההדק וסיכות ההד לסיכות ה- PWM של הארדואינו. אנו גם מחברים את ה- VCC של מודול ה- IR ל- 5V ואדמה לסיכה הקרקעית של Arduino, סיכת הפלט של מודול חיישן ה- IR עוברת לסיכה הדיגיטלית D2 של ה- Arduino. עבור נהג המנוע, אנו מחברים את שני סיכות ההפעלה ל- 5V וגם את סיכת המתח של הנהג ל- 5V מכיוון שאנו משתמשים במנועי 5 וולט. במאמר קודם הכנו מגן לנהג מנועי Arduino, תוכלו לבדוק זאת כדי ללמוד עוד על L293D IC Driver Driver.ופעולותיה. Arduino, מודולים אולטרה סאונד, מנוע מנוע ומנועים עובדים על 5 וולט, המתח הגבוה יותר יהרוג אותו ואנחנו משתמשים בסוללת 7.4 וולט, כדי להמיר זאת ל -5 וולט, משתמשים בווסת המתח LM7805. חבר את השואב ישירות למעגל הראשי.
בניית המעגל לרובוט ניקוי רצפות מבוסס ארדואינו
על מנת לקבל כמה רעיונות לגבי הרובוט שלי, חיפשתי רובוטים שואבי אבק ברשת וקיבלתי כמה תמונות של רובוטים בצורת עגול. אז החלטתי לבנות רובוט בצורת עגול. לבניית המרדף והגוף של הרובוט יש לי שפע של אפשרויות כמו קצף, MDF, קרטון וכו '. אבל אני בוחר ב- MDF כי הוא קשה ויש לו כמה תכונות עמידות במים. אם אתה עושה זאת, תוכל להחליט איזה חומר תבחר עבור הבוט שלך.
כדי לבנות את הרובוט, לקחתי את גיליון ה- MDF ואז ציירתי שני עיגולים ברדיוס של 8 ס"מ, ובתוך העיגול הזה ציירתי גם עיגול נוסף בעל רדיוס של 4 ס"מלהתאמת השואב. ואז חתכתי את העיגולים. כמו כן, חתכתי והסרתי חלקים מתאימים לנתיב הגלגל (עיין בתמונות להבנה טובה יותר). לבסוף עשיתי שלושה חורים קטנים לגלגל הגלגלים. השלב הבא הוא התאמת המנועים על הבסיס באמצעות התושבות שלו, גם מקם ומקבע את גלגל הגלגלים למקומו. לאחר מכן הצב את חיישני האולטרה סאונד משמאל, ימינה ואמצע הרובוט. כמו כן, חבר את מודול ה- IR לחיסרון של הרובוט. אל תשכח להוסיף את המתג בחוץ. זה הכל על בניית הרובוט, אם אתה מתבלבל בשלב זה, אתה יכול להתייחס לתמונות הבאות.
בחלק העליון ציירתי רדיוס גם עיגול של 11 ס"מ על יריעת הקצף וגזרתי אותו. למרווח בין החלק העליון לחלק התחתון, חתכתי שלוש חתיכות ארוכות של 4 ס"מ של צינור פלסטיק. לאחר מכן הדבקתי את מרווחי הפלסטיק בחלק התחתון ואז הדבקתי את החלק העליון. אתה יכול לכסות את חלקי הצד של הבוט עם פלסטיק או חומרים דומים אם תרצה.
ארדואינו
הקוד השלם לפרויקט זה ניתן בסוף המסמך. קוד Arduino זה דומה לקוד חיישן מרחק קולי מבוסס Arduino, השינוי היחיד הוא בזיהוי הרצפה. בשורות הבאות אני מסביר כיצד פועל הקוד. במקרה זה איננו משתמשים בספריות נוספות. להלן תיארנו את הקוד שלב אחר שלב. אנחנו לא משתמשים בספריות נוספות כדי לפענח את נתוני המרחק מחיישן HC-SR04, כי זה פשוט מאוד. בשורות הבאות תארנו כיצד. ראשית, עלינו להגדיר את פין ההדק ואת פין ההד עבור כל שלושת חיישני המרחק הקולי המחוברים ללוח הארדואינו. בפרויקט זה, יש לנו שלושה סיכות הד ושלושה סיכות טריגר. שים לב ש -1 הוא החיישן השמאלי, 2 הוא החיישן הקדמי, ו- 3 הוא החיישן הימני.
const int trigPin1 = 3; const int echoPin1 = 5; const int trigPin2 = 6; const int echoPin2 = 9; const int trigPin3 = 10; const int echoPin3 = 11; int irpin = 2;
לאחר מכן הגדרנו משתנים למרחק שכולם משתנים מסוג (int) ולמשך הזמן בחרנו להשתמש (ארוך). שוב, יש לנו שלושה מכל אחד. כמו כן, הגדרתי מספר שלם לאחסון סטטוס התנועה, נדבר על כך בהמשך בחלק זה.
משך זמן ארוך 1; משך זמן 2; משך זמן ארוך 3; שמאל מרחוק; חזית מרחוק; מבט רחוק; int a = 0;
בשלב הבא, בסעיף ההתקנה, עלינו להפוך את כל סיכות הפרספקטיבה לקלט או לפלט באמצעות פונקציית pinModes () . כדי לשלוח גלים אולטראסוניים מהמודול, עלינו לאפשר את סיכת ההדק לגובה כלומר כל סיכות ההדק צריכות להיות מוגדרות כ- OUTPUT. וכדי לקבל את ההד, עלינו לקרוא את מצב סיכות ההד, כך שכל סיכות ההד צריכות להיות מוגדרות כ- INPUT. כמו כן, אנו מאפשרים לפקח על המסך הטורי. כדי לקרוא את הסטטוס של מודולי ה- IR, הגדרתי את ה- IRPIN כקלט.
pinMode (trigPin1, OUTPUT); pinMode (trigPin2, OUTPUT); pinMode (trigPin3, OUTPUT); pinMode (echoPin1, INPUT); pinMode (echoPin2, INPUT); pinMode (echoPin3, INPUT); pinMode (irpin, INPUT);
והסיכות הדיגיטליות הללו מוגדרות כ- OUTPUT עבור הקלט של נהג המנוע.
pinMode (4, OUTPUT); pinMode (7, OUTPUT); pinMode (8, OUTPUT); pinMode (12, OUTPUT);
בלולאה הראשית, יש לנו שלושה חלקים לשלושה חיישנים. כל הקטעים עובדים זהים, אך כל אחד מהם עבור חיישנים שונים. בחלק זה אנו קוראים את מרחק המכשול מכל חיישן ואוחסנים אותו בכל מספר שלם מוגדר. כדי לקרוא את המרחק, ראשית, עלינו לוודא שסיכות ההדק ברורות, לשם כך, עלינו להגדיר את סיכת ההדק ל- LOW למשך 2 µs. עכשיו, ליצירת גל קולי, אנחנו צריכים להפוך את ההדק סיכה HIGH עבור 10 מיקרו-שניות. זה ישלח את הצליל האולטראסוני ובעזרת פונקציית pulseIn () נוכל לקרוא את זמן הנסיעה ולאחסן את הערך במשתנה " משך הזמן ". לפונקציה זו שני פרמטרים, הראשון הוא שם סיכת ההד ובשביל השני תוכלו לכתוב אחד מהםגבוה או נמוך. HIGH פירושו שהפונקציה pulseIn () תחכה שהסיכה תעבור HIGH הנגרמת על ידי גל הקול הקופץ והיא תתחיל לספור, ואז היא תחכה שהסיכה תעבור LOW כאשר גל הקול יסתיים שיעצור את הספירה. פונקציה זו נותנת את אורך הדופק במיקרו שניות. לצורך חישוב המרחק נכפיל את משך הזמן ב -0344 (מהירות הקול באוויר היא 340 מ '/ שנ) ונחלק אותו ב -2 (זאת בגלל נסיעה קדימה ואחורה של גל הקול). לבסוף, אנו מאחסנים את המרחק של כל חיישן במספרים שלמים מתאימים.
digitalWrite (trigPin1, LOW); עיכוב מיקרו-שניות (2); digitalWrite (trigPin1, HIGH); עיכוב מיקרו-שניות (10); digitalWrite (trigPin1, LOW); משך 1 = pulseIn (echoPin1, HIGH); מרחק מרחק = משך 1 * 0.034 / 2;
לאחר קבלת המרחק מכל חיישן, אנו יכולים לשלוט במנועים בעזרת הצהרת if ובכך אנו שולטים בתנועת הרובוט. זה פשוט מאוד, ראשית, נתנו ערך מרחק מכשול, במקרה זה, זה 15 ס"מ (שנה ערך זה כרצונך). ואז נתנו תנאים לפי הערך הזה. לדוגמא, כאשר מכשול מגיע מול החיישן השמאלי (המשמעות היא שהמרחק של החיישן השמאלי צריך להיות מתחת או שווה ל 15 ס"מ) ושני המרחקים האחרים גבוהים (כלומר, אין מכשול מול חיישנים אלה), ואז בעזרת פונקציית כתיבה דיגיטלית נוכל להניע את המנועים ימינה. בהמשך בדקתי את מצב חיישן ה- IR. אם הרובוט נמצא על הרצפה, ערך סיכת ה- IR יהיה נמוך, ואם לא, הערך יהיהגבוה. ואז שמרתי את הערך הזה במשתנה int s . אנו הולכים לשלוט על הרובוט על פי סטטוס זה.
חלק זה של הקוד משמש להעברת הרובוט קדימה ואחורה :
אם (s == HIGH) { digitalWrite (4, LOW); digitalWrite (7, HIGH); digitalWrite (8, LOW); digitalWrite (12, HIGH); עיכוב (1000); a = 1; }
אך יש בעיה בשיטה זו כאשר המנוע נע אחורה, הרצפה חוזרת והבוט ינוע קדימה, והוא יחזור על כך שהבוט נתקע. כדי להתגבר על זה, אנו שומרים ערך (1) ב- int לאחר שהבנת הרצפה אינה קיימת. אנו בודקים מצב זה גם לגבי תנועות אחרות.
לאחר גילוי היעדר הרצפה, הרובוט לא יתקדם. במקום זאת, זה יעבור שמאלה, כך נוכל להימנע מהבעיה.
if ((a == 0) && (s == LOW) && (distanceleft <= 15 && distancefront> 15 && distanceright <= 15) - (a == 0) && (s == LOW) && (distanceleft> 15 && מרחק מול> 15 && distanceright> 15))
במצב הנ"ל. ראשית, הרובוט יבדוק את מצב הרצפה ואת ערך המספר השלם. הבוט יתקדם רק אם כל התנאים מתקיימים.
כעת נוכל לכתוב את הפקודות לנהג המנוע. זה יניע את המנוע הימני לאחור ואת המנוע השמאלי קדימה, ובכך יפנה את הרובוט ימינה.
חלק זה של הקוד משמש להעברת הרובוט ימינה:
digitalWrite (4, HIGH); digitalWrite (7, LOW); digitalWrite (8, HIGH); digitalWrite (12, LOW);
אם הבוט מגלה שהרצפה נעדרת, הערך ישתנה ל- 1, והבוט יעבור שמאלה. לאחר פנייה שמאלה, הערך של 'a' משתנה ל- 0 מ -1.
אם ((a == 1) && (s == LOW) - (s == LOW) && (מרחק מרחק <= 15 && מרחק מרחק <= 15 && מרחק מרחק> 15) - (s == LOW) && (מרחק מרחק <= 15 && distancefront <= 15 && distanceright> 15) - (s == LOW) && (distanceleft <= 15 && distancefront> 15 && distanceright> 15) - (distanceleft <= 15 && distancefront> 15 && distanceright> 15)) { digitalWrite (4, HIGH); digitalWrite (7, LOW); digitalWrite (8, LOW); digitalWrite (12, HIGH); עיכוב (100); a = 0; }
חלק זה של הקוד משמש להעברת הרובוט שמאלה:
אם ((s == LOW) && (מרחק מרחק> 15 && מרחק מול <= 15 && מרחק מרחק <= 15) - (s == LOW) && (מרחק מרחק> 15 && מרחק מול> 15 && מרחק מרחק <= 15) - (s == LOW) && (מרחק מרחק> 15 && מרחק מול <= 15 && distanceright> 15)) { digitalWrite (4, LOW); digitalWrite (7, HIGH); digitalWrite (8, HIGH); digitalWrite (12, LOW); }
זהו זה לבניית רובוט שואב אבק חכם מבוסס Arduino. את העבודה המלאה של הפרויקט ניתן למצוא בסרטון המקושר בתחתית עמוד זה. אם יש לך שאלות, הגיב למטה.