Arduino ile Bluetooth kontrollü araç yapımı

Merhaba,
Arduino ile Bluetooth kontrollü bir araç topladım. (Ekteki resimde gözüktüğü gibi). Aşağıdaki linkten de kodları Arduino ya yükledim fakat arabanın ön ve arka farlarını LED olarak takmak istiyorum. Birde arabanın kontrolünü telefondaki uygulamadan yaparken ileri tuşuna bastığımda önüne bir engel çıkınca 10cm de (belli bir mesafede) mesafe sensörü kullanarak durmasını istiyorum.
Bu konuda yardımcı olabilir misiniz?


Merhaba,
Gerekli kodları yazdım. Sitedeki bağlantılar tamamen aynı sadece bi kaç eklenti yapıcağız. HC-SR04; trigPin= arduinonun 3.pinine, echoPin= arduinonun 4.pinine Vcc=5V, GND=GND’ye bağlıyoruz. Ön ve arka far bağlantısı için; ön farın artısını arduinonun 7.pinine, arka farın artısını arduinonun 2.pinine bağlayın ve eksileri de GND ye bağlayın.
NOT= Farların(LEDlerin) artısıyla arduino arasına 330 ohm civarında direnç bağlamayı unutmayın.

KODLAR:

//HC-SR04 Bağlantısı
int trigPin=3;
int echoPin=4;
//Far Bağlantısı
int onFar=7;   //Ön far pini
int arkaFar=2; //Arka far pini
//L298N Bağlantısı   
  const int motorA1  = 5;  // L298N'in IN3 Girişi
  const int motorA2  = 6;  // L298N'in IN1 Girişi
  const int motorB1  = 10; // L298N'in IN2 Girişi
  const int motorB2  = 9;  // L298N'in IN4 Girişi


  int i=0; //Döngüler için atanan rastgele bir değişken
  int j=0; //Döngüler için atanan rastgele bir değişken
  int state; //Bluetooth cihazından gelecek sinyalin değişkeni
  int vSpeed=255;     // Standart Hız, 0-255 arası bir değer alabilir

void setup() {
    // Pinlerimizi belirleyelim
    pinMode(motorA1, OUTPUT);
    pinMode(motorA2, OUTPUT);
    pinMode(motorB1, OUTPUT);
    pinMode(motorB2, OUTPUT);    
    // 9600 baud hızında bir seri port açalım
    Serial.begin(9600);
    pinMode(trigPin, OUTPUT);
    pinMode(echoPin, INPUT);
}
 
void loop() {
  //Mesafe Ölçme Ayarları
  int sure, mesafe;
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  sure = pulseIn(echoPin, HIGH);
  mesafe = (sure/2) / 29.1;
  /*Bluetooth bağlantısı koptuğunda veya kesildiğinde arabayı durdur.
 (Aktif etmek için alt satırın "//" larını kaldırın.)*/
//     if(digitalRead(BTState)==LOW) { state='S'; }

  //Gelen veriyi 'state' değişkenine kaydet
    if(Serial.available() > 0){     
      state = Serial.read();   
    }
  
  /* Uygulamadan ayarlanabilen 4 hız seviyesi.(Değerler 0-255 arasında olmalı)*/
    if (state == '0'){
      vSpeed=0;}
    else if (state == '1'){
      vSpeed=100;}
    else if (state == '2'){
      vSpeed=180;}
    else if (state == '3'){
      vSpeed=200;}
    else if (state == '4'){
      vSpeed=255;}
     
  /***********************İleri****************************/
  //Gelen veri 'F' ise araba ileri gider.
    if (state == 'F') {
      if (mesafe >10){  //mesafe 10dan büyük ise
      analogWrite(motorA1, vSpeed); analogWrite(motorA2, 0);
        analogWrite(motorB1, vSpeed);      analogWrite(motorB2, 0); 
        digitalWrite(onFar, HIGH);
    }
 }
  /**********************İleri Sol************************/
  //Gelen veri 'G' ise araba ileri sol(çapraz) gider.
    else if (state == 'G') {
      if (mesafe >10){  //mesafe 10dan büyük ise
      analogWrite(motorA1,vSpeed ); analogWrite(motorA2, 0);  
        analogWrite(motorB1, 100);    analogWrite(motorB2, 0);
digitalWrite(onFar, HIGH);
    }
  }
  /**********************İleri Sağ************************/
  //Gelen veri 'I' ise araba ileri sağ(çapraz) gider.
    
    else if (state == 'I') {
      if (mesafe >10){  //mesafe 10dan büyük ise
        analogWrite(motorA1, 100); analogWrite(motorA2, 0); 
        analogWrite(motorB1, vSpeed);      analogWrite(motorB2, 0); 
        digitalWrite(onFar, HIGH);
    }
 }
  /***********************Geri****************************/
  //Gelen veri 'B' ise araba geri gider.
    else if (state == 'B') {
      analogWrite(motorA1, 0);   analogWrite(motorA2, vSpeed); 
        analogWrite(motorB1, 0);   analogWrite(motorB2, vSpeed); 
    }
  /**********************Geri Sol************************/
  //Gelen veri 'H' ise araba geri sol(çapraz) gider
    else if (state == 'H') {
      analogWrite(motorA1, 0);   analogWrite(motorA2, 100); 
        analogWrite(motorB1, 0); analogWrite(motorB2, vSpeed); 
        digitalWrite(arkaFar, HIGH);
    }
  /**********************Geri Sağ************************/
  //Gelen veri 'J' ise araba geri sağ(çapraz) gider
    else if (state == 'J') {
      analogWrite(motorA1, 0);   analogWrite(motorA2, vSpeed); 
        analogWrite(motorB1, 0);   analogWrite(motorB2, 100); 
         digitalWrite(arkaFar, HIGH);
    }
  /***************************Sol*****************************/
  //Gelen veri 'L' ise araba sola gider.
    else if (state == 'L') {
      analogWrite(motorA1, vSpeed);   analogWrite(motorA2, 150); 
        analogWrite(motorB1, 0); analogWrite(motorB2, 0); 
    }
  /***************************Sağ*****************************/
  //Gelen veri 'R' ise araba sağa gider
    else if (state == 'R') {
      analogWrite(motorA1, 0);   analogWrite(motorA2, 0); 
        analogWrite(motorB1, vSpeed);   analogWrite(motorB2, 150);     
    }
  
  /************************Stop*****************************/
  //Gelen veri 'S' ise arabayı durdur.
    else if (state == 'S'){
        analogWrite(motorA1, 0);  analogWrite(motorA2, 0); 
        analogWrite(motorB1, 0);  analogWrite(motorB2, 0);
         digitalWrite(onFar, LOW);
         digitalWrite(arkaFar, LOW);
    }  
}

Kolay gelsin. :slightly_smiling_face:

Yardımlarınız için teşekkür ederim.
Verdiğiniz kodları arduino kartına yükledim. Fakat telefondaki uygulamadan ileri tuşuna basınca ön led yanıyor. Geri tuşuna basınca da arka led lamba yanıyor. Benim istediğim ekteki resimde telefondaki uygulamadan sarı daire içerinde göstermiş olduğum ön far tuşuna bastığımda ön ledin yamasını, arka far tuşuna bastığımda arka ledin yanmasını istiyorum. Arabayı uygulamanın ileri tuşuna basılı iken araba ilerlerken bir cisme yaklaştığında belli bir mesafede kendiliğinden durmasını istiyorum. Şu anda ise uygulamanın ileri tuşuna basılı tuttuğumda önüne bir cisim çıkınca araba durmuyor ve cisme çarpıyor. Araba duruyorken önünde mesafe sensörünün alğıladığı mesafede cisim varsa eğer uygulamadan ileri tuşa bastığımda araba ilerlemiyor bu kısım istediğim gibi olmuş. Fakat ilerleme esnasında ileri tuşuna baslı iken de önüne bir cisim çıktığında cisme çarpmadan belli bir mesafe (5cm) kala durmasını istiyorum. Uygulamanın üçgen şekildeki tuşuna (ekteki resimde kırmızı daire içerisindeki tuşa) bastığımda da ön ve arka ledlerin aynı anda yanıp sönmesini istiyorum. Birde korna olarak da buzzer eklemek istiyorum. Uygulamanın korna tuşuna (yeşil daire içerisindeki tuş) basınca ses çıkartmasını istiyorum. İstemiş olduğum kod ve bağlantılar konusunda yardımcı olabilir misiniz?

Merhaba,
Uygulamadaki hangi düğmelere basınca seri monitörden hangi harfler geliyor söyleyebilir misiniz? :upside_down_face:

Seri monitör diye kastettiğiniz Arduino uygulamasının araçlar sekmesinin altındaki “Seri Port Ekranı” açtım arduino kartınıda bilgisaytara bağladım, uygulamayı Bluotooth ile bağlantıyıda sağladım. Usb ye bağlı olan portu da seçtim. Telefondaki uygulamadan daire içerisine almış olduğum ön far, arka far korna ve üçgen tuşlarının hepsine batım fakat açmış olduğum arduino araçlar sekmesi altındaki Seri Port Ekranında hiç bir şey çıkmadı.

Tamamdır. Uygulamada zaten harfler yazıyormuş oradan aldım :upside_down_face: . Bağlantılar falan hepsi yine aynı sadece buzzer takmamıştık onunda artısını 8. pine, eksisinide arduinonun GND’sine bağlayabilirsin. Kodu incelemeni öneririm mantığını az çok anlarsın :blush: .
KODLARRRRR;

//HC-SR04 Bağlantısı
int trigPin=3;
int echoPin=4;
//Korna - buzzer Bağlantısı
int korna=8;
//Far Bağlantısı
int onFar=7;   //Ön far pini
int arkaFar=2; //Arka far pini
//L298N Bağlantısı   
  const int motorA1  = 5;  // L298N'in IN3 Girişi
  const int motorA2  = 6;  // L298N'in IN1 Girişi
  const int motorB1  = 10; // L298N'in IN2 Girişi
  const int motorB2  = 9;  // L298N'in IN4 Girişi


  int i=0; //Döngüler için atanan rastgele bir değişken
  int j=0; //Döngüler için atanan rastgele bir değişken
  int state; //Bluetooth cihazından gelecek sinyalin değişkeni
  int vSpeed=255;     // Standart Hız, 0-255 arası bir değer alabilir

void setup() {
    // Pinlerimizi belirleyelim
    pinMode(motorA1, OUTPUT);
    pinMode(motorA2, OUTPUT);
    pinMode(motorB1, OUTPUT);
    pinMode(motorB2, OUTPUT);    
    // 9600 baud hızında bir seri port açalım
    Serial.begin(9600);
    pinMode(trigPin, OUTPUT);
    pinMode(echoPin, INPUT);
}
 
void loop() {
  //Mesafe Ölçme Ayarları
  int sure, mesafe;
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  sure = pulseIn(echoPin, HIGH);
  mesafe = (sure/2) / 29.1;
  /*Bluetooth bağlantısı koptuğunda veya kesildiğinde arabayı durdur.
 (Aktif etmek için alt satırın "//" larını kaldırın.)*/
//     if(digitalRead(BTState)==LOW) { state='S'; }

  //Gelen veriyi 'state' değişkenine kaydet
    if(Serial.available() > 0){     
      state = Serial.read();   
    }
  
  /* Uygulamadan ayarlanabilen 4 hız seviyesi.(Değerler 0-255 arasında olmalı)*/
    if (state == '0'){
      vSpeed=0;}
    else if (state == '1'){
      vSpeed=100;}
    else if (state == '2'){
      vSpeed=180;}
    else if (state == '3'){
      vSpeed=200;}
    else if (state == '4'){
      vSpeed=255;}
 if (mesafe >=10){  //mesafe 10dan büyük ise    
  /***********************İleri****************************/
  //Gelen veri 'F' ise araba ileri gider.
    if (state == 'F') {
      analogWrite(motorA1, vSpeed); analogWrite(motorA2, 0);
        analogWrite(motorB1, vSpeed);      analogWrite(motorB2, 0); 
    }
  /**********************İleri Sol************************/
  //Gelen veri 'G' ise araba ileri sol(çapraz) gider.
    else if (state == 'G') {
        analogWrite(motorA1,vSpeed ); analogWrite(motorA2, 0);  
        analogWrite(motorB1, 100);    analogWrite(motorB2, 0);
    }
  /**********************İleri Sağ************************/
  //Gelen veri 'I' ise araba ileri sağ(çapraz) gider.    
    else if (state == 'I') {
        analogWrite(motorA1, 100); analogWrite(motorA2, 0); 
        analogWrite(motorB1, vSpeed);      analogWrite(motorB2, 0); 
    }

 }
 if (mesafe <10){  //mesafe 10dan küçük ise
  analogWrite(motorA1, 0);  analogWrite(motorA2, 0); 
  analogWrite(motorB1, 0);  analogWrite(motorB2, 0);  //Hele Bi Dur Başta
  delay(200); //Heh Şimdi Devam Edebilirsin
  /***********************Geri****************************/
  //Gelen veri 'B' ise araba geri gider.
      if (state == 'B') {
      analogWrite(motorA1, 0);   analogWrite(motorA2, vSpeed); 
        analogWrite(motorB1, 0);   analogWrite(motorB2, vSpeed); 
    }
  /**********************Geri Sol************************/
  //Gelen veri 'H' ise araba geri sol(çapraz) gider
    else if (state == 'H') {
      analogWrite(motorA1, 0);   analogWrite(motorA2, 100); 
        analogWrite(motorB1, 0); analogWrite(motorB2, vSpeed); 
    }
  /**********************Geri Sağ************************/
  //Gelen veri 'J' ise araba geri sağ(çapraz) gider
    else if (state == 'J') {
      analogWrite(motorA1, 0);   analogWrite(motorA2, vSpeed); 
        analogWrite(motorB1, 0);   analogWrite(motorB2, 100); 
    }
  /***************************Sol*****************************/
  //Gelen veri 'L' ise araba sola gider.
    else if (state == 'L') {
      analogWrite(motorA1, vSpeed);   analogWrite(motorA2, 150); 
        analogWrite(motorB1, 0); analogWrite(motorB2, 0); 
    }
  /***************************Sağ*****************************/
  //Gelen veri 'R' ise araba sağa gider
    else if (state == 'R') {
      analogWrite(motorA1, 0);   analogWrite(motorA2, 0); 
        analogWrite(motorB1, vSpeed);   analogWrite(motorB2, 150);     
    }

 }


   /***********************Geri****************************/
  //Gelen veri 'B' ise araba geri gider.
    else if (state == 'B') {
      analogWrite(motorA1, 0);   analogWrite(motorA2, vSpeed); 
        analogWrite(motorB1, 0);   analogWrite(motorB2, vSpeed); 
    }
  /**********************Geri Sol************************/
  //Gelen veri 'H' ise araba geri sol(çapraz) gider
    else if (state == 'H') {
      analogWrite(motorA1, 0);   analogWrite(motorA2, 100); 
        analogWrite(motorB1, 0); analogWrite(motorB2, vSpeed); 
    }
  /**********************Geri Sağ************************/
  //Gelen veri 'J' ise araba geri sağ(çapraz) gider
    else if (state == 'J') {
      analogWrite(motorA1, 0);   analogWrite(motorA2, vSpeed); 
        analogWrite(motorB1, 0);   analogWrite(motorB2, 100); 
    }
  /***************************Sol*****************************/
  //Gelen veri 'L' ise araba sola gider.
    else if (state == 'L') {
      analogWrite(motorA1, vSpeed);   analogWrite(motorA2, 150); 
        analogWrite(motorB1, 0); analogWrite(motorB2, 0); 
    }
  /***************************Sağ*****************************/
  //Gelen veri 'R' ise araba sağa gider
    else if (state == 'R') {
      analogWrite(motorA1, 0);   analogWrite(motorA2, 0); 
        analogWrite(motorB1, vSpeed);   analogWrite(motorB2, 150);     
    }
  /***************************On FAR YAN*****************************/
  //Gelen veri 'W' ise On Far Yanar.
     else if (state == 'W') { 
     digitalWrite(onFar, HIGH);
     }
  /***************************On FAR SON*****************************/
  //Gelen veri 'w' ise On Far SONER.
     else if (state == 'w') { 
     digitalWrite(onFar, LOW);
     }   
     /***************************Arka FAR YAN*****************************/
  //Gelen veri 'U' ise On Far SONER.
     else if (state == 'U') { 
     digitalWrite(arkaFar, HIGH);
     }   
     /***************************Arka FAR SON*****************************/
  //Gelen veri 'u' ise On Far SONER.
     else if (state == 'u') { 
     digitalWrite(arkaFar, LOW);
     }
     /***************************Dörtlü Yak*****************************/
  //Gelen veri 'X' Dörtü Yak.
     else if (state == 'X') { 
     digitalWrite(onFar, HIGH);
     digitalWrite(arkaFar, HIGH);
     delay(500);
     digitalWrite(onFar, LOW);
     digitalWrite(arkaFar, LOW);
     }   
     /***************************Dörtlü Sön*****************************/
  //Gelen veri 'x' ise Dörlü Sön
     else if (state == 'x') { 
     digitalWrite(onFar, LOW);
     digitalWrite(arkaFar, LOW);
     }      
      /***************************Korna Çal*****************************/
  //Gelen veri 'V' Korna Çal.
     else if (state == 'V') { 
     digitalWrite(korna, HIGH);
     }   
     /***************************Korna Çalma*****************************/
  //Gelen veri 'v' ise Korna Çalma
     else if (state == 'v') { 
     digitalWrite(korna, LOW);
     }   
  /************************Stop*****************************/
  //Gelen veri 'S' ise arabayı durdur.
    else if (state == 'S'){
        analogWrite(motorA1, 0);  analogWrite(motorA2, 0); 
        analogWrite(motorB1, 0);  analogWrite(motorB2, 0);
    }  
    
}

Kolay gelsin :smiley: .

2 Beğeni

Merhaba, ben de aracın ileri ve geri tuşlarını kademeli artırılabilir türden yapmak istiyorum. Yani çubuğu az it ince yavaş, çok itince hızlı gidecek. Fakat gerekli ekipman, bağlantı ve kod konusunu çözemedim malesef

Merhaba
Verdiğiniz kodlar için teşekkür ederim.
Bir kaç isteğim olacak
1- Mesafe sensörü belli bir mesafede arabayı durduruyor. ileri tuşuna bassamda gitmiyor. Burası olmuş. Fakat geri tuşa bastığımda arabanın tekrar hareket ederek geri gitmesini istiyorum. önündeki engeli kaldırdığım zaman gidiyor. ben arabaya hiç dokunmadan uygulamadaki geri tuşuna bastığımda geri gitmesini istiyorum.
2-Korna tuşuna basınca ses çıkmıyor korna çalmıyor.
3-Dörtlü üçgen tuşa bastığımda ön ve arka farlar sadece bir defa değil sürekli yanıp sönsün istiyorum. 0,3sn yansın 0,3sn sönsün.
Yardımlarınız için teşekkür ederim.
İyi günler. :slight_smile:

Merhaba,
Soruların sırasına göre cevaplıyayım :slightly_smiling_face: .
1- Kodda küçük bir hatta yapmışım ondan kaynaklandığını düşünüyorum onu düzelttim tekrar aynı yerden kopyalayabilirsiniz.
2- Buzzeriniz direk sadece 5 volt verildiğinde ses veren tipte olması gerekiyor. Eğer o tipteyse ya bağlantılarda ya da uygulamada sıkıntı vardır.
3- Onun için yapabileceğim bir şey olduğunu zanettmiyorum. Çünkü kodlara bakarsan sende bir hatta bulamazsın. Zaten hiç bir kaynakta ne korna ne de dörtlü kullanılmış. Uygulamadan kaynaklandığını tahmin ediyorum.
Maalesef 2. ve 3. sorularda yapabileceğim bir şey yok. Projende başarılar dilerim :smiley: .

Merhaba,
Birinci soruda sorduğum sorun aynen devam ediyor. Tekrar aynı yerden kopyalayabilirsiniz demiştiniz üst taraftaki kodları yükledim fakat sorun çözülmedi.
Mesafe sensörü arabanın önüne engel çıktığında arabayı durduruyor. Fakat uygulama dan geri tuşuna bastığımda arabanın geri gitmesini istiyorum geri gitmiyor.
Bu konuda yardımcı olursanız çok memnun olurum.
:slight_smile:

Kodda küçük bir hatta daha vardı onu düzelttim :sweat_smile:. Geri if kısmında motorları tanıtmayı unutmuşum. Kusura bakmayın böyle işler deneme yanılma yoluyla oluyor.

Tüm kodları en son hali ile en alta tekrar kopyalayabilir misiniz? Hangisini düzeltiniz karıştırıyorum. :slight_smile:
İyi akşamlar.

Çaycı hüseyinin olduğu kodları düzeltiyorum ben ordan kopyalayabilirsinz. :slightly_smiling_face:

Merhaba, Video yükleye bileceğim bir yer var mı? Kodları arabaya yükledim. Fakat araba önüne engel çıktığında mesafe sensörü sayesinde duruyor geri tuşuna basınca geri gitmiyor bunu göstermek için çekmiş olduğum video kaydını göndermek istiyorum. :slight_smile:

Mesafe sensörünün önüne engel çıktığında " if (mesafe <10){ //mesafe 10dan küçük ise
analogWrite(motorA1, 0); analogWrite(motorA2, vSpeed);
analogWrite(motorB1, 0); analogWrite(motorB2, 100);"

üsteki kodları kaydederek durması yerine geri sol çapraz gitmesini ayarladım. Bu şekilde arabanın önüne engel çıksa da durmuyor geri gidiyor uygulamanın ileri tuşuna ve geri tuşuna bastığımda hepside çalışıyor. İstediğim mi kendi kendime çözmüş oldum. Destek ve yardımlarınız için teşekkür ederim. Sıradaki yapmak istediğim. Uygulamadaki üçgen tuşa (dötlüleri yakma tuşuna) basınca ön ve arka farların bir kere değil sürekli (0,3sn yanıp 0,3sn sönmesi) yanıp sönmesini tekrar bastığımda tamamen sönmesini istiyorum.