Bu uygulamamızda Raspberry Pi kartımıza bağladığımız bir servo motorun açısını PWM metodu ile ayarlayacağız.
Bu uygulamada kullanacağımız malzemelerimiz;
Raspberry Pi
SG90 Servo Motor
Jumper Kablolar
Devremizi şemada gördüğümüz şekilde kuruyoruz.
Öncelikle servo motorumuza göndereceğimiz PWM sinyalinde hangi açı değeri için hangi Duty Cycle değerini göndereceğimizi hesaplamamız gerekiyor. Bunun için kullanacağımız motorun datasheet bilgisine bakmamız gerekiyor.
SG90 için datasheet bilgileri şu şekilde:
Bu durumda istediğimiz açı değerini bulmak için şu denklemi yazabiliriz.
1 ms ---- 0°
x ms ---- aci
2 ms ---- 180°
(2-x) / (x-1) = (180-aci) / (aci-0)
x = (1/180)*aci + 1
DutyCycle = x * (frekans/10)
Kullandığımız motor için frekans değerimiz 50 olduğundan;
DutyCycle = x * 5
Kodumuzu yazmak için servo.py adı ile bir dosya oluşturuyoruz.
Oluşturduğumuz denklemi tanımlıyoruz. Gelen açı değerinden Duty Cycle değerini hesaplayıp pwm sinyali olarak gönderiyoruz.
def aciAyarla(aci):
x=(1/180)*aci + 1
duty=x*5
pwm.ChangeDutyCycle(duty)
Daha sonra for döngüsü ile servo motorumuzun 0-180 derece arası 45 er derecelik artışla hareketini sağlıyoruz ve açı değerini ekrana yazdırıyoruz.
for i in range(0,181,45):
print ("aci = ",i)
aciAyarla(i)
time.sleep(1)
Kodun tamamı:
import RPi.GPIO as GPIO
import time
servoPIN = 17
GPIO.setmode(GPIO.BCM)
GPIO.setup(servoPIN, GPIO.OUT)
pwm = GPIO.PWM(servoPIN, 50)
pwm.start(0)
def aciAyarla(aci):
x=(1/180)*aci + 1
duty=x*5
pwm.ChangeDutyCycle(duty)
try:
while True:
for i in range(0,181,45):
print ("aci = ",i)
aciAyarla(i)
time.sleep(1)
except KeyboardInterrupt:
pwm.stop()
GPIO.cleanup()
Kodumuzu yazıp kaydettikten sonra terminal ekranından
python servo.py
komutu ile çalıştırabilirsiniz.
Comments