Arduino ile 180 Derece Ultrasonik Sonar (Radar) Sistemi

👤 Yazar: ozcan 📅 Tarih: 16.07.2026 05:02 👁️ Görüntüleme: 31

Arduino ile 180 Derece Ultrasonik Sonar (Radar) Sistemi

Bu proje, HC-SR04 Ultrasonik Mesafe Sensörü ve bir Servo Motor kullanarak çevredeki nesnelerin konumunu tespit eden ve bunları bir radar ekranı gibi görselleştiren bir sistemdir. Sensör servoya monte edilerek 180 derece döner ve her açıda aldığı mesafe verisini işleyerek bir tarama haritası oluşturur.

Arduino ile 180 Derece Ultrasonik Sonar bağlantı şeması

Görsel: Robotik projeler için sonar mesafe tarama mekanizması


Sistem Nasıl Çalışır?

Sonar sistemi iki ana döngü üzerine kuruludur:

  • Servo Döngüsü: Motor 0 dereceden 180 dereceye (ve tersine) adım adım hareket eder.
  • Sensör Döngüsü: Servo her adımda durur ve HC-SR04 sensörü ses dalgaları göndererek mesafeyi ölçer.

Elde edilen açı ve mesafe verileri Serial port üzerinden bilgisayara gönderilir. Bu verileri Processing gibi bir yazılımla bilgisayarda gerçek bir radar ekranına dönüştürebilirsiniz.


Bağlantı Şeması

  • HC-SR04 Trigger: D9
  • HC-SR04 Echo: D10
  • Servo Sinyal: D11
  • VCC/GND: 5V ve GND (Servo için harici güç önerilir)

Arduino Sonar Kodları

#include <Servo.h>

const int trigPin = 9;
const int echoPin = 10;
Servo radarServo;

void setup() {
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  radarServo.attach(11);
  Serial.begin(115200);
}

void loop() {
  // Soldan Sağa Tarama
  for(int i = 0; i <= 180; i++) {
    radarServo.write(i);
    delay(10);
    int mesafe = mesafeOlcul();
    // Veriyi tek satırda gönder, sonunda nokta olsun
    Serial.print(i); 
    Serial.print(","); 
    Serial.print(mesafe);
    Serial.println("."); 
  }
  
  // Sağdan Sola Tarama
  for(int i = 180; i > 0; i--) {
    radarServo.write(i);
    delay(10);
    int mesafe = mesafeOlcul();
    Serial.print(i);
    Serial.print(",");
    Serial.print(mesafe);
    Serial.println(".");
  }
}

int mesafeOlcul() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  
  long sure = pulseIn(echoPin, HIGH);
  return sure * 0.034 / 2; // Mesafe (cm)
}


Processing Radar Arayüzü: Gerçek Zamanlı Veri Görselleştirme

Arduino'dan gelen mesafe verilerini görsel bir radar ekranına dönüştürmek için aşağıdaki Processing kodunu kullanabilirsiniz. Kod, ekranı bir yarım daire olarak çizer ve nesnelerin olduğu bölgeleri kırmızı (tespit edildi), boş bölgeleri ise yeşil (tarama yapıldı) olarak işaretler.

processing sonar ekranı

import processing.serial.*;

Serial myPort;
String data = "";

// En başa değişkenleri tanımla
int angle = 0;
int distance = 0;

void setup() {
  size(1200, 700);
  frameRate(60);
  // Portu açarken oluşabilecek hataları engellemek için kontrol ekliyoruz
  try {
    myPort = new Serial(this, "COM4", 115200);
    myPort.bufferUntil('.'); // '.' işaretini gördüğünde serialEvent'i tetikle
  } catch (Exception e) {
    println("Port açılamadı: " + e.getMessage());
  }
}

void draw() {
  fill(0, 5); // Hareketli iz efekti için hafif şeffaf arka plan
  noStroke();
  rect(0, 0, width, height);

  fill(98, 245, 31);
  drawRadar();
  drawObject();
}

void serialEvent(Serial myPort) {
  try {
    // 1. Veriyi oku
    String inBuffer = myPort.readStringUntil('.');
    
    // 2. Eğer gelen veri boş değilse işlem yap
    if (inBuffer != null) {
      data = trim(inBuffer);
      data = data.substring(0, data.length() - 1); // Sondaki noktayı çıkar
      
      int index = data.indexOf(",");
      if (index > 0) {
        angle = Integer.parseInt(data.substring(0, index));
        distance = Integer.parseInt(data.substring(index + 1));
      }
    }
  } catch (Exception e) {
    // Hata oluşursa programı durdurma, sadece konsola yazdır (opsiyonel)
    println("Veri okuma hatası: " + e.getMessage());
  }
}

void drawRadar() {
  pushMatrix();
  translate(width/2, height-100);
  noFill();
  strokeWeight(2);
  stroke(98, 245, 31);
  arc(0, 0, 1200, 1200, PI, TWO_PI);
  popMatrix();
}

void drawObject() {
  pushMatrix();
  translate(width/2, height-100);
  strokeWeight(9);
  stroke(255, 10, 10);
  // Mesafe ve açıya göre çizim
  float pixDistance = distance * 22.5; 
  if(distance < 40){
    line(pixDistance*cos(radians(angle)), -pixDistance*sin(radians(angle)), 
         1100*cos(radians(angle)), -1100*sin(radians(angle)));
  }
  popMatrix();
}

Dikkat Etmeniz Gerekenler

  • Port Seçimi: "COM3" kısmını, Arduino'nuzun bağlı olduğu port ismiyle değiştirmeyi unutmayın (Arduino IDE'nin sağ alt köşesinde yazar).
  • Arduino Kodu Uyumu: Arduino kodunuzda mesafe verisinin sonuna bir nokta ('.') eklemeniz gerekecek. Arduino kodunuzdaki Serial.println(mesafe); satırını Serial.print(mesafe); Serial.println("."); şeklinde güncellerseniz Processing veriyi hatasız okuyacaktır.
  • Hız: delay(30) değerini azaltarak tarama hızını artırabilirsiniz.

💬 Yorumlar

Henüz yorum yapılmamış. İlk yorumu siz yapın!

Bir Yorum Bırakın

Güvenlik Kontrolü:

Yenidir.com
↑ Sayfa Başı
📞 İletişim ✉ E-Posta Gönder 🟥 YouTube
© 2026 Yenidir.com
Yenidir CMS V0.1