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.
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.
2Gerekli Malzemeler
Projenizi tamamlamak için ihtiyacınız olan temel bileşenler şunlardır:
3Devre Kurulumu (Donanım Bağlantısı)
Elektronik bağlantıları dikkatlice yaparak başlayın. Yanlış bağlantı, bileşenlere zarar verebilir.
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ı).
HC-SR04 Ultrasonik Sensör Bağlantısı
Sensörün VCC, GND, Trig ve Echo olmak üzere dört bacağı vardır.
İ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şla4Arduino 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.
#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.
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
