תוכן עניינים:
2025 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2025-01-13 06:57
כיצד לבנות מכשול להימנעות מרובוט
שלב 1: קופסה שחורה
בשלב הראשון השתמשתי בקופסה שחורה כבסיס לרובוט שלי.
שלב 2: ארדואינו
הארדואינו הוא המוח של המערכת כולה ומתזמר את המנועים שלנו
שלב 3: חיבור הארדואינו ל- Blackbox
חיברתי את הארדואינו לבלוקבוקס באמצעות דבק חם
שלב 4: חיישן קולי
על מנת ליצור רובוט שיכול לנוע בכוחות עצמו אנו זקוקים לקלט כלשהו, חיישן המתאים למטרה שלנו. חיישן קולי הוא מכשיר המודד את המרחק לאובייקט באמצעות גלי קול קולי. חיישן קולי משתמש במתמר כדי לשלוח ולקבל פולסים אולטראסוניים המעבירים מידע על קרבת אובייקט.
שלב 5: חיבור לוח הלחם לארדואינו
השתמשתי בחוטים כדי לחבר את הקשר בין לוח הלחם לארדואינו.
שים לב שחיישן הפינג שלך עשוי להיות בעל פריסת סיכה אחרת, אך הוא אמור להיות בעל סיכת מתח, סיכת הארקה, סיכת טריג ופין הד.
שלב 6: מגן מוטורי
לוחות Arduino אינם יכולים לשלוט במנועי DC בעצמם, מכיוון שהזרמים שהם יוצרים נמוכים מדי. כדי לפתור בעיה זו אנו משתמשים במגיני מנוע. מגן המנוע כולל 2 ערוצים, המאפשר שליטה של שני מנועי DC, או 1 מנוע צעדים. … על ידי התייחסות לסיכות אלה אתה יכול לבחור ערוץ מנוע ליזום, לציין את כיוון המנוע (קוטביות), להגדיר את מהירות המנוע (PWM), לעצור ולהפעיל את המנוע ולפקח על הספיגה הנוכחית של כל ערוץ
שלב 7: חיבור מגן מנוע ל- Arduino
כל שעליך לעשות הוא לחבר את מגן המנוע לארדואינו כאשר חוטי החיישן מכווצים פנימה
שלב 8: חיבור 4 המנועים והסוללות למגן
לכל מגן מנוע יש (לפחות) שני ערוצים, אחד למנועים ואחד למקור כוח, חבר אותם זה לזה
שלב 9: תכנת הרובוט
הפעל את הקוד הזה
#כלול #כלול
סונאר NewPing (TRIG_PIN, ECHO_PIN, MAX_DISTANCE);
AF_DC מנוע מנוע 1 (1, MOTOR12_1KHZ); AF_DC מנוע מנוע 2 (2, MOTOR12_1KHZ); AF_DC מנוע מנוע 3 (3, MOTOR34_1KHZ); AF_DC מנוע מנוע 4 (4, MOTOR34_1KHZ); סרוו מיסרבו;
#הגדר TRIG_PIN A2 #הגדר ECHO_PIN A3 #הגדר MAX_DISTANCE 150 #הגדר MAX_SPEED 100 #הגדר MAX_SPEED_OFFSET 10
בוליאני goesForward = false; מרחק int = 80; int speedSet = 0;
הגדרת בטל () {
myservo.attach (10); myservo.write (115); עיכוב (2000); distance = readPing (); עיכוב (100); distance = readPing (); עיכוב (100); distance = readPing (); עיכוב (100); distance = readPing (); עיכוב (100); }
לולאת חלל () {int distanceR = 0; int distanceL = 0; עיכוב (40); if (מרחק <= 15) {moveStop (); עיכוב (50); moveBackward (); עיכוב (150); moveStop (); עיכוב (100); distanceR = lookRight (); עיכוב (100); distanceL = lookLeft (); עיכוב (100);
if (distanceR> = distanceL) {turnRight (); moveStop (); } אחר {turnLeft (); moveStop (); }} else {moveForward (); } distance = readPing (); }
int lookRight () {myservo.write (50); עיכוב (250); int distance = readPing (); עיכוב (50); myservo.write (100); מרחק החזרה; }
int lookLeft () {myservo.write (120); עיכוב (300); int distance = readPing (); עיכוב (100); myservo.write (115); מרחק החזרה; עיכוב (100); }
int readPing () {delay (70); int cm = sonar.ping_cm (); אם (cm == 0) {cm = 200; } ס מ להחזיר; }
void moveStop () {motor1.run (RELEASE); motor2.run (שחרור); motor3.run (שחרור); motor4.run (שחרור); } void moveForward () {
אם (! goesForward) {goesForward = true; motor1.run (קדימה); motor2.run (קדימה); motor3.run (קדימה); motor4.run (קדימה); עבור (speedSet = 0; speedSet <MAX_SPEED; speedSet += 2) {motor1.setSpeed (speedSet); motor2.setSpeed (speedSet); motor3.setSpeed (speedSet); motor4.setSpeed (speedSet); עיכוב (5); }}}
void moveBackward () {goesForward = false; motor1.run (אחורה); motor2.run (אחורה); מנוע 3. ריצה (אחורה); motor4.run (אחורה); עבור (speedSet = 0; speedSet <MAX_SPEED; speedSet += 2) {motor1.setSpeed (speedSet); motor2.setSpeed (speedSet); motor3.setSpeed (speedSet); motor4.setSpeed (speedSet); עיכוב (5); } חלל turnLeft () {motor1.run (BACKWARD); motor2.run (אחורה); motor3.run (קדימה); motor4.run (קדימה); עיכוב (500); motor1.run (קדימה); motor2.run (קדימה); motor3.run (קדימה); motor4.run (קדימה); }
void turnLeft () {motor1.run (BACKWARD); motor2.run (אחורה); motor3.run (קדימה); motor4.run (קדימה); עיכוב (500); motor1.run (קדימה); motor2.run (קדימה); motor3.run (קדימה); motor4.run (קדימה); }