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.
3.1. Servo Motor Bağlantısı
Servo motorun üç bacağı vardır: Güç (Kırmızı), Toprak (Kahverengi) ve Sinyal (Turuncu/Sarı).
- Kırmızı Kablo: Arduino'daki 5V pinine bağlayın.
- Kahverengi Kablo: Arduino'daki GND (Toprak) pinine bağlayın.
- 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.
- VCC (Güç): Arduino'daki 5V pinine bağlayın.
- GND (Toprak): Arduino'daki GND pinine bağlayın.
- Trig (Tetik) Pini: Arduino'daki Dijital 10 pinine bağlayın.
- 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.