2 Ocak 2018 Salı

Bluetooth Kontrollü Araç Yapımı


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:
ArduinoMotor Sürücü
8INPUT 1
9INPUT 2
13INPUT 3
12INPUT 4
11ENABLE A
10ENABLE B

MotorMotor Sürücü
Motor1 +OUTPUT 1
Motor1 -OUTPUT 2
Motor2 +OUTPUT 3
Motor2 -OUTPUT 4
(Motorun + veya – ucunun hangisi olduğu farketmez)
BeslemeMotor Sürücü
+12 VoltVCC
Toprak (- uç)GND
+5 VoltVS

ArduinoBluetooth Modülü
+3,3 VoltVCC
TxRx
RxTx
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);
  }
}

Hiç yorum yok:

Yorum Gönder