Raspberry Pi ile Servo Motor Kontrolü

Güncelleme tarihi: 9 May 2020

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.






Son Paylaşımlar