5 - מנוע סרוו

בפרויקט הזה נעשה שימוש ברכיב חדש, מנוע סרוו (Servo Motor). מנועי סרוו הם סוג מיוחד של מנוע, כזה שאינו מסתובב במעגל, אלא עובר למיקום מסויים ונשאר שם עד שאנו אומרים לו לנוע שוב. המנועים האלו, בדר”כ, מסתובבים רק 180 מעלות (חצי עיגול).

בדומה לאופן בו השתמשנו בפולסים בשביל נורת הLed (טכניקת PWN) בפרויקט הקודם, מנועי סרוו מצפים למספר פעימות שאומר להם לאיזו זווית לעבור. אותם הפולסים מגיעים תמיד באותם מרווחי זמן, אך אורכם משתנה בין 1,000 ל 2,000 מיקרו שניות. בעוד שאפשרי לכתוב קוד ליצירת פולסים אלה, תוכנת ה Sketch של ה Arduino מגיעה עם ספרייה המאפשרת לנו לשלוט במנוע בקלות.

מפני שמנוע הסרוו מסתובב רק 180 מעלות, ובכניסה האנלוגית (אותה אנו קוראים בעזרת הפונקצייה ()analogRead) אנו מקבלים ערכים הנעים בין 0 ל 1023, אנחנו צריכים להשתמש בפונקצייה הנקראת ()map על מנת לשנות את קנה המידה שהערכים מגיעים מהפוטנציומטר (בעצם, ע”י הפוטנציומטר נזיז את מנוע הסרוו).

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

 

חיבור הרכיבים

חברו ללוח המטריצה חוטים מעמודות ה+ וה-, אל ה 5V וה GND (בהתאמה, כפי שעשינו עד כה). מקמו פוטנציומטר על גבי לוח המטריצה וחברו רגל אחת שלו ל 5v ואת השניה לאדמה (GND) בעזרת חוטים מגשרים מעמודות ה+ וה- (לא משנה איזה מהרגלים). פוטנציומטר זהו סוג של מחלק מתח, כשמסובבים את הידית, היחס בין הפין האמצעי למקור הכוח משתנה. ניתן לקרוא את השינוי הזה ע”י קלט אנלוגי, לכן נחבר את הפין האמצעי לפין האנלוגי 0 (או A0). (זה ישלוט על המצב של מנוע הסרבו).

למנוע הסרוו יש 3 חוטים שיוצאים ממנו, האדום הוא מקור הכוח, השחור הוא לאדמה, והלבן מקבל מידע (מהארדואינו במקרה שלנו) ומיועד לשליטה במנוע הסרוו. חברו את הכבל האדום והשחור ללוח המטריצה ואת הלבן ישירות לארדואינו לפין הדיגיטלי מס’ 9. בלוח המטריצה חברו חוטים מגשרים לכבל השחור והאדום מעמודות ה+ וה-.

כאשר מנוע הסרוו מתחיל את התזוזה שלו, הוא צורך זרם גבוה מאשר כשהוא כבר בתזוזה. דבר כזה יגרום לשקע במתח על גבי הלוח. לכן נניח קבל 100uf בצמוד לכוח ולאדמה (החוטים אדום ושחור שיוצאים ממנוע הסרוו ומחוברים ללוח המטריצה) כדי שיאגור את המטען החשמלי שהסרוו אינו משתמש בו, הקבל “ישטח” כל שינוי מתח שיקרה. בנוסף, ניתן להניח קבל נוסף באותן העמודות של הפוטנציומטר. שיטה זאת נקראת “ניתוק קבלים” (או באנגלית Decoupling capacitor), באלקטרוניקה זה אומר מניעת צימוד של מערכות, ובמקרה שלנו מניעת צימוד של מעגלים חשמליים שונים ע”י קבלים (רעש אלקטרוני שנגרם ממערכת, מעגל חשמלי, יושתק ע”י הקבל, וכך יפחית את האפקט על שאר המעגל הכללי). את הכבלים חברו כך שהרגל הקצרה (קתודה, מסומנת על הקבל בפס שחור) תהיה מחוברת לאדמה (חוט מגשר שחור) והרגל הארוכה יותר (אנודה) תהיה מחוברת למקור הכוח (חוט מגשר אדום). שימו לב, השלב הזה קריטי, אם תשימו אותם הפוך הקבל יכול להתפוצץ! להלן סכמה ואיור להמחשה:

Arduino Project number 5

 

הקוד

לפני שנתחיל לכתוב את הקוד נייבא את ספריית הסרוו שדיברנו עליה בתחילת הפוסט. בשביל לייבא ניעזר בפונקציה include# ונכתוב את שם הספרייה ב<> (יש לציין כי הפקודה אינה מסתיימת בנקודה פסיק). שם הספרייה של מנוע הסרוו היא Servo.h. לאחר מכן, בשורה הבא נוכל ליצור משתנה מופע, משתנה המופע הזה נקרא אובייקט (נקרא לו myServo) מסוג Servo. מה שעשינו הוא ליצור אובייקט בשם myServo שמקבל את כל התוכנות והיכולות של Servo שייבאנו מהספרייה שלו.

לאחר מכן ניצור משתנה קבוע (זוכרים const?) בשם potPin שישמור את מס’ הפין האנלוגי שאליו מחובר הפוטנציומטר (כדי לקרוא ממנו מידע). לאחר מכן ניצור משתנה בשם potVal מסוג int (שומר מספרים שלמים) כדי להחזיק את המספר שאנו קוראים מהפוטנציומטר (אמור להיות הזווית שעל מנוע הסרוו לזוז, אך עדיין לא בערכים המתאימים למנוע הסרוו), ועוד משתנה מסוג int בשם angle שישמור את הזווית אליה רוצים שמנוע הסרוו יזוז.

כעת, נכתוב את פונקציית ה setup (האזור שרץ אך ורק פעם אחת, לפני ביצוע התכנית - פונקציית ה loop). הדבר הראשון שנעשה זה להגיד לארדואינו לאיזה פין מחובר מנוע הסרוו (על מנת שידע לשלוח לו את המידע מאוחר יותר). נעשה זאת ע”י קריאה לאובייקט שלנו (myServo) נקודה ואז שם הפונקציה (במקרה שלנו attach) ונפתח ונסגור סוגריים רגילים (בסוף הפקודה לא לשכוח נקודה פסיק). בתוך הסוגריים של הפונקציה attach (שפועלת על האובייקט myServo) נכניס את מס’ הפין שאליו מחובר מנוע הסרוו, אני חיברתי אותו ל9). לאחר מכן, כמו תמיד, נפתח חיבור תקשורת בין הארדואינו למחשב (כדי שנוכל לקרוא ולהדפיס משתנים, נעשה זאת בשביל לבצע בדיקה ולראות את המשתנים). את חיבור התקשורת נעשה עם הפקודה ()Seiral.begin ונגדיר את מהירות התקשורת להיות 9600bps (ראשי תיבות של bit per second).

  • ניתן לראות בתמונה משמאל את מה שכתבנו עד כה.

נעבור לכתיבת התכנית עצמה - פונקציית loop. נתחיל בקריאת המשתנה מהפוטנציומטר (קריאת משתנה אנלוגי מתבצע עם analogRead, זוכרים?), נקרא אותו מהמשתנה potPin שמכיל את מס’ הפין שאליו מחובר הפוטנציומטר ונכניס את המשתנה מהקריאה למשתנה potVal שיצרנו מבעוד מועד. כעת נדפיס טקסט שנדע שהדבר הבא שיודפס זה הערך של המשתנה potVal, ולאחר מכן נדפיס את הערך של potVal.

כמו שאמרנו קודם לכן, בכניסה האנלוגית אנו מקבלים ערכים הנעים בין 0 ל1023, אך מנוע הסרוו מקבל ערכים בין 0 ל179 (180 מספרים סה”כ. זהו מספר המעלות אליו הוא צריך לנוע). לכן בשביל לבצע את ההמרה של הערכים לערכים המתאימים למנוע הסרוו (כאלה שהוא מקבל) נשתמש בפונקציה ()map ונשמור את הערכים ב angle. הפונקציה השימושית הזו מאזנת (מלשון מאזניים) מספרים בשבילנו (במקרה שלנו שינוי של ערכים בין 0-1023 לערכים בין 0-179). היא מקבלת 5 ארגומנטים. הראשון הוא המספר אותו יש לשנות, השני מס’ המינימום של ערך הקלט (המס’ המינימלי שהוא יכול להיות), השלישי מס’ המקסימום של ערך הקלט, הרביעי מס’ המינימום של ערך הפלט (המס’ המינימלי שהוא יוכל להיות), החמישי מס’ המקסימום של ערך הפלט. לאחר מכן גם את המשתנה הזה (קודם טקסט שנדע מה הערך הבא אומר, ולאחר מכן את הערך עצמו).

לבסוף, הגיע הזמן להזיז את מנוע הסרוו עם הפקודה ()servo.write אשר מקבלת ארגומנט אחד שהינו הזווית אליה יש לזוז (אליה יש להזיז את מנוע הסרבו), במקום ה servo נשים כמובן את שם הסרוו שלנו (קראנו לו myServo). ולאחר מכן נכניס מרווח קטן על מנת שלסרוו יהיה זמן לזוז למיקום.

  • ניתן לראות בתמונה משמאל את מה שכתבנו עד כה.

 

לסיכום

בפרויקט הזה למדנו כיצד לייבא ספריות כתובות לרכיבים שאין להם פונקציות כתובות מראש ב Sketch. ניתן לראות את ה API (ראשי תיבות: Application programming interface) של הספרייה בה השתמשנו באתר ארדואינו, כאן, ולבדוק איזה פונקציות היא מכילה ומה ניתן לעשות איתה. בנוסף, למדנו על 3 רכיבים חדשים (פוטנציומטר, מנוע סרוו, וקבלים). כשתריצו את הפרויקט, פתחו את ה Serial monitor (זכוכית מגדלת בצד הימיני בשורה של שאר הפעולות) שם תראו את הערכים אותם הארדואינו מדפיס, שימו לב ליחס בין potVal ל angle כדי להבין טוב יותר את הפונקציה ()map שבה השתמשנו.