Proje Adı: Bluetooth Kontrollü Hibrit "Uçan Araba" Simülasyonu

 (Uçan Araba Arduino Tübitak 4006 - Bluetooth Kontrol)

Projenin Amacı

Bu proje, geleceğin ulaşım teknolojilerinden biri olan uçan arabaların temel çalışma mantığını modellemek amacıyla geliştirilmiştir. Hem karada hareket edebilen hem de üzerindeki yüksek devirli coreless motorlar sayesinde dikey kuvvet (itki) oluşturabilen bir prototipin, mobil cihazlar üzerinden kontrol edilmesini hedefler.

Kullanılan Donanım Bileşenleri

Kontrolcü:
Arduino UNO (Sistemin beyni)

Haberleşme: HC-05 Bluetooth Modülü (Kablosuz kontrol için)

Motor Sürücü: L298N Çift Kanallı Motor Sürücü (Tekerleklerin ileri-geri hareketi için)

Ana İtki Sistemi: 4 adet Coreless Motor (Hafif ve yüksek devirli motorlar)

Güç Kontrolü: MOSFET Modülü
(Pervanelerin yüksek akım ihtiyacını güvenli bir şekilde anahtarlamak için)

Güç Kaynağı: Tekerlekler için 2 adet AA pil; Arduino ve pervaneler için 4 adet AAA pil bloğu. 
            Ek olarak Arduino devre kartının çalışması için 9V pil.

Sistemin Çalışma Prensibi

Proje, iki temel mekanizmanın entegrasyonuyla çalışır:

  1. Sürüş Sistemi: L298N sürücüsüne bağlı DC motorlar, aracın ileri, geri, sağ ve sol manevralarını yapmasını sağlar. Kod yapısında vSpeed değişkeni ile aracın hızı 4 farklı kademede (100, 150, 200, 255 PWM) ayarlanabilmektedir.

  2. Uçuş/İtki Sistemi: Aracın üst kısmında bulunan 4 adet pervane, bir MOSFET üzerinden kontrol edilir. Arduino'nun 7. pininden gelen sinyal ile bu pervaneler aynı anda devreye girerek araca hafiflik kazandırır veya kalkış simülasyonu yapar.

  3. Yazılım Kontrolü: SoftwareSerial kütüphanesi kullanılarak Bluetooth üzerinden gelen veriler anlık olarak işlenir. Örneğin; 'F' komutu aracı ileri sürerken, 'T' komutu pervaneleri çalıştırır.

Öne Çıkan Teknik Özellikler

  • Güvenli Başlatma: Kod yapısında pervaneler başlangıçta HIGH (çalışır) durumuna getirilerek sistemin hazır olduğu belirtilmiştir.

  • Acil Durdurma: stopRobot() fonksiyonu (S komutu), sadece tekerlekleri durdurmakla kalmaz, aynı zamanda güvenlik amacıyla pervaneleri de (MOSFET üzerinden) anında kapatır.

  • PWM Hız Kontrolü: Aracın hızı, kullanıcı tarafından mobil uygulama üzerinden dinamik olarak değiştirilebilir.




    Kodlar: 

    #include <SoftwareSerial.h>

    // Bluetooth pinleri: RX (Pin 12), TX (Pin 13)
    SoftwareSerial bt(12, 13);

    // L298N Motor S�r�c� Pinleri
    #define IN1 5
    #define IN2 6
    #define IN3 9
    #define IN4 10
    #define ENA 3
    #define ENB 4

    // MOSFET / Pervane Kontrol Pini
    #define PERVANE_PIN 7

    int vSpeed = 150;
    char state = 'S';

    void setup() {


      // Bluetooth'un kendine gelmesi i�in bekle
      delay(1000);
     
      pinMode(PERVANE_PIN, OUTPUT);
      // Pervaneyi Bluetooth ba?land?ktan sonra a�mak daha sa?l?kl?d?r
      // ama istedi?in i�in burada HIGH b?rak?yorum
      digitalWrite(PERVANE_PIN, HIGH);

     
      // Motor pinlerini �?k?? olarak ayarla
      pinMode(IN1, OUTPUT);
      pinMode(IN2, OUTPUT);
      pinMode(IN3, OUTPUT);
      pinMode(IN4, OUTPUT);
      pinMode(ENA, OUTPUT);
      pinMode(ENB, OUTPUT);
     
      // Pervane pinini ayarla
      pinMode(PERVANE_PIN, OUTPUT);
     
      // --- ?STED???N DE????KL?K: PERVANE BA?LANGI�TA �ALI?SIN ---
      digitalWrite(PERVANE_PIN, HIGH);

      bt.begin(9600);
      Serial.begin(9600);
     
      Serial.println("Sistem Hazir. Pervane Baslangicta CALISIYOR.");
    }

    void loop() {
      if (bt.available() > 0) {
        state = bt.read();
        Serial.print("Gelen Komut: ");
        Serial.println(state);
       
        // Pervane Kontrol� (T: AC, t: KAPAT)
        if (state == 'T') {
          digitalWrite(PERVANE_PIN, HIGH); // Pervaneyi tekrar �al??t?r
          Serial.println("Pervane ACILDI");
        }
        else if (state == 't') {
          digitalWrite(PERVANE_PIN, LOW);  // Pervaneyi durdur
          Serial.println("Pervane DURDURULDU");
        }
      }

      // H?z Ayarlar?
      if (state == '1') vSpeed = 100;
      else if (state == '2') vSpeed = 150;
      else if (state == '3') vSpeed = 200;
      else if (state == '4') vSpeed = 255;

      // Hareket Komutlar?
      switch(state) {
        case 'F': moveForward(); break;
        case 'B': moveBackward(); break;
        case 'L': turnLeft(); break;
        case 'R': turnRight(); break;
        case 'S': stopRobot(); break; // Stop'a bas?nca pervane de durur
      }
    }

    // --- Hareket Fonksiyonlar? (Dokunulmad?) ---

    void moveForward() {
      analogWrite(ENA, vSpeed); analogWrite(ENB, vSpeed);
      digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH);
      digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW);
    }

    void moveBackward() {
      analogWrite(ENA, vSpeed); analogWrite(ENB, vSpeed);
      digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW);
      digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH);
    }

    void turnLeft() {
      analogWrite(ENA, vSpeed); analogWrite(ENB, vSpeed);
      digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW);
      digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW);
    }

    void turnRight() {
      analogWrite(ENA, vSpeed); analogWrite(ENB, vSpeed);
      digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH);
      digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH);
    }

    void stopRobot() {
      // Tekerlekleri durdur
      analogWrite(ENA, 0); analogWrite(ENB, 0);
      digitalWrite(IN1, LOW); digitalWrite(IN2, LOW);
      digitalWrite(IN3, LOW); digitalWrite(IN4, LOW);
     
      // --- STOPA BASINCA PERVANE DE DURUR ---
      digitalWrite(PERVANE_PIN, LOW);
      Serial.println("Her sey durduruldu.");
    }