28 Mart 2024 Perşembe

Arduino ile araba yapmak

Bu yazıda arduino ile basit bir araba nasıl yapılırı işleyeceğiz. Araba aşama aşama kurulacak ve aşamalı bir şekilde ilerleteceğiz. 

Bu araba için hazır olan bir platform kullanacağız. Yukarıdaki fotoğrafta da görüldüğü gibi şeffaf plastiklerden oluşan bir gövde. Sarı-gri renkli olan 2 DC motor ve bunlara bağlı 2 tane tekerlek. Ön tarafta sarhoş tekerlek olarak bilinen sabit bir tekerlek mevcut.
Öncelikle çok basit mantık üzerinden bu arabayı anlayalım. Arabadaki 2 motora aynı anda güç verilince 2 motor da hareket eder ve araba ilerler. Motorların bağlantıları ve yönlerinin başlangıçta düzgün bir şekilde takıldığından emin olduğumuzu bilmek gerekir. Bunun için gerekirse deneme yanılma yapılır. 
2 motordan biri durup diğeri çalışıyorsa araba duran motor yönüne hareket eder. Bu mantık su üstündeki bir sandalda da geçerlidir. Hangi taraftaki küreği çekmeye bağlarsanız çekilmeyen kürek yönüne hareket eder.

Gelelim motorları çalıştırmaya; yukarıdaki motor DC Motor olarak bilinen 2 ucuna + ve - olarak 3-6 volt civarı güç verilerek çalışan bir motordur. Yukarıdaki resimden de anlaşılacağı üzere + ve - yönler motorun ucundaki pim'in dönme yönünü etkiliyor. Kırmızı renkle belirtilen şekilde bir uca + ve - verdiğimizde motor piminin kırmızı yönde döndüğünü, girişleri mavi renkle belirtildiği şekilde güçle beslediğimizde ise pimin kırmızıya ters olarak döndüğünü görüyoruz. Bu durum bu basit motorların çalışma prensibini anlatmaktadır. Bu şekilde ters yönde çalıştırmak motorlar vasıtasıyla tekerleklerin ileri ya da geri dönmesini sağlayacaktır.

Bu motorun bir ucunu Arduino'da 3 numara bir ucunu da 4 numaraya bağladığımızı düşünelim. + için HIGH, - için de LOW kullanmalıyız.
digitalWrite(3,HIGH);
digitalWrite(4,LOW);
komutlarıyla motora güç verdiğimizi düşünürsek motor belirli bir yönde döner. Bunun tam tersi yani;
digitalWrite(3,LOW);
digitalWrite(4,HIGH); 
komutlarını verirsek motor bir öncekinin ters yönünde hareket eder. Eğer motoru durdurmak istersek 2 uçta da LOW komutunu aşağıdaki gibi kullanmalıyız.
digitalWrite(3,LOW);
digitalWrite(4,HIGH); 

Fakat burada işler bu kadar da kolay olmuyor. Çünkü Arduino pinlerinden doğrudan motoru bağlayarak çalıştırmak istersek motorlar hareket etmez. Çünkü Arduino'nun verdiği elektrik gücü motorları çevirmeye yetmemektedir. Yani mantık doğru bile olsa uygulamada bu sorun yaratacaktır. Bu yüzden Arduino pinlerini önce güçlendirmek için bir elektronik karta bağlarız. Bu kartlara motor sürücü kartlar denir. Yukarıdaki fotoğrafta kırmızı renkli olan karttır. Bu kart 2 tane motoru kontrol edebilecek şekilde dizayn edilmiştir. Bu kartın adı L298N motor sürücü kartıdır.
Yukarıdaki şekilde motor sürücü kartı olan L298N kartının Arduino ile olan bağlantısı gösterilmiştir. Arduino'dan çıkan 4 uç 2 motoru simgeler. Bu 4 uç L298N kartındaki IN1,IN2,IN3,IN4 girişlerine bağlanır. Bu örnekte Arduinodaki 7 ve 6. çıkışlar bir motoru, 5 ve 4 nolu çıkışlar ise bir motoru simgeler. L298N kartının 1,2 girişleri şekildeki yukarıdaki motora bağlanan OUT1 ve OUT2 ile 3 ve 4 girişleri ise şekildeki aşağıda bulunan motora OUT3 ve OUT4 ile bağlantılıdır. Ayrıca karta dışarıdan 9 voltluk pil ile bir besleme yapılır ve bu besleme uçlarından şekilde yeşil ve kahverengi kablolar ile Arduino'ya aktarma yapılır. Yani Arduionun GND ucu ile L298N kartının - ucu birleşir. L298N üzerindeki 5 volt bağlantısı Arduino'nun Vin girişine bağlanarak Arduino'ya da çalışması için güç verilmiş olur. 

Yukarıdaki bağlantıyı yaptıktan sonra daha önce bahsettiğimiz gibi digitalWrite komutları ile motorlara enerji verilerek tekerleklerin dönmesi sağlanır ve arabayı ilk kez hareket ettirmiş oluruz. 

void setup() {
pinMode(4,OUTPUT);//1.motorun bir ucu
pinMode(5,OUTPUT);//1.motorun bir ucu
pinMode(6,OUTPUT);//2.motorun bir ucu
pinMode(7,OUTPUT);//2.motorun bir ucu
}

void loop() {
delay(1000); //ilk başladığında 1 saniye bekler
// 2motor da çalışır
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
delay(1000);
//ilk motor çalışmaz 2. motor çalışır
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
delay(1000);
//ikinci motor çalışmaz 1. motor çalışır
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
delay(1000);
}

Yukarıdaki kodlar ile bu hareket basit bir hareket olacak ve aşağıdaki videoda bu hareket gerçek görüntülerini izleyebilirsiniz. Önce 1 saniye ileri gider, sonra bir motor 1 saniye durur ve bir yöne hareket daha sonra diğer motor durur ve ilk olarak duran motor yeniden çalışır ve bu sefer ters yönde hareket eder.



Hiç yorum yok:

Yorum Gönder