Arduino İle 28BYJ-48 Step Motor Kullanımı

28BYJ-48 Step Motor, internette kolaylıkla bulabileceğimiz bir step motordur. Fiyat olarakta gayet ucuzdur. Bu sebeble projelerimizin çoğunda bu motoru kullanmaktayız. Tabi bu yaptığınız projeye göre değişmektedir. 28BYJ48 step motorunu satın aldığımızda genellikle yanında bir sürücü ile gelemektedir. Bu motor sürücü ULN2003A step motor sürücüdür. İlk olarak motorumuzu tanıyarak başlayalım.

28BYJ-48 Step Motor Nedir ve Özellikleri Nelerdir?

28BYJ48 Step Motor, 4 bobinli tek kutuplu bir düzenlemeye sahiptir ve her bobin +5V olarak derecelendirilmiştir, bu nedenle herhangi bir temel mikrodenetleyici ile kontrol edilmesi nispeten kolaydır.

28BYJ-48 Step Motor ve ULN2003A Motor Sürücü
28BYJ-48 Step Motor ve ULN2003A Motor Sürücü

28BYJ-48 Step Motor Özellikleri

  • Çlışma Gerilimi: 5V DC
  • Faz Sayısı: 4
  • Adım Açısı: 5,625°/64
  • Çekme torku: 300 gf.cm
  • Yalıtılmış Güç: 600VAC/1mA/1s
  • Bobin: Unipolar 5 kurşun bobin

28BYJ-48 Step Motor Pin Şeması

NoPin AdıKablo RengiAçıklama
1Bobin 1TuruncuBu Motorun toplam dört bobini vardır. Tüm bobinlerin bir ucu +5V (kırmızı) tele bağlanır ve her bir bobinin diğer ucu sırasıyla Turuncu, Pembe, Sarı ve Mavi tel renkleri olarak çekilir.
2Bobin 2Pembe
3Bobin 3Sarı
4Bobin 4Mavi
5+5VKırmızıBu kabloya +5V vermeliyiz, bu voltaj topraklanmış bobin boyunca görünecektir.
28BYJ48 Step Motor Pin Şeması

ULN2003A Step Motor Sürücü Nedir ve Özellikleri Nelerdir?

ULx200xA cihazları yüksek voltajlı, yüksek akımlıdır. Darlington transistör dizileri. Her biri, endüktif yükleri değiştirmek için ortak katot kıskaç diyotları ile yüksek voltaj çıkışlarına sahip yedi NPN Darlington çiftinden oluşur. Tek bir Darlington çiftinin kollektör akımı değeri 500 mA’dır. Darlington çiftleri, daha yüksek akım kapasitesi için paralel hale getirilebilir. Uygulamalar arasında röle sürücüleri, çekiç sürücüleri, lamba sürücüleri, ekran sürücüleri (LED ve gaz deşarjı), hat sürücüleri ve mantık tamponları bulunur. ULx2003A cihazlarının 100-V (aksi takdirde değiştirilebilir) sürümleri için, SN75468 ve SN75469 cihazlarının SLRS023 datasheetine bakın.

UlN2003A Step Motor Sürücü Pin Bağlantıları
UlN2003A Step Motor Sürücü Pin Bağlantıları

ULN2002A cihazı, özellikle 14-V ila 25-V PMOS cihazlarıyla kullanım için tasarlanmıştır. Bu cihazın her girişinde, giriş akımını güvenli bir sınıra kadar kontrol etmek için seri olarak bir Zener diyot ve direnç bulunur. ULx2003A cihazları, doğrudan TTL veya 5-V CMOS cihazlarıyla çalışmak üzere her Darlington çifti için 2,7 kΩ serisi bir taban direncine sahiptir.

ULN2003A Step Motor Sürücü Özellikleri

  • 500 mA Anma Kollektör Akımı (Tek Çıkışlı)
  • Yüksek Voltaj Çıkışları: 50 V
  • Çıkış Kelepçe Diyotları
  • Çeşitli Mantık Türleriyle Uyumlu Girişler
  • Röle-Sürücü Uygulamaları

ULN2003A Step Motor Sürücünün Kullanıldığı Yerler

  • Röle Sürücüleri
  • Step ve DC Fırçalı Motor Sürücüleri
  • Lamba Sürücüleri
  • Ekran Sürücüleri (LED ve Gaz Deşarjı)
  • Hat Sürücüleri
  • Mantık Tamponları

ULN2003A DataSheet

28BYJ-48 Step Motor Bağlantı Şeması

Aşağıdaki bağlantı şemamıza göre bağlantılarımızı yapalım ve kod kısmına geçelim.

Arduino İle 28BYJ-48 Step Motor Bağlantı Şeması
Arduino İle 28BYJ-48 Step Motor Bağlantı Şeması

28BYJ-48 Step Motor Sürme Kodu

Step motor sürmek için arduino içerisinde zaten bir kütüphane bulunmaktadır. İlk olarak biz bu kütüphaneyi kullanarak step motorumuzu süreceğiz. Daha sonra bu kodu biz kendimiz yazacağız ve kendimiz süreceğiz.

//Stepper.h kütüphanesini ekledik.
#include <Stepper.h>
// Bir tam turdaki adım sayısı belirlendi.
const int stepsPerRevolution = 2048;
// Wiring:
// Pin 8'i ULN2003 sürücüsünde IN1 ayağına bağlandı.
// Pin 9'u ULN2003 sürücüsünde IN2 ayağına bağlandı.
// Pin 10'u ULN2003 sürücüsünde IN3 ayağına bağlandı.
// Pin 11'i ULN2003 sürücüsünde IN4 ayağına bağlandı.
//'myStepper' adında bir stepper nesnesi oluşturuldu,pin numaraları belirlendi.
Stepper myStepper = Stepper(stepsPerRevolution, 8, 10, 9, 11);
void setup() {
//Hızı 20 rpm ayarlandı.:
myStepper.setSpeed(20);
Serial.begin(9600);
}
void loop() {
// Saat yönünde hareket:
Serial.println("Saat yönü");
myStepper.step(stepsPerRevolution);
delay(500);
 
// Saat yönünün tersi hareket:
Serial.println("Saat yönü tersi");
myStepper.step(-stepsPerRevolution);
delay(500);
}

Şimdi aynı işlevi yapacak kodu kendimiz yazalım. Bunu vermemin sebebi bazen kütüphneyi kullandığımızda düzgün çalışmayabiliyor. Bu yüzden siz böyle bir durumla karşılaşırsanız aşağıdaki kodu yazarak bu problemi çözebilirsiniz.

//-----------------Step Motor Global Kodları-------------------
const int motorPin1 = 8;
const int motorPin2 = 9;
const int motorPin3 = 10;
const int motorPin4 = 11;
const int birturadimsayisi = 540;
int bekleme =3;
//-------------------------------------------------------
void setup() {
  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);
  pinMode(motorPin3, OUTPUT);
  pinMode(motorPin4, OUTPUT);
}

void loop() {
// 100 adım ileri git
ileriadimat(100);
// 2 saniye bekle
delay(2000);
// 100 adım geri git
geriadimat(100);

}
void ileriadimat(int adim){
  for (int i = 0; i < adim ; i++){
    adim1();
    adim2();
    adim3();
    adim4();
  }
}
void geriadimat(int adim){
  for (int i = 0; i < adim ; i++){
    adim4();
    adim3();
    adim2();
    adim1();
  }
}
void adim1() {
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(bekleme);
}
void adim2() {
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(bekleme);
}
void adim3() {
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, LOW);
delay(bekleme);
}
void adim4() {
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, HIGH);
delay(bekleme);
}