13 Mart 2013 Çarşamba

Arduino ve L298 Motor Sürücü ile DC Motor Kontrolü

Hamza Öztaş Share:
Image Hosted by ImageShack.us

Merhaba arkadaşlar bu uygulama Arduino ve L298 motor sürücü ile basit bir şekilde dc motor kontrol etme mantığını anlatmaya çalışacağım. ilk olarak önemli olan L298 motor sürücünün pin diyagramını iyi bilmemiz gerekiyor.

L298 Motor Sürücü Pinleri;

  • Sense A//
  • Sense B//Bu iki pin  dirençle şaseye bağlanır.
  • Enable A//
  • Enable B//Bu iki pin entegre içindeki h körülerini aktif hale getirmek için kullanılır. Arduino ile iki motor sürüleceğimiz için bu pinler digital.write komutuyla HIGH yapılır.
  • Output 1//
  • Output 2// 1. Motorun bağlantı pinleri
  • Output 3//
  • Output 4// 2. Motorun bağlantı pini
  • İnput 1//
  • İnput 2//1.Motoru ileri ve geri hareket ettirmek için kullanılır.
  • İnput 3//
  • İnput 4//2.Motoru ileri ve geri hareket ettirmek için kullanılır.
  • GND //Sase
  • VSS// bu pin 100nF'lık bir kondasatörle saseye bağlanır
  • VS//+ beslem ucu.

Image Hosted by ImageShack.us
Yukarıdaki yazmış olduğum pinlerinden itibaren  başlıyorum, 
  • sense A ve B pinleri 100 ohm'luk bir dirençle şaseye bağlanır, 
  • output 1-2 pinleri 1. motorun positive ve negative uçlarına bağlanır.
  • output 2-3 pinleri 2. motorun positive ve negative uçlarına bağlanır.
  • GND ve VS pinleri Arduino üzerindeki GND ve +5V çıkışları üzerinden beslenir.
  • VSS pini 100 nF'kıl bir kondansatör ile şaseye bağlanır.
  • Arduino koduna geçmeden önce şunu söyleyeyim, iki motor süreceğimiz için kod içerisinde ENABLE A ve B pinleri digitalWrite komutuyla lojik 1 yapılır isterseniz bunu kod içerisinde yapmak istemezseniz harici olarak dışarıdan +5V ile besleyebilirsiniz.

İLERİ
  • ENABLE A_HIGH
  • ENABLE B_HIGH
  • INPUT 1_HIGH
  • INPUT 2_LOW
  • INPUT 3_HIGH
  • INPUT 4_LOW
GERİ
  • ENABLE A_HIGH
  • ENABLE B_HIGH
  • INPUT 1_LOW
  • INPUT 2_HIGH
  • INPUT 3_LOW
  • INPUT 4_HIGH
MOTOR BOŞTA

  • ENABLE A_LOW
  • ENABLE B_LOW

Örnek Basit Arduino Code;


//http://www.depositericrobotic.com/

int input1 = 3; // Arduino'nun 3. digital pinine bağlanmıştır.
int input2 = 4; // Arduino'nun 4. digital pinine bağlanmıştır.
int input3 = 5; // Arduino'nun 5. digital pinine bağlanmıştır.
int input4 = 6; // Arduino'nun 6. digital pinine bağlanmıştır.

void setup() 
{      
//Motorları sürmek için input pinleri çıkış olarak ayarlandı.  
pinMode(input1,OUTPUT);
pinMode(input2,OUTPUT);
pinMode(input3,OUTPUT);
pinMode(input4,OUTPUT);
}
void loop() 
{
  //MOtorlar İleri
  digitalWrite(input1,HIGH);
  digitalWrite(input2,LOW);  
  digitalWrite(input3,HIGH);
  digitalWrite(input4,LOW);  
  delay(1000);//1 saniye bekle
  
  //Motorlar Geri
  digitalWrite(input1,LOW);
  digitalWrite(input2,HIGH);  
  digitalWrite(input3,LOW);
  digitalWrite(input4,HIGH);  
  delay(1000);//1 saniye bekle
}

Yukarıdaki yazmış olduğum kod için motorlar sürekli 1 saniye arayla ileri ve geri hareketi yapmaktadır. Enable A ve B pinleri dışarıdan  +5V ile besleyerek yada kod içerisinde aktif hale getirilerek aktif hale getirilebilir. Basit bir araba yaptığımızı düşünürsek.

Farzedelimki, arkada iki dc motor önde bir sarhoş teker ile basit bir araba yapacaksanız. Arabanın ileri ve geri gitme mantığı, kodları aynı şekilde gerçekleşir fakat arabanın sağa ve sola dönüşünde her seferinde motorlardan birini pasif yapmanız gerekmektedir. Örneğin, arabayı sağa döndürmek istediğinizde sağ motor duracak ve sol motor çalışacak ve sağa dönmüş olacak sola döndürmek içinde bu işlemin tam tersi yapılır. Tabi sağa ve sola dönme işlemini yapmak için if koşulu gerekiyor, koşul olarak bunu  iki işlem için iki tane buton atayıp eğer sağ butona basılırsa sağa dön yada sol butona basılırsa sola dön gibi bir tek satırlık bir if koşulu yazılabilir, yada buton atama yerine daha önceki CNY 70 sesnor ve Arduino ile ilgili yazmış olduğum bir yazımda bahsettiğim gibi CNY 70 sensorlerin durumuna göre sağa ve sola dönme işlemi yapılabilir.


//Farzedelimki arkada iki motor ve önde bir sarhoş teker ile basit bir araba yapıyorsunuz.

  //Araç Sağa Dön
   if( koşul)
  digitalWrite(input1,HIGH);
  digitalWrite(input2,LOW);
  digitalWrite(input3,LOW);
  digitalWrite(input4,LOW);
  delay(1000);//1 saniye bekle

  //Araç Sola Dön
  if(koşul2)
  digitalWrite(input1,LOW);
  digitalWrite(input2,LOW);
  digitalWrite(input3,LOW);
  digitalWrite(input4,HIGH);
  delay(1000);//1 saniye bekle



Sağa yada sola keskin dönüş yapmak isterseniz belli bir süre için motorların birini ileri ve diğerini geri hareket yaptırmak gerekir. Tabi belli bir süre için,süre belirtmezseniz araç sürekli kendi ekseni etrafında döner.



Tarafından Yayınlandı >> Hamza Öztaş

Hamza Öztaş'ı google plus'ta takip etmek için Google'a tıklayın;
Google+.

0 yorum:

Get Updates in your Email
Complete the form below, and we'll send you our best of articles.

İletişim

© >> |
TOP