מצלמה ומנוע סרוו

מצלמה ומנוע סרוו

הפעם נחבר את מצלמת הרספברי פיי למנוע סרוו כדי להזיז אותה 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

 

 

pi-cam-servo

 

 

 

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 ברספברי פיי

fritzing-pi-servo

raspberry-pi-camera-servo

קיבוע של המנוע

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

python servo.py

 

servo-window

 

 

הרספברי פיי מזרים וידאו ברזולוציה 720P דרך WIFI אלחוטי מובנה שנמצא במעבד של ברודקום, וגם שולט במנוע הסרוו. החיבור החיצוני היחידי שלו הוא לחשמל.

טוב, הנוף זה לא האלפים השוויצרים אבל לפחות המצלמה עובדת כמו שצריך:

 

בפעם הבאה נשלוט בסרוו דרך האינטרנט….

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *