طبق برنامه سروو موتور 180 درجه میچرخد. طول پالس اعمال شده موقعیت سروو موتور را مشخص میکند. Duty Cycle به عبارت دیگر نرخ روشن بودن سروو موتور، برای هر زاویه محاسبه شده و رزبری پای پالس معادل آن را هر 10میلیثانیه به پین سیگنال سروو موتور ارسال میشود.
در ابتدای برنامه کتابخانههای مورد نیاز از برای زمانبندی و همچنین فعالسازی پینهای ورودی خروجی فراخوانی میشود.
import RPi ## Import GPIO Library.
import time ## Import ‘time’ library for a delay.
توسط دستور زیز با استفاده از شمارهی پین روی رزبری پای یا شمارهی عملکرد آنها، می توان به پینهای GPIO رسپبری پای اشاره کرد.
GPIO.setmode(GPIO.BOARD) ## Use BOARD pin numbering.
پین GPIO22 (پین 22) را به عنوان پین خروجی تنظیم کرده تا از آن به عنوان پین خروجی PWM استفاده کنیم.
GPIO.setup(22, GPIO.OUT) ## set output.
با استفاده دستور زیر کانال و فرکانس سیگنال PWM را در رزبری پای تنظیم کرده و فرکانس 100 هرتز را برای سروو موتور در متغیر pwm ذخیره میکنیم.
pwm=GPIO.PWM(22,100) ## PWM Frequency
با دستور زیر سروو موتور شروع به کار کرده و مقدار Duty Cycle مشخص میشود.
pwm.start(5)
در نهایت میزان Duty Cycle برای زوایای مورد نظر معادل سازی شده و سروو موتور میچرخد.
angle1=10
duty1= float(angle1)/10 + 2.5 ## Angle To Duty cycle Conversion
angle2=160
duty2= float(angle2)/10 + 2.5
ck=0
while ck<=5:
pwm.ChangeDutyCycle(duty1)
time.sleep(0.8)
pwm.ChangeDutyCycle(duty2)
time.sleep(0.8)
ck=ck+1
time.sleep(1)
GPIO.cleanup()
کد کامل برنامه:
import RPi ## Import GPIO Library.
import time ## Import ‘time’ library for a delay.
GPIO.setmode(GPIO.BOARD) ## Use BOARD pin numbering.
GPIO.setup(22, GPIO.OUT) ## set output.
pwm=GPIO.PWM(22,100) ## PWM Frequency
pwm.start(5)
angle1=10
duty1= float(angle1)/10 + 2.5 ## Angle To Duty cycle Conversion
angle2=160
duty2= float(angle2)/10 + 2.5
ck=0
while ck<=5:
pwm.ChangeDutyCycle(duty1)
time.sleep(0.8)
pwm.ChangeDutyCycle(duty2)
time.sleep(0.8)
ck=ck+1
time.sleep(1)
GPIO.cleanup()