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, HIGH); digitalWrite(IN2, LOW);
      digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW);

    }

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

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

    void turnRight() {
    analogWrite(ENA, vSpeed); analogWrite(ENB, vSpeed);
      digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW);
      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.");
    }






Arduino Uygulama Serisi

Proje: Deprem Sensörü (Sarsıntı Avcısı)

Proje Adı: Sarsıntı Avcısı

Alan: Bilişim Teknolojileri ve Yazılım / Doğal Afetler ve Afet Yönetimi

Yöntem: Bu tasarım projesinde, Arduino Uno mikrodenetleyici platformu temel alınmıştır. Sarsıntıyı algılamak için bir titreşim (tilt) sensörü kullanılmış; uyarı mekanizması olarak bir adet buzzer ve bir adet kırmızı LED sisteme entegre edilmiştir. Hazırlanan Arduino kodu, sensörden gelen veriyi sürekli tarar. Bir sarsıntı algılandığında (sensör pini LOW konumuna geçtiğinde), sistem 3 saniye boyunca kesikli sesli ve ışıklı alarm vererek çevresindekileri uyarır.


Problem: Depremler ülkemizin bir gerçeğidir. Deprem anında, özellikle gece uykusunda sarsıntıyı en hızlı şekilde fark edip güvenli bir alana geçmek hayat kurtarıcıdır.

Amaç: Basit, ekonomik ve erişilebilir malzemelerle bir deprem erken uyarı sistemi prototipi geliştirmek; sarsıntıyı anında sesli ve ışıklı bir uyarıya dönüştürerek farkındalık oluşturmak

Uygulama: Arduino IDE üzerinden yazılan algoritmada digitalRead komutu ile sensör verisi okunmuş, while döngüsü kullanılarak 3000 milisaniye (3 saniye) boyunca tone (ses) ve HIGH (ışık) komutları aktif edilmiştir.

Kullanılan Malzemeler: Arduino Uno, Titreşim Sensörü, Buzzer, LED, Direnç, Breadboard, Jumper Kablolar ve Maket Ev.

Sonuç:
Yapılan testlerde, maket ev üzerinde oluşturulan en küçük sarsıntılarda dahi sensörün başarıyla tetiklendiği ve alarmın devreye girdiği gözlemlenmiştir.

Öneri: Bu sistem geliştirilerek evlerdeki elektrik veya doğalgaz hatlarını sarsıntı anında otomatik kesen daha gelişmiş güvenlik sistemlerine dönüştürülebilir.

 

 











Proje Kodları: 

// PIN TANIMLAMALARI
int sensorPin = 2;   // Titreşim sensörünün bağlı olduğu sinyal pini
int buzzerPin = 8;   // Ses çıkışı veren buzzer'ın bağlı olduğu pin
int ledPin = 7;      // Uyarı ışığı veren LED'in bağlı olduğu pin

void setup() {
  // Pinlerin giriş mi yoksa çıkış mı olacağını Arduino'ya bildiriyoruz
  pinMode(sensorPin, INPUT);   // Sensörden veri alacağımız için GİRİŞ
  pinMode(buzzerPin, OUTPUT);  // Buzzer'a sinyal göndereceğimiz için ÇIKIŞ
  pinMode(ledPin, OUTPUT);     // LED'e sinyal göndereceğimiz için ÇIKIŞ
}

void loop() {
  // Sensörden gelen veriyi oku. Sarsıntı olduğunda genellikle LOW (0) sinyali gelir.
  if (digitalRead(sensorPin) == LOW) { 
    
    // Milis (milisaniye) cinsinden zamanı kaydet. 3 saniyelik sayaç burada başlıyor.
    unsigned long baslangic = millis(); 
    
    // Şimdiki zaman ile başlangıç zamanı farkı 3000ms (3 saniye) olana kadar bu döngüden çıkma
    while (millis() - baslangic < 3000) { 
      
      digitalWrite(ledPin, HIGH);   // LED'i yak
      tone(buzzerPin, 2500);        // Buzzer'dan 2500Hz frekansında ses çıkar
      delay(100);                   // 0.1 saniye bu şekilde bekle (Kısa ötüş/yanış)
      
      digitalWrite(ledPin, LOW);    // LED'i söndür
      noTone(buzzerPin);            // Buzzer'ın sesini kes
      delay(100);                   // 0.1 saniye bu şekilde bekle (Kısa susuş)
    }
    
    // 3 saniyelik alarm bittiğinde sistemin hemen tekrar tetiklenmemesi için 
    // 1 saniyelik bir güvenlik beklemesi yap.
    delay(1000); 
  }
}


Tinkercad:



Fritzing:


Proje Ana Giderleri:

PROJE ADI: AKILLI ÇÖP KUTUM

ANA ALAN: TEKNOLOJİ VE TASARIM

TEMATİK KONU: ÇEVRE VE ÇEVREYİ KORUMA

PROJE AMACI:  Özellikle sokaklarda olmak üzere çöp kutularının çoğu açık bırakılmaktadır. Projemizin genel amacı; Arduino’ yu kullanarak çöp kutularını daha hijyenik kullanma imkanına sahip olmaktır.

PROJE YÖNTEMİ:

Problemi Belirleme: Çöp kutuları günlük yaşantımızda en çok kullandığımız araçlardan biridir. Ancak bu araçlar hijyenik olmadıkları için insanlar bunlara dokunmak istememektedir. Ayak basmalı çöp kutuları bu problemi kısmen çözse de bu kutulara ayakla basılması kutuların kırılmasına neden olmaktadır. Problemi Araştırma: Piyasada akıllı çöp kutuları satılmaktadır ancak bunlarda çok pahalı oldukları için insanlar satın alamamaktadır. Gereksinimleri Belirleme: Projemizi gerçekleştirmek için bir adet çöp kutusu, 1 adet Arduino Uno, 1 adet servo motor, HC-SR04 Ultrasonik Mesafe Sensörü, 9V Pil, Silikon tabancası ve silikon, Prototip Oluşturma/Yapılandırma: İlk prototip oluştururken sensörün nereye takılması gerektiği kullanılacak Arduino’ nun nereye monte edilmesi gerektiği gibi durumlara göre tasarım tekrar yapılandırılacaktır. Hazırlanan kodlar Arduino ya yüklenip test edildiğinde karşılaşılan durumlara göre kodlar tekrar düzenlenecektir.

BEKLENEN SONUÇ:

Proje sonunda t
eknolojinin gelişiminin yıllardır kullandığımız araçlarda meydana getirdiği olumlu değişimin görülmesi ve Bilişim Teknolojileri ve Yazılım Dersi Arduino kodlama konusunda öğrenci becerilerinin gelişimi beklenir. Ayrıca bu proje ile öğrencilerin; algoritma oluşturma, problem tespiti, problem çözümünde mantıksal yaklaşım ve robotik tasarım gibi konu başlıklarında beceri kazanması sağlanır.



Kodlar:

#include <Servo.h>

#define echo 6
#define trig 7

Servo motor;

void setup() {
  pinMode(echo,INPUT);
  pinMode(trig,OUTPUT);
  motor.attach(9);
  Serial.begin(9600);

}

void loop() {
  digitalWrite(trig,LOW);
  delayMicroseconds(2);
 
  digitalWrite(trig,HIGH);
  delayMicroseconds(2);
  digitalWrite(trig,LOW);

  float zaman = pulseIn(echo,HIGH);
  float cm = zaman / 58.2;
  Serial.println(cm);

  if(cm < 10){
    motor.write(90);
    delay(4000);
    motor.write(0);
  }

}


PROJE ADI: BLUETOOTH KONTROLLÜ ARABA

Kullanılacak malzemeler aşağıda verilmiştir.

Arduino UNO

L298N

9V Pil

HC-06 veya HC-05

2 adet DC Motor

2WD Robot Araba Kiti

Jumper Kablolar





Kurulum gerçekleştirildikten sonra telefona uygulama indirilmesi gerekmektedir. "Arduino Car" uygulamasını indirerek bluetooth bağlantısını sağlıyoruz. Eşleşme işlemini gerçekleştirirken Bluetooth modülünün ismi şeklinde görünür. 

Eşleşme için gerekli olan pin 0000 veya 1234 olur. Açıklama kısmında belirtiliyor. Pini girdikten sonra eşleşme işlemi gerçekleşmiş olur. HC-06' yı telefona tanımladıktan sonra uygulama üzerinde bağlantı kurulacaktır.

Bluetooth bağlantısı uygulama üzerinden sağlanmadığı için uygulamaya girildiğinde Bluetooth işareti yanıp sönmektedir. Üzerine tıklayıp bağlanmak istediğimiz cihazı, eşleştirilen cihazlar arasında bulup eşleşmeyi gerçekleştiriyoruz. Eşleşme gerçekleştiği için artık Bluetooth işareti yanıp sönmüyor. 

Tüm bağlantılar gerçekleştikten sonra artık kodlama işlemine geçebiliriz. Bluetooth modülünün TX ve RX pinlerinin Arduino üzerinde hangi pinlere bağlandığını belirtiyoruz.



KODLARI:

#include <SoftwareSerial.h>

SoftwareSerial bluetooth(8, 9); 


#define IN1 5
#define IN2 6

#define IN3 11
#define IN4 12

String state = "";

void setup() {
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
  Serial.begin(9600);
  bluetooth.begin(9600);
}

void loop() {
  while (bluetooth.available() > 0) {
    char harf = bluetooth.read();
    if (harf != "\n") {
      state += String(harf);
    }
  }
  if (state != "")
  {
    Serial.println("Bluetooth gelen veri:" + String(state));
    state = state[0];
  }
  if (state == "F") { //ileri
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, HIGH);
    digitalWrite(IN3, HIGH);
    digitalWrite(IN4, LOW);
  }
  else if (state == "G") { //geri
    digitalWrite(IN1, HIGH);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, HIGH);
  }
 else if (state == "R") { //sag
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, HIGH);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, HIGH);
  }
  else if (state == "L") { //sol
    digitalWrite(IN1, HIGH);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, HIGH);
    digitalWrite(IN4, LOW);
  }
  else if (state == "S") {
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, LOW);
  }
  state = "";
}