Bu yazımızda bluetooth ile kontrol edilebilen 2 tekerlekli basit bir araç yapacağız.
Kullanılan malzemeler:
1) L298N motor sürücü
2) Arduino uno
3) HC-05 bluetooth modülü
4) 9V'luk pil yatağı veya pil(Ben 2 tane kullandım.)
5) Araba şasesi
6) 2 adet 6V 250 rpm DC motor ve tekerlek
Öncelikle motor sürücüyü neden kullanıyoruz ve L298N motor sürücü nedir bunlara değinelim. Kısaca Arduino'lar dc motorları sürmek için yeteri kadar akım sağlayamadığından motor sürücüleri tercih ediyoruz. Çünkü dc motorlar boştayken bile Arduino'nun bize sağlayabileceği akımlardan çok çok yüksek bir akım çekiyorken ağırlık uygulandığında bu çektiği akım daha da artmaktadır. Bunu şu şekilde açıklayabiliriz: Motorun dönen kısmına yük bindirirsek(sürtünmesi yüksek bir yerde aracı gezdirirsek veya en basit şekilde elimizle tutup dönmesini engellersek) momenti artar ve hızı azalma eğiliminde olur. Hız kaybına maruz kalan motor hızı korumak için şebekeden daha fazla akım çekmeye başlar. (Eğer uç gerilimini sabit kabul edersek)
Gelelim kartımızı incelemeye. Kartın üzerinde bulunan siyah uzun kısım bizim entegremizi ve soğutma ünitesini oluşturuyor. Kart aynı zamanda 3 tane güç kondaktörü, 2şer tane motorlara çıkış sağlayan kondaktörler ve 4 tane de erkek header barındırıyor. Erkek headerlar yani in 1, in 2, in 3, in 4 girişlerimiz motorlarımızın dönüş yönünü kontrol etmemize yarıyor. in 1 ve in 2 bir motor için in 3 ve in 4 diğer motor için kontrol sağlıyor. Aynı zamanda bu headerların yanında bulunan enable pinleri bizim hangi motoru kontrol edeceğimizi ayarlamamıza yardımcı oluyor fakat bu kartta bunların üstündeki kılıf ve metal aparat 5Vları bu pinlere vererek bizim ekstradan Arduino'ya bağlama zorunluluğumuzu ortadan kaldırıyor. Bu yazımızda motorları sadece 5V'da süreceğimizden enable pinlerini kullanmayacağınız ama siz motorun hızını ayarlamak istiyorsanız bu pinleri de Arduino'nun pwm çıkış veren pinlerine bağlamanız gerekmektedir. Kartın üzerindeki güç kondaktörlerine gelirsek; üzerinde +12V, +5V ve gnd kondaktörleri bulunmaktadır. +12V pinine 5V ve 35V arası besleme yapılabiliyor. Gnd ise pilin toprak hattına gitmektedir ve Arduino ile ortak toprak hattına sahip olmalıdır. 5 volt çıkışı da 5 volt gerektiğinde kullanılmaktadır.
Devre şeması
Püf noktalar:
- Motor sürücü ve Arduino aynı toprak hattına sahip olmalıdır.
- Motorları ters veya düz bağlamanız yönünü değiştirir. Motorları bağladıktan sonra hangi in pininin hangi motoru harekete geçirdiğini ve hangisinin ileri hangisinin geri döndürdüğünü kontrol etmeniz çok önemlidir.
- Bluetooth bağlantısında pratik olması için direnç kullanılmamıştır. Aslında bu çok da doğru bir uygulama değildir. Doğrusu direnç ile kullanımdır.
//L298N Bağlantısı
const int motorsagi = 5; // L298N'in IN1 Girişi
const int motorsagg = 6; // L298N'in IN2 Girişi
const int motorsoli = 9; // L298N'in IN3 Girişi
const int motorsolg = 10; // L298N'in IN4 Girişi
char state; //Bluetooth'tan gelen durum değişkeni
void setup() {
// Pinlerimizi belirleyelim
pinMode(motorsagi, OUTPUT);
pinMode(motorsagg, OUTPUT);
pinMode(motorsoli, OUTPUT);
pinMode(motorsolg, OUTPUT);
// 9600 baud hızında bir seri port açalım
Serial.begin(9600);
}
void loop() {
//Gelen veriyi 'state' değişkenine kaydet
if(Serial.available() > 0){
state = Serial.read();
}
/***********************İleri****************************/
//Gelen veri 'F' ise araba ileri gider.
if (state == 'F') {
digitalWrite(motorsagi, HIGH); digitalWrite(motorsagg, LOW);
digitalWrite(motorsoli, HIGH); digitalWrite(motorsolg, LOW);
}
/***************************Sol*****************************/
//Gelen veri 'L' ise araba sola gider.
else if (state == 'L') {
digitalWrite(motorsagi, HIGH); digitalWrite(motorsagg, LOW);
digitalWrite(motorsoli, LOW); digitalWrite(motorsolg, LOW);
}
/***************************Sağ*****************************/
//Gelen veri 'R' ise araba sağa gider
else if (state == 'R') {
digitalWrite(motorsagi, LOW); digitalWrite(motorsagg, LOW);
digitalWrite(motorsoli, HIGH); digitalWrite(motorsolg, LOW);
}
/***************************Geri*****************************/
//Gelen veri 'B' ise araba sağa gider
else if (state == 'B') {
digitalWrite(motorsagi, LOW); digitalWrite(motorsagg, HIGH);
digitalWrite(motorsoli, LOW); digitalWrite(motorsolg, HIGH); }
/************************Stop*****************************/
//Gelen veri 'S' ise arabayı durdur.
else if (Serial.available()== 0){
digitalWrite(motorsagi, LOW); digitalWrite(motorsagg, LOW);
digitalWrite(motorsoli, LOW); digitalWrite(motorsolg, LOW);
}
}



Yorumlar
Yorum Gönder