Arduino ile Radar Yapımı: Ultrasonik Sensör ile Mesafe Algılama 🎯

Yazar: Erkan Demiral | Tarih: 12 Ekim 2025

Radar sistemleri, çevredeki nesnelerin konumunu ve mesafesini belirlemek için kullanılan harika bir teknolojidir. Bu projede, temel elektronik ve kodlama bilginizi kullanarak, Arduino Uno, bir ultrasonik sensör (HC-SR04) ve bir servo motor ile çalışan basit ama etkili bir radar sistemi inşa edeceğiz. Bu, hem eğlenceli hem de bilimin temel prensiplerini öğreten bir başlangıç projesidir.

1. Neden Arduino Radar Projesi?

Bu proje, öğrencilerin birden fazla disiplini birleştirmesini sağlar:

  • Elektronik: Ultrasonik sensör ve servo motorun bağlantı prensiplerini anlamayı.
  • Kodlama (Arduino C++): Sensör verisini okumayı, servo motoru kontrol etmeyi ve bu verileri işleyip seri porta göndermeyi.
  • Görselleştirme: Toplanan veriyi grafiksel bir arayüzde (Processing veya Arduino Seri Çizici) görselleştirmeyi.

2. Gerekli Malzemeler 🛠️

Projenizi tamamlamak için ihtiyacınız olan temel bileşenler şunlardır:

  • Arduino Uno (veya uyumlu bir kart)
  • HC-SR04 Ultrasonik Mesafe Sensörü
  • SG90 Servo Motor (veya benzeri küçük bir servo)
  • Breadboard (Devre tahtası)
  • Jumper Kabloları
  • Bilgisayar (Arduino IDE ve Processing IDE kurulu olmalı)

3. Devre Kurulumu (Donanım Bağlantısı)

Elektronik bağlantıları dikkatlice yaparak başlayın. Yanlış bağlantı, bileşenlere zarar verebilir.

Kodlama öğrenme yol haritası

3.1. Servo Motor Bağlantısı

Servo motorun üç bacağı vardır: Güç (Kırmızı), Toprak (Kahverengi) ve Sinyal (Turuncu/Sarı).

  1. Kırmızı Kablo: Arduino'daki 5V pinine bağlayın.
  2. Kahverengi Kablo: Arduino'daki GND (Toprak) pinine bağlayın.
  3. Sinyal Kablosu: Arduino'daki Dijital 9 pinine bağlayın.

3.2. HC-SR04 Ultrasonik Sensör Bağlantısı

Sensörün VCC, GND, Trig ve Echo olmak üzere dört bacağı vardır.

  1. VCC (Güç): Arduino'daki 5V pinine bağlayın.
  2. GND (Toprak): Arduino'daki GND pinine bağlayın.
  3. Trig (Tetik) Pini: Arduino'daki Dijital 10 pinine bağlayın.
  4. Echo (Yankı) Pini: Arduino'daki Dijital 11 pinine bağlayın.

İpucu: Sensörü, servo motorun üzerine sıcak silikon veya uygun bir mekanik parça ile sabitleyin, böylece servo hareket ettikçe sensör de dönebilsin.

 

4. Arduino Kodlama (C++) 💻

Arduino, sensörden aldığı mesafeyi okuyacak, servo motoru hareket ettirecek ve bu verileri bilgisayara gönderecektir.

4.1. Arduino Kodu

#include <Servo.h>

// Pin Tanımlamaları
#define echoPin 11 
#define trigPin 10
#define servoPin 9

Servo radarServo; 

void setup() {
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  radarServo.attach(servoPin);
  Serial.begin(9600); // Bilgisayara veri göndermek için başlat

  // Başlangıç konumu
  radarServo.write(90); 
  delay(2000); 
}

void loop() {
  for (int i = 15; i <= 165; i++) { // 15 dereceden 165 dereceye tarama
    radarServo.write(i);
    delay(15);
    long mesafe = getMesafe(); 
    
    // Veriyi seri porta gönder: Açı, Mesafe
    Serial.print(i); 
    Serial.print(",");
    Serial.print(mesafe);
    Serial.print("."); // Veri paketinin sonu
  }
  
  for (int i = 165; i > 15; i--) { // Geriye doğru tarama
    radarServo.write(i);
    delay(15);
    long mesafe = getMesafe();

    Serial.print(i);
    Serial.print(",");
    Serial.print(mesafe);
    Serial.print(".");
  }
}

// Mesafe Hesaplama Fonksiyonu
long getMesafe() {
  // Tetikleme sinyali gönder
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  
  // Yankı (echo) pininden süreyi oku
  long sure = pulseIn(echoPin, HIGH);
  
  // Mesafe hesaplama: Hız = Yol / Zaman, Yol = Hız * Zaman
  // Ses hızı (havada): 340 m/s veya 29.1 mikrosaniye/cm 
  // Gidiş-dönüş olduğu için 2'ye bölüyoruz
  long cm = sure / 29.1 / 2;
  
  // Maksimum 400 cm ile sınırlayalım
  if (cm > 400) {
      cm = 400; 
  }
  return cm;
}

Bu kod, servo motoru 15 dereceden 165 dereceye kadar tarar, her adımda ultrasonik sensörden mesafeyi ölçer ve bu veriyi (Açı, Mesafe) virgülle ayırarak Seri Porta gönderir.

5. Veri Görselleştirme (Processing) 🖼️

Arduino'nun gönderdiği ham veriyi anlaşılır bir radar ekranına dönüştürmek için Processing programlama dilini kullanacağız. Bu, verileri görsel olarak yorumlamanın en iyi yoludur.

5.1. Processing Kurulumu ve Kullanımı

Processing'i indirin, kurun ve yeni bir dosya açın. Aşağıdaki kodu kopyalayıp yapıştırın. Bu kod, Arduino'dan gelen veriyi okuyacak ve ekranda bir radar animasyonu çizecektir.

import processing.serial.*;

Serial myPort;
String val;
float angle, distance;
float px = 0, py = 0; // Geçmiş noktaları kaydetmek için

void setup() {
  size(800, 600); // Pencere boyutu
  background(0); // Arka plan siyah
  
  // Seri Port bağlantısını kur
  println(Serial.list()); // Mevcut portları göster
  myPort = new Serial(this, Serial.list()[0], 9600); // Port listesindeki ilk portu kullan
  myPort.bufferUntil('\n'); // Yeni satır karakterine kadar veri bekle
}

void draw() {
  fill(0, 8); // Hafif şeffaf siyah ile önceki kareleri sil
  rect(0, 0, width, height);
  
  // Radar ekranını çiz
  drawRadar(); 
  
  // Geçmiş noktaları görselleştir
  pushMatrix();
  translate(width/2, height); // Merkezi alt ortaya taşı
  rotate(radians(angle));
  
  if (distance < 400) { // Sadece mesafe 400 cm'den azsa çiz
    float x = distance * cos(radians(angle));
    float y = distance * sin(radians(angle));

    // Nesnenin konumunu haritada göster
    noStroke();
    fill(255, 0, 0); // Kırmızı nokta
    ellipse(x, y, 6, 6); // Nokta çiz
  }
  popMatrix();
}

void serialEvent (Serial myPort) {
  try {
    val = myPort.readStringUntil('.'); // Arduino'dan gelen veri paketini oku
    if (val != null) {
      val = trim(val);
      String[] data = split(val, ','); // Veriyi açı ve mesafe olarak ayır
      
      if (data.length == 2) {
        angle = float(data[0]);
        distance = float(data[1]);
        println("Açı: " + angle + ", Mesafe: " + distance + " cm");
      }
    }
  } catch (Exception e) {
    println("Seri port hatası: " + e.getMessage());
  }
}

void drawRadar() {
  stroke(30, 250, 40); // Yeşil çizgi
  strokeWeight(2);
  noFill();
  
  // Yarım daireleri çiz (Mesafe ölçeği)
  for (int i = 0; i < 5; i++) {
    ellipse(width/2, height, i * 100 * 2, i * 100 * 2);
  }
  
  // Radar çizgisi
  stroke(255);
  line(width/2, height, width/2 + cos(radians(angle)) * 400, height - sin(radians(angle)) * 400);

  // Merkez noktayı çiz
  fill(255);
  ellipse(width/2, height, 8, 8);
}

Bu projeyi tamamladığınızda, kendi çalışan radar sisteminizi oluşturmuş ve ileri düzey robotik konularına güçlü bir giriş yapmış olacaksınız! Unutmayın, bu projeyi geliştirerek daha hassas sensörler, daha hızlı motorlar veya daha karmaşık bir kullanıcı arayüzü ekleyebilirsiniz.

Kodlama Yolculuğuna Devam Et! 🚀

Bu projeden sonra daha karmaşık otonom sistemler ve yapay zeka uygulamaları hakkında bilgi edinmek ister misin?

İleri Düzey Robotik Eğitimine Geç