Arduino ile BD135 – BD136 transistörlerini kullanarak DC Motor kontrolü

Çeşitli robot projelerinde kullanılan DC motorları Arduinoya doğrudan bağlayıp çalıştıramayız. Çünkü Arduinonun giriş-çıkış pinleri en fazla 50 miliAmper akım sağlayabilir. Bu akım değeri motorların çalışması için yeterli değildir. Bu yüzden Arduino ile Motor arasında bir Motor Sürücü kullanılması gerekir. Bu bilgiyi dikkate almayıp Arduinoya Motor Sürücü olmadan güçlü bir motor bağlayıp çalıştırırsak motor aşırı akım çekerek Arduinoya ve bilgisayarın USB portuna zarar verebilir.

Motor sürücüler motor için sağlanacak akımın ayrı bir güç kaynağından alınmasını ve Arduino ile motorun kontrol edilmesini sağlar. Motor kontrolü için Transistörler kulanılabildiği gibi L293D – L293B – L298N vb. Motor sürücü entegreleri de kullanılmaktadır. Hatta kullanım kolaylığı olması için Bu entegrelerle yapılmış hazır motor sürücü devre kartları da bulunmaktadır.

Bir motoru çalıştırıp – durdurmak gibi bir amacınız varsa 1 tane BD135 transistörü kullanmanız yeterli olacaktır.

Transistörün Arduino ve Motor bağlantısı için şekildeki gibi BD135’in Beyz ucu 1K’lık dirençle Arduinonun çıkış pinlerinden birine bağlanır. Transistörün kollektör ucuna DC Motor seri olarak bağlanır. Motorun diğer ucuna ise motoru çalıştıracağımız harici güç kaynağının (+) ucu bağlanır. Motor çalışması esnasında ters EMK(Elektro Motor Kuvvet) oluşmasından dolayı transistorün zarar görmemesi için Motora ters yönde paralel bir şekilde diyot bağlanarak oluşan ters EMK yok edilir, transistör korunur. Transistörün emiter bacağı ve motoru çalıştırmak için kullandığınız harici güç kaynağının (–) ucu Arduinonun GND pinine bağlanıp, toprak hatları birleştirilir.

BD135 transistörünün bacak bağlantıları şöyledir:

Arduino ile BD135 transistörü kullanarak 1 tane butona basıldığında motorun çalışmasını, butondan elinizi çektiğinizde motorun durmasını sağlayan bir uygulama yapalım.
Devre Şeması:

Arduino programı:

/* "BD135 ile Motor kontrolü." Arduinonun 12 nolu pinine bağlı butona 
    basılınca 11.pine bağlı motoru çalıştıran,buton bırakılınca
    motoru durduran program. (Buton pull-down dirençle bağlı)
    diyot.net */

const int butonPin = 12;   // buton bağlanan pini isimlendir.
const int motorPin =  11;   // motor bağlanan pini isimlendir.

int butonDurumu;  
// butona basılıp basılmadığını okuyup,kaydetmek için değişken tanımla. 

void setup() {
  
  pinMode(motorPin, OUTPUT);    // motor bağlanan pini çıkış olsun.
  
  pinMode(butonPin, INPUT);   // buton bağlanan pini giriş olsun.
}

void loop() {
 
  butonDurumu = digitalRead(butonPin);  
  // butona basılıp basılmağını oku,sonucu butonDurumu değişkenine kaydet.
  
  if (butonDurumu == HIGH) {    
    // butona basıldı mı? basıldıysa butonDurumu lojik1 olur.
    
     digitalWrite(motorPin, HIGH);   // butona basıldıysa motoru çalıştır.
  } 
  else {                             // basılmadıysa!
   
    digitalWrite(motorPin, LOW);     // motoru durdur.
  }
}

Arduino programında açıklama satırları ile hangi komut ile neyin yapıldığını yazıldı. Bu programı Arduinoya yükledikten sonra Bread Board üzerinde devreyi kurup çalıştırabilirsiniz.

Eğer Arduino ile bir motorun ileri – geri yönde dönmesi kontrol edilecekse; BD135 ve BD136 transistörlerinden ikişer tane kullanılarak şekildeki H köprüsü denilen devre elde edilir.

Bu devreye Arduinonun iki tane çıkış pini bağlanır.

  • Arduino çıkış pinlerinden herhangi bir bilgi gönderilmezse; motor boştadır, hareket etmez.
  • X pininden Lojik0(LOW), Y pininden Lojik1(HIGH) bilgisi gönderilirse; motor saat yönünde döner.
  • X pininden Lojik1(HIGH), Y pininden Lojik0(LOW) bilgisi gönderilirse; motor saat yönünün tersi yönde döner.
  • Arduino çıkış pinlerinin ikisinden de Lojik0(LOW) bilgisi veya ikisinden de Lojik1(HIGH) bilgisi gönderilirse; motor hareket halindeyse frenleme yapar ve durur.

Bu devrede transistörler anahtarlama elemanı olarak kullanılmıştır. Devrenin çalışmasını transistörleri anahtar şeklinde göstererek şöyle anlatabiliriz:

Birinci durumda Arduinonun çıkış pinlerinden hiçbir bilgi gelmezse; transistörlerin hepsi açık bir anahtar gibi davranır, motor boştadır, dönmez.

İkinci durumda X pininden Lojik 0, Y pininden Lojik 1 gönderilirse; Çapraz iki transistör kapalı bir anahtar gibi davranır, motor üzerinden akım geçer, saat yönünde döner.

Üçüncü durumda X pininden Lojik 1, Y pininden Lojik 0 bilgisi gönderilirse; diğer çapraz iki transistör kapalı bir anahtar gibi davranır, motor uçlarına uygulanan gerilimin yönü değişir, motor saat yönünün tersine doğru döner.

Dördüncü durumda ise Arduino çıkış pinlerinin ikisinden de Lojik 0, ya da ikisinden de Lojik 1 bilgisi gönderilirse; transistörler karşılıklı olarak kapalı bir anahtar gibi davranır, motor uçlarının ikisine de (+) veya ikisine de (-) geleceği için motor üzerinden akım geçmez ve motor frenleme yapar.

Bu “H köprüsü” devresini kullanarak Arduinoya bağlı 3 butondan birine basınca motorun ileri yönde dönmesini, diğerine basınca geri yönde dönmesini, 3. butona basınca da motorun frenleme yapmasını sağlayan bir uygulama yapalım.

Devre Şeması:

Arduino programı:

/* "BD135-BD136 H Köprüsü ile Motor kontrolü." 
    Arduino ile 3 buton kullanarak Motoru sağa-sola döndüren 
    ve frenleme yaptıran program.(Butonlar pull-down dirençle bağlı)
    diyot.net */

const int SOLbuton = 12;   // buton bağlanan pinleri isimlendir.
const int FRENbuton = 11;
const int SAGbuton = 10;

const int motorPin1 =  3;   // motor bağlanan pinleri isimlendir.
const int motorPin2 =  5;
// butonlara basılıp basılmadığını okuyup-kaydetmek için değişkenler tanımla.
int solDurum;   
int frenDurum;
int sagDurum;

void setup() {
  
  pinMode(motorPin1, OUTPUT); // motor bağlanan pinleri çıkış olarak ayarla.
  pinMode(motorPin2, OUTPUT);
  pinMode(SOLbuton, INPUT);   // buton bağlanan pinleri giriş olarak ayarla.
  pinMode(FRENbuton, INPUT);
  pinMode(SAGbuton, INPUT);
}

void loop() 
{ 
  // butona basılıp basılmağını okuyup sonucu değişkenlere kaydet.
  solDurum = digitalRead(SOLbuton);  
  frenDurum = digitalRead(FRENbuton);
  sagDurum = digitalRead(SAGbuton);
  
  if (solDurum == HIGH && frenDurum == LOW && sagDurum == LOW) {    
     // sol butona basıldı mı?
     // sol butona basıldıysa motoru sola doğru döndür.
     digitalWrite(motorPin1, LOW);   
     digitalWrite(motorPin2, HIGH);
  } 
  else if (solDurum == LOW && frenDurum == LOW && sagDurum == HIGH) 
  {  // sağ butona basıldı mı?
     // sağ butona basıldıysa motoru sağa doğru döndür.                     
     digitalWrite(motorPin1, HIGH);   
     digitalWrite(motorPin2, LOW);
  }
  else if (solDurum == LOW && frenDurum == HIGH && sagDurum == LOW) 
  {  // fren butonuna basıldı mı?
     // fren butonuna basıldıysa motor fren yapsın.                      
     digitalWrite(motorPin1, LOW);   
     digitalWrite(motorPin2, LOW);
  }
}

Arduino programında açıklama satırları ile hangi komut ile neyin yapıldığını yazıldı. Bu programı Arduinoya yükledikten sonra Bread Board üzerinde devreyi kurup çalıştırabilirsiniz.

YAZAR : Admin

Elektronik Mühendisi / E.Üni. Kalibrasyon Lab. Sorumlusu / Biyomedikal Kalibrasyon Laboratuvarı Sorumlu Müdürü (Sağ.Bak.) / X-Işınlı Görüntüleme Sistemleri Test Kontrol ve Kalibrasyon Uzmanı (Sağ.Bak.) / Ultrason-Doppler Sistemleri Test Kontrol ve Kalibrasyon Uzmanı (Sağ.Bak.) - Hatalı veya kaldırılmasını istediğiniz sayfaları diyot.net@gmail.com bildirin

BU YAZIYI DA İNCELEDİNİZ Mİ ?

Arduino ile Servo Motor Kontrolü

Arduino ile Potansiyometre ve LDR kullanarak Servo Motor Kontrolü Potansiyometre  kullanarak Servo Motor Kontrolü Arduinonun …

Bir cevap yazın