tb6612 Motor Sürücü ve Arduino ile DC Motor Kontrolü
Arduino atölyemizde bugün sizlerle tb6612 motor sürücü ve Arduino uno (nano) kartımızla çift DC motor kontrolünü anlatmaya çalışacağız. Özellikle yüksek hızlı çizgi izleyen veya yüksek rpm gerektiren projelerde kullanılan tb6612 günümüzde en çok kullanılan motor sürücülerinden biri olarak göze çarpıyor.
tb6612 Motor Sürücü ile Çift DC Motoru Dizginliyoruz
Öncelikle uygulamamızda kullanacağımız malzemeleri listeyelim.
- 1 adet Arduino Uno veya Nano
- 1 adet Pololu veya Sparkfun tb6612 Motor Sürücü
- 2 adet DC Motor (Tercihen 1500 Rpm)
- 1 Adet BreadBoard
- 9v Pil veya Lipo Pil
- Erkek Erkek ve Dişi Erkek kablolar
Öncelikle şunu belirtelim. Bu motor sürücü birçok üretici tarafından üretiliyor. Aslında tb6612 ‘yı bir entegre gibi düşünebilirsiniz. Farklı üreticilerden çıkmış kartlarla karşılaşabilirsiniz. Ancak günümüzde arduino projeleri için satılan bir çok motor sürücünün ya Pololu (yeşil) ya da Sparkfun (kırmızı) tarafından üretildiğini göreceksiniz. Bu nedenle biz de yazımızda iki firma için gerekli olan devre şemasını göstermeye çalışacağız. Bu iki farklı firmanın ürettiği tb6612 motor sürücünün elbetteki bazı bağlantı uçları farklı. Bunlara dikkat ederseniz programda herhangi bir değişiklik yapmanıza gerek kalmadan iki motoru çalıştırabilirsiniz.
tb6612 Motor Sürücü için Devre Şeması
Aşağıdaki resim 1′ de göstermeye çalıştık. Öncelikle kırmızı renk ile gösterilen sparkfun üretimidir. Bağlantıları aşağıda görüldüğü gibidir. Yeşil renkte gösterilen ise Pololu firmasının üretimi olan tb6612 motor sürücü olarak bilinir. TB6612 motor sürücüler 8 + 8 toplamda 16 uca sahiptir. Resme baktığınız zaman sadece Kırmızı renkli olanın bağlantılarını gösterdik. Ancak zaten dikkat ederseniz üst bölüm deki uçların isimleri ve dizilimleri hem yeşilde hem de kırmızı da aynıdır. Farklılık alt 8′ li pin grubundadır. Burada tek fark bu girişlerin dizilimleridir.
tb6612 Motor Sürücüyü Tanıyalım
Öncelikle uçları sizlere tanıtalım. PWMA ve PWMB girişleri sürülecek olan 2 motorun hızını (dönüş hızı) ayarlamak için kullanılan pindir. AIN1 ve AIN2 ile BIN1 ve BIN2 nin görevleri tam olarak şudur. Motorlar ileriye mi geriye mi hareket edecek? Bunu ayarlayabileceğiniz digital bilgi bu pinler aracılığı ile gönderilir. STBY motor sürücünün aslında çalışması için gerekli olan tetikleme işleminin gerçekleştirildiği pindir. Arabayı kullanmadan önce ne yaparız? Elbette ki anahtarla çalıştırırız. STBY ucundan digital 1 bilgisi ile motorlara güç vermeye hazırsınız.
Alt bölüme baktığımızda sparkfun ile pololu’ da bir farklılık görünüyor. Öncelikle sparkfun’ da bakacak olursak. VMOT ucu görünüyor. Pololu’ da VMOT ucunun sondaki GND’ nin hemen yanında olduğunu farkedersiniz. Peki nedir VMOT? VMOT motorların gücünün sağlandığı lipo ya da 9v’ lık pin bağlanacağı artı ucu ifade eder. Yani pilin artı ucunu doğrudan buraya bağlıyorsunuz. VCC ise her iki kart için aynı yerde olup, arduino uno ya da nano karttan 5v ile beslenen ucun takıldığı yerdir. Sparkfun’ da 3.sırada bir GND bulunuyor. Sonrasında A01 ve A02 ile B02 ve B01 uçlarını yan yana göreceksiniz. Bu uçlar ise doğrudan Motor 1 ve Motor 2 ‘nin uçlarına takılacak olan dört giriştir. (Motorları ters bağlarsanız ters yöne dönecektir.) Tüm bunlar haricinde bir de GND bağlantısı bulunuyor. Burada dikkat ederseniz bir kablo hem arduino’ ya bağlı hem pile hem de tb6612′ nin GND ucuna. Bu bağlantıları yapmışsanız artık kodlamaya geçebiliriz.
Aşağıdaki resim 2′ de sizlere sparkfun ile pololu tb6612′ yi karşılaştırmayı daha somut bir şekilde yapmaya çalıştık. Buradan da inceleyebilir ve devrenizi bu bilgileri referans alarak kurabilirsiniz.
DC Motorlarımızı Kontrol Etme Zamanı Geldi
Kodla ile aslında biz öncelikle sadece 2 motorumuzun yönünü ayarlayıp, sonrasında onu hareket ettirmeyi deneyeceğiz. Aşağıdaki kodları arduino uno ya da nano’ muza yükleyelim. Koddaki açıklama bloklarında aslında yeterince açıklama ekledim. Ancak yine de birkaç konudan bahsedelim. Öncelikle değişkenlerle tb6612′ deki pin bağlantılarını arduino’ ya tanımlıyoruz. Sonrasında setup metodunun içinde tüm bu uçları OUTPUT yani çıkış olarak tanımlıyoruz. Sonrasında aslında bir arabayı hareket ettirir gibi işlemleri ardı ardına gerçekleştiriyoruz.
Önce digitalWrite(STBY, HIGH); komutu ile arabayı çalıştırıyoruz. Sonrasında digitalWrite(AIN1, HIGH); komutu ile arabanın yönünü belirliyoruz. (Vites atmış gibi düşünün.) Son olarak da analogWrite(PWMA, 255); komutu ile motoru maksimum hızda sürüyoruz. Bu işlemleri ikinci motorumuz için de yapıyoruz. Yani aynı anda 2 motor’ da hareket ediyor. Sonrasında 2 saniye duruyor ve asıl döngü tekrar döndüğü için bu işlem hep tekrarlanıyor.
//motor 1 A01 ve A02 ye bağlanacaktır. //motor 2 B01 ve B02 ye bağlanacaktır. int STBY = 10; //standby (bekleme modu) //Motor 1 int PWMA = 3; // Hız kontrolü için PWMA değişkeni int AIN1 = 9; // Motor 1 Yön int AIN2 = 8; // Motor 1 Yön (Ters) //Motor 2 int PWMB = 5; // Hız kontrolü için PWMB değişkeni int BIN1 = 11; // Motor 2 Yön int BIN2 = 12; // Motor 2 Yön (Ters) void setup(){ pinMode(STBY, OUTPUT); // standby pini çıkış modunda tanımladık. pinMode(PWMA, OUTPUT); // pwma pinini hız kontrolü için ayarladık pinMode(AIN1, OUTPUT); // motor yönünü belirlemek için ain1 pini çıkış olarak ayarladık. pinMode(AIN2, OUTPUT); // motor yönünü (ters) belirlemek için ain2 pini çıkış olarak ayarladık. pinMode(PWMB, OUTPUT); // pwma pinini hız kontrolü için ayarladık pinMode(BIN1, OUTPUT); // motor yönünü belirlemek için bin1 pini çıkış olarak ayarladık. pinMode(BIN2, OUTPUT); // motor yönünü (ters) belirlemek için bin2 pini çıkış olarak ayarladık. } void loop(){ digitalWrite(STBY, HIGH); // Motora güç veriyoruz...Yani standby'dan çıkartıyoruz. digitalWrite(AIN1, HIGH); // Motor 1' in yönünü ileri olarak aktifleştir digitalWrite(AIN2, LOW); // Motor 1' in ters hareketini pasifleştir. analogWrite(PWMA, 255); // Motoru XXX(0-255 arasında) değeri ile döndür... digitalWrite(BIN1, HIGH); // Motor 1' in yönünü ileri olarak aktifleştir digitalWrite(BIN2, LOW); // Motor 1' in ters hareketini pasifleştir. analogWrite(PWMB, 255); // Motoru XXX(0-255 arasında) değeri ile döndür... delay(5000); // 5 sn motor dönecek. digitalWrite(STBY, LOW); // Motoru durduyoruz. delay(2000); // 2 sn motor duracak. }
Burada PWMA ve PWMB çıkışları için 255 değeri aslında motorunuz gerekli gücün sağlanması durumunda maksimum rpm değerinin verildiği yer. Yani bu değer 255 ise ve kullandığınız motor 1500 rpm ise dakikada bu motorun 1500 kez dönebileceği ifade edilmiştir.
Yukarıda breadboard üzerinde oluşturduğum devre görüntüsünü verdim. tb6612 motor sürücü ve arduino ile dc motorları kontrol etmeyi bu yazımızda inceledik. Sonraki arduino yazılarımızda tekrar görüşmek dileğiyle.
Not: tb6612 Motor Sürücü ve Arduino ile DC Motor Kontrolü isimli makale içerisindeki anlatımlar özgün içeriktir. Alıntı yapmadan kullanı[email protected]