Merhaba arkadaşlar ,bu yazımda arduino ile step motordan 360 derecelik servo motor yapmaya çalışacağız. Öncelikle belirtmek isterim ki tam olarak servo motor olmayacaktır. Sadece step motoru adım ile kontrol ederken bu uygulamamızda adım yerine açı vererek kontrol edeceğiz. Daha önce yazmış olduğum step motor kullanımını gösteren yazımı inceleyebilirsiniz.

Malzeme Listesi

Devre Şeması

   Devre şeması aşağıdadır ve oldukça basittir. Ben breadboard kullanmadan yaptım. Siz kullanabilirsiniz veya kullanmadan da yapabilirsiniz. Motor sürücüdeki 4 adet IN girişini arduinoda 8 9 10 11 pinlerine aşağıdaki görüldüğü gibi bağlıyoruz. Daha sonra besleme için GND ve VCC bağlantılarını yapmamız gerekiyor. Kırmızı kablo VCC(+5V) , mavi kablo ise GND(-)’yi temsil etmektedir.

Step Motordan 360 Derecelik Servo Motor Yapımı

   Kodlara aşağıdan ulaşabilirsiniz. Kodların kısaca açıklamaları yan taraflarında verilmiştir. Adım adında bir değişkenimiz var ve bu değişken step motorumuzun bir tam tur dönmesi için gerekli adım sayısını saklıyordur. Bizim fonksiyonumuzda 1 adım attırmak için aslında 4 farklı ufak adım atıyor bu yüzden o değeri kod kısmında 4 e böldüm. Step motorumuz normalde 2048 adımda bir tur atıyor ama bizim kodda bu / 4 yani 512 olarak değerlendiriliyor. Güncel derece değişkenimiz ile arduino çalıştığında step motorun o anki derecesini 0 olarak kabul ediyor. Servo motorlarda derece her seferinde aynı kalır ama bu uygulamamızda dereceyi açılışta 0 olarak kabul ediyoruz. Bu yüzden tam olarak servo motor yapımı sayılmaz. 🙂

   Bir derecelik hareket yapması için gerekli olan adım sayısını, 1 tur için gerekli adım sayısının 360’a bölünmesi ile elde ediyoruz. Süre değişkeni ile motor her bir adım attığında ne kadar süre beklemesi gerektiğini ayarlıyoruz. Süreyi azaltmanızı tavsiye etmem ama arttırarak step motorun daha yavaş çalışmasını sağlayabilirsiniz. Define komutu ile motor sürücü kartındaki girişlerin arduinoda hangi pinlere bağlı olduğu tanımlanmıştır. Setup kısmında bu pinler output yani çıkış olarak tanımlanmıştır.

Loop Fonksiyonu 

    Loop kısmında ise örnek bir uygulama yazdım. Bu uygulamada ilk önce motor 0 dereceye geliyor. 2 saniye bekliyor ve 90 dereceye gidiyor. Tekrar 2 saniye bekleyip 45 – 180 – 135 – 360 şeklinde hareketler yapıyor ve 5 saniye bekliyor. Siz bu kısmı uygulamanızda nasıl istiyorsanız o şekilde yapabilirsiniz.

Derece Ayarla Fonksiyonu

    Kodumuzun en önemli kısmı derece ayarla fonksiyonudur. bu fonksiyon parametre olarak bir sayı istiyordur. Eğer sayı 0 ile 360 arasında ise işlem yapıyordur. Bu aralıkta değilse fonksiyon bir işlem yapmıyor. Gönderilen derece değeri bu aralıkta ise güncel dereceden büyüklüğü veya küçük olma durumu kontrol edilir. Daha sonra aradaki fark elde edilir. Aradaki derece farkı ile bir derecedeki attığı adım sayısı çarpılır. Bu çarpılan değer kadar motor saat yönünde veya saatin ters yönünde hareket eder. 

    Not: Bu uygulamamızda ne kadar servo motor yapmaya çalışsak da bazı kısımlarını yapamadık. Örnek olarak motorumuzu istediğimiz dereceye getiririz ve kontrol ederiz. Fakat arduino kapatıldığında ve sonra tekrar açıldığında bulunduğu konumu 0 olarak algılayacaktır. 

Robolink Akademi – Step Motordan 360 Derece Servo Motor Yapımı Kodları

view raw Aciklama.md hosted with ❤ by GitHub
int Adim = 2048 / 4; // 512 1 Tam tur için gerekli adım
int guncelDerece = 0; // Başlangıç Derece 0
float birDerecedekiAdim = Adim / 360.0; // 1,4222
int sure = 3; // Her adımda bekleme süresi
#define IN1 11 //Sürücü
#define IN2 10 //Bağlantıları
#define IN3 9
#define IN4 8
void setup() {
pinMode(IN1, OUTPUT); //Pinleri
pinMode(IN2, OUTPUT); //Çıkış
pinMode(IN3, OUTPUT); //Olarak
pinMode(IN4, OUTPUT); //Tanımladık
}
void loop() {
DereceAyarla(0); //0.Dereceye Ayarlıyoruz
delay(2000); // 2 sn bekle
DereceAyarla(90); //90.Dereceye Ayarlıyoruz
delay(2000);
DereceAyarla(45); //45.Dereceye Ayarlıyoruz
delay(2000);
DereceAyarla(180);//180.Dereceye Ayarlıyoruz
delay(2000);
DereceAyarla(135);//135.Dereceye Ayarlıyoruz
delay(2000);
DereceAyarla(360);//360.Dereceye Ayarlıyoruz
delay(5000); //5 sn bekle
}
void DereceAyarla(int derece) {
if (derece >= 0 && derece <= 360) { // Derece 0 360 Arasında ise
if (derece > guncelDerece) { // Girilen derece büyükse Saat Yönü
float fark = derece – guncelDerece; // derece farkını hesaplıyoruz
//Bir derecedeki ilerlemesi adım ile farkı yani dereceyi çarpıyoruz
SaatYonu(int(fark * birDerecedekiAdim)); // o kadar adım ilerliyor.
guncelDerece = derece; // güncel dereceye dereceyi aktarıyoruz.
}
else if (derece < guncelDerece) { //Girilen derece küçükse Saat Ters Yönü
float fark = guncelDerece – derece; // derece farkını hesaplıyoruz
//Bir derecedeki ilerlemesi adım ile farkı yani dereceyi çarpıyoruz
SaatTersYonu(int(fark * birDerecedekiAdim));// o kadar adım ilerliyor.
guncelDerece = derece;// güncel dereceye dereceyi aktarıyoruz.
}
}
}
void SaatYonu(int adimSayisi) {
for (int i = 0; i < adimSayisi; i++) {
digitalWrite(IN4, HIGH);
delay(sure);
digitalWrite(IN4, LOW);
digitalWrite(IN3, HIGH);
delay(sure);
digitalWrite(IN3, LOW);
digitalWrite(IN2, HIGH);
delay(sure);
digitalWrite(IN2, LOW);
digitalWrite(IN1, HIGH);
delay(sure);
digitalWrite(IN1, LOW);
}
}
void SaatTersYonu(int adimSayisi) {
for (int i = 0; i < adimSayisi; i++) {
digitalWrite(IN1, HIGH);
delay(sure);
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
delay(sure);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
delay(sure);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
delay(sure);
digitalWrite(IN4, LOW);
}
}
view raw Kod.ino hosted with ❤ by GitHub

Uygulama Videosu

Step motordan 360 derecelik servo motor yapma uygulamamız hakkında merak ettiklerinizi veya anlamadığınız şeyleri yorum olarak sorabilirsiniz. İyi çalışmalar dilerim 🙂

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz