מנוע סרבו – Servo
תוכן עניינים
מדריך מפורט לשימוש במנוע סרבו – Servo המחובר למיקרו-בקר ארדואינו אונו, במדריך שלפניכם ניתן למצוא פירוט בשפה פשוטה:
1. מהו?
2. עיקרון פעולה.
3. כיצד לחבר לארדואינו אונו.
4. קודי הפעלה לדוגמא.
הפוסט מומלץ לכל תלמיד, סטודנט, מורה או מרצה בתחום ה- Arduino ובתחום הנחיית הפרויקטים.
הקדמה על מנוע סרבו
מנוע סרבו הוא מנוע חשמלי עם בקרת תנועה מדויקת מאוד. הוא כולל בתוכו גלגל תנופה קטן, גירים ומערכת בקרה אלקטרונית השולטת במדויק על מיקום ציר הסיבוב של המנוע. ניתן לכוון את המנוע לזווית ספציפית, והוא ינוע אוטומטית לאותו המיקום המבוקש בדיוק גבוה מאוד. מנועי סרבו נפוצים ביותר ביישומי רובוטיקה ואוטומציה, בהם נדרשת בקרת תנועה מדויקת, כגון זרועות רובוטיות, מצלמות אבטחה ועוד. בפוסט זה נלמד על מבנה מנוע הסרבו, אופן הפעולה שלו וכיצד לחבר אותו ללוח ארדואינו ולבצע שליטה מלאה מתוכנתית על תנועתו.
מפרט טכני מנוע סרבו
☸ מתח הפעלה: 4.8-7.2V
☸ מהירות סיבוב ללא עומס: 0.10-0.20 שניות ל-60 מעלות
☸ מומנט: 1.5-10kg/cm
☸ טווח זווית סיבוב: 90-180 מעלות
☸ דיוק זווית סיבוב: +/- 2 מעלות
☸ טמפרטורת הפעלה: 0-60 מעלות צלזיוס
☸ בקרה: PWM או מתח
☸ ממדים: 40x20x38 מ"מ
☸ משקל: 9 גרם
☸ אורך כבל: 15 ס"מ
☸ מחבר: 3 פינים
יתרונות של מנוע סרבו
☸ זמן תגובה מהיר.
☸ מחיר זול – בסביבות 10 שקל למנוע בעליאקספראס.
☸ קלים לתפעול – פקודות קלות ומבנות, חיבור קל ללוח הארדואינו.
☸ מדויקים – ניתן להחליט לאיזה זווית יסתובב.
עיקרון פעולה
מנוע הסרבו מקבל גל רבועי (PWM) מהארדואינו. ניתן לשלוט ברוחב הפולסים של גל זה.
☸ אם רוחב הפולס הוא 1 מילי שנייה – זו משמעותה שמתח מלא מופעל על המנוע במשך 1ms ואז מנותק לחלוטין למשך היתרה מהמחזור. במקרה הזה, הסרבו יסובב לזווית של 0 מעלות.
☸אם רוחב הפולס הוא 1.5 מילי שנייה – כעת המתח דלוק יותר זמן בכל מחזור. במצב זה הסרבו יסתובב לזווית של 90 מעלות.
☸כאשר רוחב הפולס מגיע ל-2 מילי שנייה – כלומר המתח דלוק כמעט כל הזמן, אזי המנוע יסתובב למיקום של 180 מעלות.
ככל שרוחב הפולס גדל, כך גדלה זווית הסיבוב.
רגל בקרה (PWM)
אז קודם כל מה זה אות דיגיטלי? בניגוד לאות אנלוגי שיכול לקבל המון ערכים, אות דיגיטלי מקבל רק 2 מצבים – או ״דלוק״ עם מתח, או ״כבוי״ ללא מתח.
בלוח הארדואינו יש רגליות דיגיטליות רגילות שפשוט יודעות או לתת מתח או לא. אבל יש גם רגליות מיוחדות הידועות בשם PWM.
מה מיוחד בהן? שהן מוציאות אות דיגיטלי אבל בצורה מחזורית האות מתחלף כל הזמן בין ״דלוק לכבוי״ ברצף. כאילו אור מנומר שנדלק ונכבה שוב ושוב.
אפשר לשלוט תכנותית על היחס בין משך הזמן שהאות דלוק לעומת הזמן שהוא כבוי בכל מחזור. למשל לגרום שיהיה דלוק 70% מהזמן.
בקרת ״רוחב פולס״ מאפשרת שליטה מאוד מדויקת על מהירות של מנוע חשמלי. לדוגמה מנוע סרבו – ככל שרוחב הפולס גדל כך הסרבו מסתובב מהר יותר לזווית הרצויה.
לכן כדי להפעיל סרבו מקוד ארדואינו ישיר ללא ספרייה חיצונית, נדרשת אחת מרגלי ה-PWM של הלוח כמו: 3, 5, 6, 9, 10 ו-11
במידה ואנו לא רוצים להיות מוגבלים ולחבר את מנוע הסרבו רק לרגלי PWM בלוח הארדואינו אנו צריכים להשתמש בספרייה.
ספריית מנוע סרבו:
אז קודם כל, מה זה ספרייה? ספרייה היא קוד מוכן שמישהו אחר כתב, שמאפשר לנו להשתמש בפונקציות שימושיות מבלי להמציא הכל מההתחלה.
לדוגמה, יש ספריות מוכנות לשליטה במנועים ורכיבים שונים עם ארדואינו. אנחנו יכולים פשוט "להוריד" את הספרייה הזו ולהשתמש בקוד שלה כדי לחסוך לנו עבודה.
אחת הספריות האלה מאפשרת שליטה במנועי סרבו. היא מכילה פונקציות מוכנות שבעזרתן אפשר בקלות רבה להפעיל מנוע סרבו מכל רגל בארדואינו – לא חייבות להיות דווקא רגלות PWM.
הסיבה היא שהספרייה יודעת ליצור בתכנות אותות PWM גם ברגלות רגילות של הארדואינו. היא "מדמה" אותן כאילו הן פלט PWM.
אבל בלי ספרייה, אנחנו צריכים להשתמש דווקא ברגלי ה-PWM האמיתיות המובנות בארדואינו שיודעות כבר לייצר אותות אלו.
כאשר אנו נשתמש במנוע סרבו, אנו נשתמש בספרייה ב2 סיבות עיקריות:
1. פשטות קוד הפעלה – כפי שנכתב לעיל, כאשר יש לנו ספרייה אנו חוסכים עשרות- מאות שורות קוד.
2. ניתן לחבר לכל רגל בלוח ארדואינו את רגל הבקרה של מנוע סרבו ולא רק ברגלי PWM
לרוב, כאשר נרצה להשתמש בספרייה של רכיב, נצטרך להוריד אותה למחשב ולהוסיף אותה למאגר הספריות שיש בלוח ארדואינו, במקרה של מנוע סרבו הספרייה מובנת במאגר הספריות של ארדואינו ולכן אין צורך להוריד אותה.
תיאור הדקים מנוע סרבו
מנוע סרבו | ארדואינו |
VCC – אדום | VCC – 5V |
GND – חום | GND |
הדק בקרה – כתום | רגל שאנו נחליט |
קטע קוד להפעלת מנוע סרבו:
#include // הגדרת הספרייה של מנוע סרבו
Servo myservo; // הגדרת משתנה של הספרייה מסוג סרבו
void setup()
{
myservo.attach(7); //הגדרת רגל שבה נוציא את המידע למנוע סרבו
}
void loop()
{
myservo.write(180); // סיבוב המנוע ב180 מעלות
delay(1000); // השהייה של 1 שנייה
myservo.write(0); // סיבוב המנוע למצב התחלתי - 0 מעלות
delay(1000); // השהייה של 1 שנייה
}