Robotik ve Kodlama

Arduino

Bluetooth Kontrollü Araç Yapımı

Lisans: Creative Commons 26.11.2020 tarihinde güncellendi
Bakabileceğiniz Etiketler: Eğitmen: Geleceği Yazanlar Ekibi

Daha önceki uygulamalarımızda Bluetooth üzerinden devremizi telefon veya Bluetooth özelliği bulunan cihazlarla nasıl kontrol edeceğimizi öğrenmiştik. DC motor kontrol etmeyi de öğrendiğimize göre Bluetooth üzerinden kontrol edilen bir araç yapabiliriz. Aracımız daha önce yaptığımız gibi 4 tekerlek ve DC motordan oluşmaktadır. Bir önceki uygulamamızdan farklı olarak uzaklık sensörü yerine Bluetooth modülü kullanacağız.

Robotun harekete geçmesi için Bluetooth modülünden veri gelmesi gerekiyor. Bu veri akıllı telefonlardan veya Bluetooth özelliği bulunan tablet ve bilgisayarlardan gelecek. Öncelikle Bluetooth modülüyle cihazlarımızı eşleştirmemiz gerekiyor. Bu konuyu hatırlamıyorsanız, tekrardan "Bluetooth ile Haberleşme" konusuna göz atmanızı öneririz.

  • Windows kullanıcıları Bluetooth ile haberleşmek için, ücretsiz olarak Tera Term programını indirebilirler.
  • Android kullanıcıları ise haberleşme için Bluetooth Terminal isimli ücretsiz uygulamayı kullanabilirler.

Bu uygulamayı yapmak için ihtiyacınız olan malzemeler;

  • 1 x Arduino
  • 4 x Tekerlek
  • 1 x Robot şasesi
  • 4 x DC motor
  • 1 x DC motor sürücüsü
  • 1 x HC-05 veya HC-06 Bluetooth modülü

Resimde gösterilen devre şemasının kablo bağlantıları aşağıdaki tablolarda gösterilmiştir:

Arduino Motor Sürücü
8 INPUT 1
9 INPUT 2
13 INPUT 3
12 INPUT 4
11 ENABLE A
10 ENABLE B

 

Motor Motor Sürücü
Motor1 + OUTPUT 1
Motor1 - OUTPUT 2
Motor2 + OUTPUT 3
Motor2 - OUTPUT 4

(Motorun + veya – ucunun hangisi olduğu farketmez)

Besleme Motor Sürücü
+12 Volt VCC
Toprak (- uç) GND
+5 Volt VS

 

Arduino Bluetooth Modülü
+3,3 Volt VCC
Tx Rx
Rx Tx
Toprak (- uç) GND

Devre kurulumunu gerçekleştirdikten sonra aşağıdaki kodu Arduino'ya yükleyelim. Arduino'ya Bluetooth üzerinden veri geldiğinde, gelen veri bir char değişkenine yazılır. Araç eğer bu veri 'w' ise ileriye, 'd' ise sağa, 'a' ise sola, 'x' ise geriye doğru gitmeye başlar. Eğer gelen veri 's' ise de araç durur. Yukarıda önerilen programlar yardımıyla bu karakterleri yollayarak aracınızı kontrol edebilirsiniz.

Not: Bluetooth üzerinden yollanan veri ile Arduino tarafından beklenen verinin tıpatıp aynı olması gerekmektedir. Yani yollanan veri 'a' ise, Arduino 'A' komutunu bekliyor ise büyük küçük harf farkından dolayı sistem çalışmayacaktır.

int DonmeHizi = 175;
/* bu değişken ile motorların dönme hızı kontrol edilebilir */

/* motor sürücüsüne bağlanacak INPUT ve ENABLE pinleri belirleniyor */
const int sagileri = 9;
const int saggeri = 8;
const int solileri = 12;
const int solgeri = 13;
const int solenable = 11;
const int sagenable = 10;

void ileri(int hiz){
  /* ilk değişkenimiz sag motorun ikincisi sol motorun hızını göstermektedir.
   * motorlarımızın hızı 0-255 arasında olmalıdır.
   * Fakat bazı motorların torkunun yetersizliğiniden 60-255 arasında çalışmaktadır.
   * Eğer motorunuzdan tiz bir ses çıkıyorsa hızını arttırmanız gerekmektedir.
   */
  analogWrite(sagenable, hiz); /* sağ motorun hız verisi */
  digitalWrite(sagileri,HIGH); /* ileri dönme sağlanıyor */
  digitalWrite(saggeri,LOW); /* ileri dönme sağlanıyor */

  analogWrite(solenable, hiz); /* sol motorun hız verisi */
  digitalWrite(solileri, HIGH); /* ileri dönme sağlanıyor */
  digitalWrite(solgeri,LOW); /* ileri dönme sağlanıyor */
}

void sagaDon(int hiz){
  analogWrite(sagenable, hiz); /* sağ motorun hız verisi */
  digitalWrite(sagileri,LOW); /* geri dönme sağlanıyor */
  digitalWrite(saggeri,HIGH); /* geri dönme sağlanıyor */

  analogWrite(solenable, hiz); /* sol motorun hız verisi */
  digitalWrite(solileri, HIGH); /* ileri dönme sağlanıyor */
  digitalWrite(solgeri,LOW); /* ileri dönme sağlanıyor */
}

void solaDon(int hiz){
  analogWrite(sagenable, hiz); /* sağ motorun hız verisi */
  digitalWrite(sagileri,HIGH); /* ileri dönme sağlanıyor */
  digitalWrite(saggeri,LOW); /* ileri dönme sağlanıyor */

  analogWrite(solenable, hiz); /* sol motorun hız verisi */
  digitalWrite(solileri, LOW); /* geri dönme sağlanıyor */
  digitalWrite(solgeri,HIGH); /* geri dönme sağlanıyor */
}

void geri(int hiz){
  analogWrite(sagenable, hiz); /* sağ motorun hız verisi */
  digitalWrite(sagileri,LOW); /* geri yönde dönme sağlanıyor */
  digitalWrite(saggeri, HIGH); /* geri yönde dönme sağlanıyor */

  analogWrite(solenable, hiz); /* sol motorun hız verisi */
  digitalWrite(solileri, LOW); /* geri yönde dönme sağlanıyor */
  digitalWrite(solgeri, HIGH); /* geri yönde dönme sağlanıyor */
}

void dur()
{
  /* Tüm motorlar kitlenerek durma sağlanıyor */
  digitalWrite(sagileri, HIGH);
  digitalWrite(saggeri, HIGH);
  digitalWrite(solileri, HIGH);
  digitalWrite(solgeri, HIGH);
}

void setup(){
  /* Bluetooth için port açılıyor */
  Serial.begin(9600);
  
  /* motorları kontrol eden pinler çıkış olarak ayarlanıyor */
  pinMode(sagileri,OUTPUT);
  pinMode(saggeri,OUTPUT);
  pinMode(solileri,OUTPUT);
  pinMode(solgeri,OUTPUT);
  pinMode(sagenable,OUTPUT);
  pinMode(solenable,OUTPUT);
}

void loop(){
  if (Serial.available() > 0) {   /*Bluetooth’tan veri bekliyoruz */
    char tus = (char)Serial.read();
    if( tus == 'w' )
      ileri(DonmeHizi);
    if( tus == 's' )
      dur();
    if( tus == 'a' )
      solaDon(DonmeHizi);
    if( tus == 'd' )
      sagaDon(DonmeHizi);
    if( tus == 'x' )
      geri(DonmeHizi);
  }
}