ARDUİNO L293D MOTOR SHİELD İLE DC MOTOR SÜRELİM

Yazımızda L293D entegresi kullanılan motor shield incelemesini yapacağız ve nasıl DC motor sürerim sorusunun cevabını arayacağız.

İlk olarak işe motor shieldımızı kısa bir şekilde tanımakla ile başlayalım. Görmüş olduğunuz motor shiled ile iki servo motor, dört DC motor ve iki step motor çalıştırabilmekteyiz. DC motorlarımızı çalıştırabilmek için dört adet çıkışımız bulunmakta bunlar M1, M2, M3, M4 çıkışlarımızdır. EXT_PWR klemensi ile motorlarımızı besleyecek gerilimi vermeliyiz. Harici gerilim vermemizin sebebi arduino üzerindeki gerilimin DC motoru çalıştırmak için yetersiz kalmasıdır. Arduino Motor Shield’in sürebildiği motor sayısı fazla olduğu için kullandığı pin sayısı da fazladır. Shield; Pin 2, 13, A0-A5 olmak üzere 8 pin dışındaki tüm pinleri kullanmaktadır. Bu yüzden bu motor sürücü ile beraber ekstra sensör vs. kullanılacaksa kalan pinlere dikkat edilmelidir.DC motorumuzu sürmek için adafruit motor shield kütüphanesini arduino kütüphanenize eklemeniz gerekmektedir. Vereceğim linkten kütüphaneyi indirebilirsiniz.

Link: https://learn.adafruit.com/adafruit-motor-shield/library-install

Dc Motor Kontrol Fonksiyonları:

AF_DCMotor : Bu fonksiyon ile dc motor tanımı yapılır.

Dc motor sürmede iki husus vardır. Birincisi kanal numarası, ikincisi de pwm frekansıdır.

1 ve 2 nolu kanal için frekans tanımlamaları;

  • MOTOR12_1KHZ // 1khz frekans
  • MOTOR12_2KHZ // 2khz frekans
  • MOTOR12_8KHZ // 8khz frekans
  • MOTOR12_64KHZ // 64khz frekans

3 ve 4 nolu kanal frekans tanımlamaları;

  • MOTOR34_1KHZ // 1khz frekans
  • MOTOR34_8KHZ // 8khz frekans
  • MOTOR34_64KHZ  // 64khz frekans

Motorların tanımlarını iki şekilde yapabilirsiniz.

1.Tanımlama :

AF_DCMotor motor1(1); >> Burada parantez içindeki sayı kanal numarasını verir.Dışındaki  “motor1” tanımı ise 1.kanala atadığımız isimdir Bu şekilde tanımladığımızda pwm frekansını girmediğimiz için varsayılan frekans değeri 1khz olarak tanımlanmış olacaktır.

2.Tanımlama : 

AF_DCMotor left_motor(1, MOTOR12_64KHZ); 

Burada yine 1. kanalı tanımladık. Kanal adını “left_motor” olarak tanımladık. Bu tanımlamada frekans değerimizi de girdik. Parantezde birinci kısım kanal adı ikinci kısım ise frekans değerimizdir.

  • Yüksek frekans seçerseniz motorlardan daha az uğultu gelir fakat motorun torkunu düşürür.

Motorların Hız Fonksiyonu:

setSpeed Fonksiyonu: Bu fonksiyon ile motorları 0 ile 255 değerler arasında hızını ayarlayabilirsiniz.

motor1.setSpeed(180); >> Bu şekilde motor1 isimli motor kanalına parantez içine girdiğimiz değer ile hızını belirlemiş olduk.

Motorların Hareket Fonksiyonları:

run fonksiyonu: Bu fonksiyon ile motorların ileri geri ve durma işlemini gerçekleştiriyoruz.

Fonksiyonda yön işlemleri ingilizce terimlerle sağlanıyor.

FORWARD – ileri
BACKWARD  – geri
RELEASE – dur

motor1.run(FORWARD); >> Bu şekilde “motor1” isimli kanalın motorun yönü ileri olarak ayarlandı.

motor.run(BACKWARDS); // Geri git
motor.run(RELEASE); // Dur

Step Motor Kontrol Fonksiyonları

Yukarıdaki şekilde de görüldüğü üzere 2 tane step motor sürebiliyoruz. 1. ve 2. kanal birinci step, 3.ve 4. kanal ikinci step motoru kontrol etmemizi sağlıyor.

AF_Stepper: Bu fonksiyon step motor tanımı yapar.

AF_Stepper motor_adı(adım, kanal numarası)

Yukarıdaki fonksiyon yapısı step motorun genel tanımıdır.

AF_Stepper ile step motor fonksiyonunu çağırdık.

motor_adı” kısmı step motorunuza vereceğiniz isimdir.

“adım” kısmına step motorun  bir devirdeki adım sayısı girilir.

“kanal numarası” kısmına da step motoru hangi kanala bağlamak istiyorsak o kanalın numarası girilir. Yani sol kısım 1. kanal sağ kısım ise 2. kanal idi. 1 veya 2 girmemiz gerekir.

Örnek tanımlama:

AF_Stepper Stepper1(200, 1); Bu tanım ile “Stepper1” adında motorun 200 adımlık step bilgisi ile 1. kanala tanımlı olduğu belirtilir

[/vc_column_text]

step(adım, yön, mod) : Bu tanımlama step motoru hareket ettirmek için adım yön ve mod bilgisinin girildiği kısımdır.

“adım” kısmına motorun kaç adım döneceği bilgisi girilir.

“yön” kısmına motorun dönme yönü girilir. Yön fonksiyonları “FORWARD” ve “BACKWARD” olarak tanımlanır.

“mod” kısmında step motorun hareket şekli girilir. Bunlar;

  • SINGLE : Bir bobine enerji  vermesiyle motoru çalıştırır. Güç tasarrufu gerektiren yerlerde kullanışlıdır fakat çok yaygın değildir. Motora az tork verir.
  • DOUBLE : İki bobine enerji vermesiyle motoru çalıştırır. Motora tam tork verir.
  • INTERLEAVE : Bobinlere eş zamanlı enerji vererek adım açısını yarıya düşürür. Bu sayede adım sayısı iki katına çıkar ve çözünürlük artar. Örneğin 200 adım 1.8 derece motor bu fonksiyon ile 0.9 derece 400 adım değerini alır.
  • MICROSTEP : Pürüzsüz motor sürüşü sağlar. Yaygın kullanılan fonksiyondur. Adımlar arasında yumuşak geçiş sağlar. Fakat torku düşürür.

Örnek fonksiyon :

Stepper1.step(150, FORWARD, DOUBLE); >> Burada “Stepper1” isimli motorun 150adım ile “DOUBLE” modunda döneceği bilgisi girildi.

setSpeed(rpm) fonksiyonuStep motorun rpm değerini ayarlamak için kullanılan fonksiyondur. Parantez içine rpm değeri girilir.

Stepper1.setSpeed(10); Bu şekilde “Stepper1” isimli motorun hız değerini tanımladık.

onestep(yön, mod) fonksiyonu: Bu fonksiyon tek adım step motorlar için geçerlidir. Parantez içindeki yön ifadesine FORWARD veya BACKWARD yazılarak yön belirtilir. mod ifadesine de yukarıdaki aynı modları kullanarak tanımlamamızı yapıyoruz.

Örnek fonksiyon:

Stepper1.onestep(FORWARD, DOUBLE); Bu şekilde “Stepper1” isimli motorun yönünü ileri ve modunu ise “DOUBLE” olarak belirttik.

release() fonksiyonu: Bu fonksiyon motoru durdurur ve torku tutar yani enerji kesmez ve motorun aynı torkta kalmasını sağlar.

Stepper1.release(); Bu şekilde “Stepper1” isimli motoru durdurur.

Servo motor Kontrolü

Sürücü üzerinde 2 adet servo girişi bulunmakta. Servoları sürmek için sürücünün kendi kütüphane fonksiyonu yok. Normal servo motor kütüphanesini kullanarak servoları kontrol edebilirsiniz. Servo1 yazan giriş arduinonun 9. dijital pinine, Servo2 yazan giriş ise arduinonun 10.dijital pinine bağlıdır. Kullanıcıya kolaylık olsun diye 2 adet servo girişi yapılmış.

servo1.attach(10); veya servo1.attach(9); ile servo motoru bu girişlere tanıtabilirsiniz.

1 adet DC Motor sürmek için gerekli olan malzemeler:

İlk olarak shield üzerindeki EXT_PWR çıkışına 9V pil yuvamızı takıyoruz burada dikkat etmeniz gereken şey kırmızı kablonun + ’ ya siyah kablonun – ‘  ye bağlanmasıdır.

Motor shieldimizi arduino üzerine bu şekilde yerleştiriyoruz.

Üstüne tam olarak oturtulmalıdır. Daha sonra ise shield üzerindeki M4 çıkışına motorumuzu bağlıyoruz. Burada hangi renkteki kablonun nereye bağlanacağı önemli değildir. Kodumuzu çalıştırdığımızda ileri gitmesi gerekirken geri gidiyor ise çıkışa bağladığımız kabloların yerlerini değiştirmemiz yeterli olacaktır.

Projemizin son hali bu şekildedir. Aşağıdaki kodları Arduino’ nuza yüklemeyi unutmayın. Başka bir projede görüşmek üzere.

Kodlar:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <AFMotor.h>
AF_DCMotor motor(4, MOTOR34_64KHZ); // Motoru tanımlıyoruz.
 
voidsetup() {
  Serial.begin(9600);         
  Serial.println("Motor testi !");
  motor.setSpeed(200);   // Motor hızını ayarlıyoruz. (Maks 255)
}
 
voidloop() {
  Serial.print("tik");
  
  motor.run(FORWARD);   // ileri yönde dön
  delay(1000);
 
  Serial.print("tok");
  motor.run(BACKWARD);  // ters yöne dön
  delay(1000);
  
  Serial.print("tak");
  motor.run(RELEASE);  // dur
  delay(1000);
  }

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir