הפעם נחבר את מצלמת הרספברי פיי למנוע סרוו כדי להזיז אותה 180 מעלות בציר ה X.
הפעלת מצלמה ומנוע סרוו
המצלמה של הרספברי פיי היא מצלמה ייעודית שמסוגלת לצלם תמונות באיכות גבוהה, ובנוסף להזרים וידאו. הרזולוציה של הדגם הראשון היא 5MP ולאחרונה יצאה מצלמה דור שני עם 8MP. המצלמה היא קטנה מאוד ומזכירה מצלמות שנמצאות בסמארטפונים, וכדי לחבר אותה אל הרספברי פיי ולהזרים וידאו אפשר להיעזר בפוסט קודם.
הכבל שבאמצעותו היא מתחברת לרספברי פיי הוא די מסורבל ולכן זה די קשה לעבוד איתה ולחבר אותה לסרוו, אבל בעזרת חוטים גמישים, אזיקונים או דבק אפשר לחבר בצורה שמתקבלת על הדעת.
מנוע סרוו הוא מנוע שזז בזווית של 0-180 מעלות לפי הפקודה שאנחנו נותנים לו. המנוע מקבל פולס מפין דיגיטלי כל 20 מילישניות וזז לפי אורך הפולס שהוא מקבל. אורך הפולס שצריך לתת לו הוא שונה מסרוו אחד לשני אך בסרוו שאנחנו משתמשים בו הוא נע בין 0.5-2.5 מילישניות כש 0.5 זה זווית 0 ו 2.5 מילישניות זה זווית 180. כל מה שביניהם הוא הזוויות שבין 0 ל 180.
פונקציית ה PWM של פייתון עובדת בצורה קצת שונה: אנחנו מפעילים אותה על יד תדירות(frequency) וגורם מחזור(duty cycle). בדוגמה של הקוד התדירות היא 50Hz כי היחס הוא כזה – 1/50=0.02 = 20 מילישניות .
עכשיו כדי לתת אורכי פולסים שונים אנחנו משתמשים בנוסחה הבאה:
DutyCycle = PulseWidth/(1/frequency) = PulseWidth * frequency
מהנוסחה הזאת יוצא שכדי לתת פולס באורך 0.5 מילישניות אנחנו משתמשים בגורם מחזור של 2.5%. בשביל פולס של 1.5 מילישניות משתמשים בגורם מחזור של 7.5%. ובשביל פולס של 2.5 מילישניות משתמשים בגורם מחזור של 12.5%.
לסיכום אפשר לומר שגורם מחזור של 2.5% יזיז את המנוע לזווית 0, וגורם מחזור של 12.5% יזיז אותו ל 180 מעלות, וכך ניתן לשלוט גם על כל השלבים שביניהם.
אחרי שבדקנו שהמצלמה מזרימה וידאו לרספברי פיי הגיע הזמן לכתוב את הקוד של הסרוו בקובץ פייתון. כשאנחנו בתיקיית הבית (pi) ניצור קובץ חודש:
nano servo.py
import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) GPIO.setup(18, GPIO.OUT) p = GPIO.PWM(18,50) # set frequency of 50 - pulse every 20ms pos = 2.5 # set angle position to 0 p.start(pos) # start with angle position of 0 try: # give a chance to stop program with keyboard while True: # infinite loop for i in range(100): # loop from 2.5 to 12.5 in 0.1 increments p.ChangeDutyCycle(pos) # move to position pos += 0.1 # increment position by 0.1 time.sleep(0.5) # wait half a second for i in range(100): p.ChangeDutyCycle(pos) pos -= 0.1 # move position down 0.1 time.sleep(0.5) except KeyboardInterrupt: GPIO.cleanup() # if ctrl^c exit program and clean GPIO
שימו לב שהקוד הזה מזיז את המנוע מ 0 ל 180 מעלות ובחזרה אבל אם תרצו להזיז אותו רק ל90 מעלות תורידו את הערך בלולאה מ 100 ל 50. בפייתון צריך גם לזכור לתת 4 רווחים בכל שורה שהיא אחרי נקודתיים.
חיבורים
זה משתנה מסרוו לסרוו אבל בעקרון יש +, -, וחוט לשליטה במנוע.
- החוט האדום הולך ל5 וולט
- החוט החום הולך לGND
- החוט הכתום הולך לפין מספר 18 ברספברי פיי
קיבוע של המנוע
כדי לקבע את מצלמה ומנוע סרוו אפשר להשתמש בדבק, ברגים, אזיקונים, חוטים או בחיבורים מקצועיים. כל מה שנשאר זה להפעיל את הקןד דרך הטרמינל:
python servo.py
הרספברי פיי מזרים וידאו ברזולוציה 720P דרך WIFI אלחוטי מובנה שנמצא במעבד של ברודקום, וגם שולט במנוע הסרוו. החיבור החיצוני היחידי שלו הוא לחשמל.
טוב, הנוף זה לא האלפים השוויצרים אבל לפחות המצלמה עובדת כמו שצריך:
בפעם הבאה נשלוט בסרוו דרך האינטרנט….