Merhaba genç robotik uzmanları! Bugün laboratuvarımızda kendi kendine karar verebilen, önüne bir duvar çıktığında çarpmadan yönünü değiştiren harika bir "Engelden Kaçan Robot" yapacağız. Bu projeyle hem motorları nasıl yöneteceğimizi hem de robotumuza ultrasonik (ses ötesi) dalgalarla "görme" yeteneğini nasıl kazandıracağımızı öğreneceğiz. Arabamızın hızı 180 olacak! Hazırsanız motorları çalıştırıyoruz!

Gerekli malzemeler

  • 1 adet Arduino Uno
  • 1 adet 2 Tekerlekli Robot Araba Şasesi (Motorlar ve tekerleklerle birlikte)
  • 1 adet L298N Motor Sürücü Kartı (Motorları güçlü çalıştırmak için)
  • 1 adet HC-SR04 Ultrasonik Mesafe Sensörü (Robotun gözleri)
  • 1 adet Sensör Tutucu (Mesafe sensörünü öne sabitlemek için)
  • 1 adet 9V Pil ve Pil Yatağı (veya 18650 pil yuvası)
  • Yeteri kadar Erkek-Dişi ve Erkek-Erkek Jumper Kablo

Adım adım yapım

1. 1. Bölüm

İlk adımımız robot arabamızın iskeletini oluşturmak! Kutudan çıkan motorları ve tekerlekleri şaseye (arabanın alt tabanına) düzgünce vidalayın.

2. 2. Bölüm

Şimdi motorlarımızı L298N motor sürücü kartına bağlayalım. Sağ motorun iki kablosunu sürücü kartın sağdaki (OUT1 ve OUT2), sol motorun kablolarını ise soldaki (OUT3 ve OUT4) mavi klemenslerine vidalayın.

3. 3. Bölüm

Gelelim beynimiz olan Arduino ile motor sürücünün bağlantılarına! Sürücüye yön vermek için pinleri şu şekilde bağlıyoruz: L298N üzerindeki IN1 pinini Arduino'da 7'ye, IN2'yi 6'ya, IN3'ü 5'e ve IN4'ü 4 numaralı pine takın.

4. 4. Bölüm

Robotumuzun hızını kontrol edebilmemiz için motor sürücünün "ENA" pinini Arduino'da 9'a, "ENB" pinini ise Arduino'da 10'a bağlayın. Biz kodlarımızda hızı 180 olarak ayarlayacağız!

5. 5. Bölüm

Robotumuza gözlerini takma vakti! HC-SR04 ultrasonik sensörü arabanın ön kısmına sabitleyin. Sensörün VCC pinini Arduino'nun 5V pinine, GND pinini ise Arduino'nun GND pinine bağlayın.

6. 6. Bölüm

Sensörün engel görüp görmediğini bize haber vermesi için TRIG (sinyal gönderme) pinini Arduino'da 12'ye, ECHO (sinyal alma) pinini ise 11 numaralı pine bağlayın.

7. 7. Bölüm

Güç bağlantılarını yaparken çok dikkatli olalım! Pilinizin artı (+) kırmızı ucunu L298N'nin 12V (veya VCC) yazan girişine, eksi (-) siyah ucunu GND'ye bağlayın. Son olarak L298N'nin 5V çıkışından Arduino'nun VIN pinine bir kablo çekerek Arduino'nun da pilden güç almasını sağlayın. (Arduino ve L298N'nin GND pinlerini birbiriyle birleştirmeyi unutmayın!)

8. 8. Bölüm

Bütün kablolar sağlamsa, aşağıdaki kodu Arduino programına kopyalayın, kartınıza yükleyin. Artık robotunuzu yere bırakıp duvarlardan nasıl kaçtığını izleyebilirsiniz!

Proje kodu

Kodu Arduino IDE'ye aktarın. Pin numaralarını kendi devrenize göre kontrol ettikten sonra karta yükleyin.

Arduino / C++
// Motor sürücü pin tanımlamaları
#define IN1 7
#define IN2 6
#define IN3 5
#define IN4 4
#define ENA 9
#define ENB 10

// Sensör pin tanımlamaları
#define TRIG_PIN 12
#define ECHO_PIN 11

// Robotumuzun hızını burada belirliyoruz (0 en yavaş, 255 en hızlı)
int hiz = 180; 

void setup() {
  // Motor pinlerini çıkış olarak ayarlıyoruz
  pinMode(ENA, OUTPUT);
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
  pinMode(ENB, OUTPUT);

  // Sensör pinlerini ayarlıyoruz
  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);

  // Bilgisayardan mesafeyi görmek istersek Seri Portu başlatıyoruz
  Serial.begin(9600);
}

void loop() {
  // Sensörden kaç cm uzakta engel olduğunu ölç
  long mesafe = mesafeOlc(); 

  // Eğer 20 cm'den yakın bir engel varsa
  if (mesafe < 20) {
    dur();           // Önce frene bas!
    delay(300);      // Biraz bekle
    geriGit();       // Geriye doğru kaç
    delay(400);      // 0.4 saniye geri git
    sagaDon();       // Yönünü değiştir
    delay(400);      // Dönüşünü tamamla
  } 
  else {
    // Engel yoksa yol açık, tam gaz ileri!
    ileriGit();
  }
  
  delay(50); // Sensörün kafası karışmasın diye kısa bir mola
}

// --- ROBOTUN HAREKET FONKSİYONLARI ---

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

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

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

void dur() {
  // Hızları sıfırlayarak motorları durduruyoruz
  analogWrite(ENA, 0);
  analogWrite(ENB, 0);
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, LOW);
}

// --- SENSÖR OKUMA FONKSİYONU ---
long mesafeOlc() {
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);
  
  // Sensörden ses dalgası gönder (10 mikrosaniye boyunca)
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);
  
  // Dönen sesin süresini hesapla
  long sure = pulseIn(ECHO_PIN, HIGH);
  
  // Süreyi santimetreye (cm) çevir
  long uzaklik = sure * 0.034 / 2; 
  return uzaklik;
}
8görüntülenme
0beğeni
0yorum
Atölyeye katıl →
Topluluk

Yorumlar

0

İlk yorumu siz yazın.

Yorum yap