Arduino Projeleri

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

Arduino Uno, bir HC-SR04 ultrasonik sensör ve bir servo motor kullanarak çalışan basit ama etkili bir radar sistemi kurun; Processing ile topladığınız verileri gerçek zamanlı bir radar ekranında görselleştirin.

Arduino ile radar nasıl yapılır

1Neden Arduino Radar Projesi?

Radar sistemleri, çevredeki nesnelerin konumunu ve mesafesini belirlemek için kullanılan harika bir teknolojidir. Bu proje, öğrencilerin birden fazla disiplini birleştirmesini sağlar ve hem eğlenceli hem de bilimin temel prensiplerini öğreten bir başlangıç projesidir.

ElektronikUltrasonik sensör ve servo motorun bağlantı prensiplerini anlamak.
Kodlama (Arduino C++)Sensör verisini okumak, servo motoru kontrol etmek ve verileri seri porta göndermek.
GörselleştirmeToplanan veriyi Processing veya Arduino Seri Çizici ile grafiksel bir arayüzde göstermek.

2Gerekli Malzemeler

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

Arduino UnoVeya uyumlu bir kart.
HC-SR04 Ultrasonik SensörMesafe ölçümü için.
SG90 Servo MotorVeya benzeri küçük bir servo.
BreadboardDevre tahtası.
Jumper KablolarıBileşenler arası bağlantı için.
BilgisayarArduino IDE ve Processing IDE kurulu olmalı.
Arduino ile radar yapımı

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

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

Arduino 5V GND D9 (Servo) D10/D11 Servo Motor HC-SR04 (Servo üzerine sabitlenir)

Arduino, servo motor ve HC-SR04 ultrasonik sensör arasındaki basitleştirilmiş bağlantı şeması

Servo Motor Bağlantısı

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

🔴
Kırmızı KabloArduino'daki 5V pinine
🟤
Kahverengi KabloArduino'daki GND (Toprak) pinine
🟠
Sinyal KablosuArduino'daki Dijital 9 pinine

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

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

V
VCC (Güç)Arduino'daki 5V pinine
G
GND (Toprak)Arduino'daki GND pinine
T
Trig (Tetik)Arduino'daki Dijital 10 pinine
E
Echo (Yankı)Arduino'daki Dijital 11 pinine

İ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.

Robotik dünyasına adım atmak için ilk adımı atın!

Eğitim materyallerimizi ve projelerimizi keşfederek hemen öğrenmeye başlayın. Blok tabanlı kodlamaya başlayın.

Başla

4Arduino Kodlama (C++)

Arduino, sensörden aldığı mesafeyi okuyacak, servo motoru hareket ettirecek ve bu verileri bilgisayara gönderecektir. 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.

radar.ino
#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;
}

5Veri 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.

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.

radar_gorsellestirici.pde
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);
  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);

  drawRadar(); // Radar ekranını çiz

  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));

    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.

?Sıkça Sorulan Sorular

HC-SR04 sensörünün maksimum ölçüm mesafesi nedir?

HC-SR04 teorik olarak 400 cm'ye (4 metre) kadar mesafe ölçebilir. Bu projede, ölçüm hatalarını önlemek için kod içinde de 400 cm üst sınır olarak belirlenmiştir.

Processing kullanmak zorunlu mu?

Hayır. Arduino IDE'nin Seri Çizici (Serial Plotter) veya Seri Monitör özelliğiyle de ham veriyi görebilirsiniz. Ancak dairesel bir radar ekranı gibi özel bir görselleştirme için Processing çok daha esnek bir seçenektir.

Radar neden 15 ile 165 derece arasında tarama yapıyor, 0-180 değil?

Servo motorların uç açılarda (0° ve 180°'ye çok yakın) mekanik olarak zorlanması veya hassasiyetini kaybetmesi yaygındır. 15-165 derece aralığı, servo motoru mekanik sınırlarının biraz içinde tutarak daha güvenli ve tutarlı bir tarama sağlar.

Robotik dünyasına adım atmak için ilk adımı atın!

Eğitim materyallerimizi ve projelerimizi keşfederek hemen öğrenmeye başlayın. Blok tabanlı kodlamaya başlayın.

Başla