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

רובוט איזון עצמי - אלגוריתם בקרת PID: 3 שלבים
רובוט איזון עצמי - אלגוריתם בקרת PID: 3 שלבים

וִידֵאוֹ: רובוט איזון עצמי - אלגוריתם בקרת PID: 3 שלבים

וִידֵאוֹ: רובוט איזון עצמי - אלגוריתם בקרת PID: 3 שלבים
וִידֵאוֹ: מניפולטור INDEVA עם איזון אלקטרוני 2024, יולי
Anonim
רובוט איזון עצמי - אלגוריתם בקרת PID
רובוט איזון עצמי - אלגוריתם בקרת PID

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

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

סיכום הפרויקט:

מארז הרובוט מודפס בתלת מימד באמצעות מדפסת Ender 3 ומיועד להתאמה הדדית.

הרובוט נשלט על ידי Arduino Uno שלוקח נתוני חיישנים מ- MPU6050 ושולט על מנועי DC באמצעות נהג מנוע חיצוני. הוא פועל באמצעות סוללה של 7.4V, 1500mAh. נהג המנוע מווסת את זה ל- 5V כדי להפעיל את הארדואינו ומספק 7.4V למנועים.

התוכנה נכתבה מאפס בעזרת ספריות 'Arduino-KalmanFilter-master' ו- 'Arduino-MPU6050-master' מ- gitHub.

אספקה:

  • חלקים מודפסים בתלת מימד
  • ארדואינו UNO
  • חיישן 6-צירים MPU6050
  • נהג מנוע D. C
  • מנועי N20 DC (x2)
  • סוללה 9V

שלב 1: בניית רובוט

בניית רובוט
בניית רובוט
בניית רובוט
בניית רובוט
בניית רובוט
בניית רובוט

הדפסה והרכבה

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

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

ההגדרות שהיו בשימוש במדפסת Ender 3 היו: 0.16mm Layer Heights @ 40% מילוי לכל החלקים.

שלב 2: רובוט הדפסה תלת מימדית

רובוט הדפס תלת מימד
רובוט הדפס תלת מימד

מארז (x1)

גלגל שמאל (x2)

בית מנועים שמאלי (x2)

מארז ארדואינו (x1)

שלב 3: אלגוריתם בקרת PID

אלגוריתם בקרת PID
אלגוריתם בקרת PID

כתבתי אלגוריתם PID Control מאפס באמצעות ספריות 'Arduino-KalmanFilter-master' ו- 'Arduino-MPU6050-master' מ- gitHub.

הנחת היסוד של האלגוריתם היא כדלקמן:

  • קרא נתונים גולמיים מ- MPU6050
  • השתמש במסנן קלמן כדי לנתח נתונים מג'ירוסקופ וממד תאוצה גם כדי לבטל אי דיוקים בקריאות הג'ירוסקופ עקב האצת החיישן. זה מחזיר ערך מוחלק יחסית לגובה החיישן במעלות לשני מקומות עשרוניים.
  • חישוב ה- E rror בזווית, כלומר: הזווית שבין החיישן לנקודת ההגדרה.
  • חשב שגיאה פרופורציונלית כ (קבוע של מידתיות x שגיאה).
  • חשב שגיאה אינטגרלית כסכום הפעולה של (קבוע של שילוב x שגיאה).
  • חישוב שגיאה נגזרת קבועה כמו [(קבוע בידול) x (שינוי בטעות / שינוי בזמן)]
  • סכום כל השגיאות על מנת לתת את מהירות הפלט שנשלחת למנועים.
  • חשב לאיזה כיוון לסובב מנועים על סמך סימן זווית השגיאה.
  • הלולאה תפעל ללא הגבלת זמן ותתבסס על הפלט כשהקלט משתנה. זוהי לולאת משוב, שמשתמשת בערכי הפלט כערכי הקלט החדשים לאיטרציה הבאה.

השלב האחרון הוא לכוונן את פרמטרי ה- Kp, Ki & Kd של לולאת ה- PID.

  1. נקודת התחלה טובה היא להגדיל לאט את ה- Kp עד שהרובוט ינוע סביב נקודת האיזון ויכול לתפוס נפילה.
  2. לאחר מכן, התחל את Kd בסביבות 1% מהערך של Kp והגדל לאט עד שהתנודות נעלמות והרובוט גולש בצורה חלקה בעת דחיפה.
  3. לבסוף, התחל עם Ki בסביבות 20% מהק"פ ושנה עד שהרובוט "יעלה על" נקודת ההתחלה לתפוס נפילה פעילה ולחזור לאנכי.

מוּמלָץ: