Yazılardaki ürünleri komponentci.net'te inceleyebilir, hemen sipariş verebilirsiniz.komponentci.net →
KomponentciBlog Mağaza
Blog  ›  Projeler

Arduino Radar Projesi: HC-SR04 ve Servo ile Tarama

Arduino Radar Projesi: HC-SR04 ve Servo ile Tarama
Kısa cevap

Arduino radar projesi, bir servo motorun üzerine yerleştirilen HC-SR04 ultrasonik sensörle yapılır. Servo sensörü 15° ile 165° arasında döndürür, Arduino her açıda mesafeyi ölçüp bilgisayara gönderir. Processing programı bu verilerle yarım daire şeklinde bir radar ekranı çizer. HC-SR04 yaklaşık 2-400 cm arasında ölçer.

Filmlerdeki yeşil radar ekranlarını kendi masanızda yapabilirsiniz. Bu yazıda HC-SR04 ultrasonik sensörü bir SG90 servo motorun üzerine yerleştirip çevreyi tarıyoruz. Arduino her açıda ölçtüğü mesafeyi bilgisayara gönderiyor, Processing programı da bunları radar ekranında gösteriyor. Sensörün neleri ölçebildiğini ve neleri ölçemediğini de anlatıyoruz.

Arduino radar nedir?

Arduino radar, dönen bir mesafe sensörüyle çevresindeki cisimlerin yönünü ve uzaklığını bulan bir tarama sistemidir. Gerçek radarlar radyo dalgası kullanır. Bizim projemiz ise ses dalgası kullanır; bu yüzden aslında bir "sonar"dır. Yarasalar ve yunuslar da yönlerini benzer biçimde, yankıyla bulur.

Sistemin iki görevi vardır. Servo motor sensörün baktığı açıyı belirler. HC-SR04 o yöndeki en yakın cismin mesafesini ölçer. Açı ve mesafe birlikte, cismin haritadaki yerini verir.

Hangi malzemeler gerekir?

Arduino radar için bir Arduino Uno, HC-SR04 sensör, SG90 servo motor, breadboard ve jumper kablolar yeterlidir. Ekran için bilgisayara ücretsiz Processing programını kurmanız gerekir.

Malzeme listesi

MalzemeAdetNe işe yarar?
Arduino UNO R31Servoyu döndürür, mesafeyi ölçüp gönderir
HC-SR04 ultrasonik mesafe sensörü1Ses yankısıyla mesafe ölçer
SG90 mini servo motor1Sensörü 15°-165° arasında döndürür
830 pin breadboard15V ve GND dağıtımı yapılır
Erkek-dişi jumper kablo4Sensörü breadboard'a bağlar
Erkek-erkek jumper kablo6-8Servo ve güç bağlantıları

Sensörü servo koluna sıcak silikon ya da çift taraflı bantla yapıştıracaksınız. Erkek-dişi kablolar, sensör dönerken kabloların gerilmemesi için yeterince uzun olmalıdır.

Devre nasıl kurulur?

HC-SR04'ün Trig ucu D10'a, Echo ucu D11'e, servonun sinyal kablosu D12'ye bağlanır; ikisi de 5V ve GND ile beslenir. Bağlantıyı yaparken USB kablosu takılı olmasın.

  1. Arduino'nun 5V pinini breadboard'un kırmızı (+) hattına, GND pinini mavi (−) hattına bağlayın.
  2. HC-SR04 bağlantısı: VCC → 5V hattı, Trig → D10, Echo → D11, GND → GND hattı.
  3. Servo bağlantısı: kırmızı → 5V hattı, kahverengi → GND hattı, turuncu (sinyal) → D12.
  4. Servoyu kodla 90°'ye getirin, sonra sensörü kolun üzerine tam ileri bakacak şekilde yapıştırın.
  5. Servoyu sabit bir tabana (karton kutu ya da tahta) sıkıca tutturun.
  6. Arduino kodunu yükleyin, Seri Monitör'ü kapatın ve Processing programını çalıştırın.
Arduino radar bağlantı şeması: HC-SR04 sensörün VCC ucu 5V'a, Trig ucu D10'a, Echo ucu D11'e, GND ucu GND'ye bağlı; SG90 servonun turuncu sinyal kablosu D12'ye, kırmızısı 5V'a, kahverengisi GND'ye bağlı; altta 15 ile 165 derece arasındaki yarım daire tarama alanı, 10, 20, 30 ve 40 cm halkaları, yaklaşık 15 derecelik ses ışını ve 60 derece yönünde 25 cm uzaklıkta bir cisim noktası
Trig D10'a, Echo D11'e, servo sinyali D12'ye bağlanır; servo sensörü 15° ile 165° arasında döndürür ve her açıda mesafe ölçülür.

Sensör dönerken kabloların takılmaması için kabloları servonun arkasından gevşek bir halka şeklinde geçirin. HC-SR04'ün çalışma ilkesini HC-SR04 ultrasonik sensör yazısında, servonun nasıl açı tuttuğunu servo motor nedir yazısında anlattık.

Radar kodu nasıl çalışır?

Arduino kodu servoyu 15°'den 165°'ye birer derece döndürür, her açıda mesafeyi ölçer ve "açı,mesafe." biçiminde bilgisayara gönderir; sonra aynı işi ters yönde yapar.

#include <Servo.h>

const byte TRIG = 10, ECHO = 11;
Servo servo;

int mesafeOlc() {
  digitalWrite(TRIG, LOW);  delayMicroseconds(2);
  digitalWrite(TRIG, HIGH); delayMicroseconds(10);
  digitalWrite(TRIG, LOW);
  long sure = pulseIn(ECHO, HIGH, 30000);   // en çok 30 ms bekle
  return sure / 58;                         // cm; 0 = yankı yok
}

void olcVeGonder(int aci) {
  servo.write(aci);
  delay(30);                                // servonun yerine oturması için
  Serial.print(aci);
  Serial.print(',');
  Serial.print(mesafeOlc());
  Serial.print('.');
}

void setup() {
  pinMode(TRIG, OUTPUT);
  pinMode(ECHO, INPUT);
  servo.attach(12);
  Serial.begin(9600);
}

void loop() {
  for (int a = 15; a <= 165; a++) olcVeGonder(a);
  for (int a = 165; a >= 15; a--) olcVeGonder(a);
}

Mesafe hesabı ses hızına dayanır. Ses havada 20 °C'de yaklaşık 343 m/s, yani 0,0343 cm/µs hızla gider. Yankı süresi gidiş ve dönüşü içerdiği için ikiye bölünür: mesafe = süre × 0,0343 / 2 ≈ süre / 58. Örneğin 1.160 µs, 20 cm demektir.

Tarama 0° ile 180° yerine 15° ile 165° arasında yapılır. SG90 uç açılarda zorlanıp titreyebilir ve sensör kendi tabanını ya da kablolarını görebilir. Bu kenar payı ölçümleri temiz tutar.

Processing radar ekranı nasıl yapılır?

Processing radar ekranı, seri porttan gelen "açı,mesafe." verisini okuyup yarım daire üzerinde dönen bir çizgi ve cisim noktaları çizer. Processing'i processing.org adresinden ücretsiz indirip aşağıdaki kısa programı çalıştırın.

import processing.serial.*;
Serial port;
float aci = 0, mesafe = 0;

void setup() {
  size(800, 450);
  port = new Serial(this, Serial.list()[0], 9600);
  port.bufferUntil('.');
  background(0);
}

void draw() {
  noStroke(); fill(0, 12); rect(0, 0, width, height);  // eski izler söner
  translate(width / 2, height - 20);
  stroke(0, 255, 0); noFill();
  for (int r = 100; r <= 400; r += 100) arc(0, 0, r * 2, r * 2, PI, TWO_PI);
  float a = radians(aci);
  line(0, 0, 400 * cos(a), -400 * sin(a));
  if (mesafe > 0 && mesafe <= 40) {                    // 1 cm = 10 piksel
    stroke(255, 0, 0); strokeWeight(8);
    point(mesafe * 10 * cos(a), -mesafe * 10 * sin(a));
    strokeWeight(1);
  }
}

void serialEvent(Serial s) {
  String veri = s.readStringUntil('.');
  if (veri == null) return;
  String[] parca = split(trim(veri.substring(0, veri.length() - 1)), ',');
  if (parca.length == 2) { aci = float(parca[0]); mesafe = float(parca[1]); }
}

Ekrandaki her yeşil halka 10 cm'dir; en dıştaki halka 40 cm'yi gösterir. Kırmızı noktalar algılanan cisimlerdir. Program açılmıyorsa Serial.list()[0] içindeki 0'ı 1 ya da 2 yapın; bu sayı Arduino'nun bağlı olduğu portu seçer. Arduino IDE'nin Seri Monitör'ü açıksa Processing porta bağlanamaz.

HC-SR04 hangi mesafeleri ölçebilir?

HC-SR04 yaklaşık 2 ile 400 cm arasını ölçer, ancak sonuç cismin boyutuna, yüzeyine ve açısına bağlıdır. Sensörün ses ışını yaklaşık 15° genişliğindedir; bu yüzden küçük cisimler ekranda birkaç derecelik bir yay gibi görünür.

DurumNe olur?Neden?
Cisim 2 cm'den yakınYanlış ya da 0 değerYankı, sensör dinlemeye başlamadan döner
Düz, sert yüzey (kitap, duvar)Doğru ölçümSes sensöre geri yansır
Yumuşak yüzey (kumaş, sünger)Ölçüm yok ya da hatalıSes emilir
Eğik yüzeyCisim görünmeyebilirYankı başka yöne yansır
İnce cisim (kalem, tel)Çoğu zaman görünmezYansıyan ses çok azdır
Sıcak ya da soğuk havaKüçük sapmaSes hızı sıcaklıkla değişir

Ses hızı her 1 °C için yaklaşık 0,6 m/s değişir. Bu, maket ölçeğinde birkaç milimetrelik bir farktır ve ödev için önemsizdir. Asıl sınırlama ışının genişliğidir: radarınız iki cismi ancak aralarında birkaç santimetre boşluk varsa ayırabilir.

Hangi güvenlik kurallarına dikkat edilmeli?

Radar USB'den 5 V ile çalıştığı için güvenlidir; yine de şu kurallara uyun:

  • Devreyi yalnızca bilgisayarın USB çıkışından besleyin. 220V şebeke elektriğine hiçbir şey bağlamayın.
  • Projeyi bir öğretmen ya da yetişkin gözetiminde kurun; sıcak silikon tabancasını yetişkin yardımıyla kullanın.
  • Servo dönerken parmaklarınızı ve kablolarınızı kolun önünden uzak tutun.
  • Servo titriyor ya da Arduino kendini yeniden başlatıyorsa servoyu 4 kalem pilden (6 V) besleyin ve pilin eksisini Arduino GND'sine bağlayın.
  • Sensörü elle zorla çevirmeyin; servonun plastik dişlileri kırılabilir.

Ödevinizi nasıl sunarsınız?

Ödevinizi, radarın önüne farklı cisimler koyup ekrandaki sonuçları gerçek ölçümlerle karşılaştırarak sunabilirsiniz.

  • Soru: "Ses dalgalarıyla bir cismin yeri bulunabilir mi?"
  • Deney 1: Bir kutuyu 10, 20 ve 30 cm'ye koyun; cetvel ölçümü ile ekrandaki değeri tabloya yazın.
  • Deney 2: Aynı mesafeye kitap, sünger ve kalem koyun; hangilerinin görüldüğünü not edin.
  • Bağlantı: Yarasaların ve gemilerdeki sonarların aynı ilkeyle çalıştığını anlatın.
  • Sonuç: Sensörün sınırlarını ve hata payını yorumlayın.

Sunumda radarın önüne oyuncak araçlar ya da küçük kutular dizin ve ekranı projeksiyona yansıtın. Benzer bir uygulama olan Arduino park sensörü projesi de sunumunuzda karşılaştırma için iyi bir örnektir. Diğer modüller için Arduino sensör ve modüller kategorisine bakabilirsiniz.

Sık sorulan sorular

Radar neden gerçek radar değil sonar sayılır?

Gerçek radar radyo dalgası, sonar ise ses dalgası kullanır; HC-SR04 ses kullandığı için projemiz aslında bir sonardır. Sensör insan kulağının duyamadığı 40 kHz'lik ultrasonik ses gönderir. Radyo dalgaları ışık hızında gittiği için çok uzak mesafeleri ölçer. Ses ise yavaş gider ve havada çabuk zayıflar; bu yüzden menzil birkaç metreyle sınırlıdır.

Ekranda hiç nokta görünmüyorsa ne yapmalıyım?

Önce Arduino IDE'nin Seri Monitör'ünü kapatın, çünkü port aynı anda iki program tarafından kullanılamaz. Sonra Processing'deki Serial.list()[0] değerini değiştirip doğru portu seçin. Cisimleri 40 cm'den yakına koyun; ekran yalnızca bu mesafeyi gösterir. Sorun sürerse Seri Monitör'de "90,25." gibi verilerin geldiğini kontrol edin.

Tarama hızı nasıl artırılır?

Tarama hızı, servonun adım açısı büyütülerek ya da bekleme süresi kısaltılarak artırılır. Koddaki a++ yerine a += 2 yazarsanız tarama iki kat hızlanır, ama ayrıntı azalır. delay(30) değerini çok küçültmeyin; servo yerine oturmadan ölçüm yapılırsa noktalar yanlış açıda çizilir. Bir tam tarama şu ayarlarla birkaç saniye sürer.

Menzil 40 cm'den büyük yapılabilir mi?

Evet, menzil Processing programındaki ölçek değiştirilerek büyütülebilir. Koddaki mesafe * 10 çarpanını 4 yaparsanız 400 piksel 100 cm'yi gösterir; koşuldaki 40 değerini de 100 yapın. HC-SR04 birkaç metreyi ölçebilir, ama uzak mesafelerde küçük cisimlerden yankı alması zorlaşır. Sınıf için 1 metre pratik bir sınırdır.

Servo yerine step motor kullanılabilir mi?

Evet, step motor da kullanılabilir ve daha hassas adım atar. Ancak step motor ek bir sürücü kartı ister ve konumunu kendisi bilmez; açılışta bir başlangıç noktası belirlemeniz gerekir. SG90 servo ise istenen açıya doğrudan gider ve tek kabloyla kontrol edilir. Öğrenci projesi için servo daha kolay ve yeterlidir.

Özet

  • Arduino radar, servoyla dönen bir HC-SR04 ile açı ve mesafe ölçen bir sonardır.
  • Bağlantı: Trig D10, Echo D11, servo sinyali D12; hepsi 5V ve GND ile beslenir.
  • Servo 15°-165° arasında birer derece döner; her açıda "açı,mesafe." gönderilir.
  • Mesafe = süre / 58 (cm); ses 20 °C'de yaklaşık 343 m/s hızla gider.
  • HC-SR04 yaklaşık 2-400 cm ölçer; yumuşak, eğik ve ince cisimleri kaçırabilir.
  • Devreyi yalnızca USB ile, yetişkin gözetiminde çalıştırın.

Bu yazıdaki ürünler

Diğer yazılar