← Tüm projeler
PROJE DETAYI / ARDUINO

Arduino Servo Radar

HC-SR04 ultrasonik sensör ve SG90 servo motor ile açıya bağlı mesafe ölçümü yapan gerçek zamanlı radar çalışması.

ARDUINO UNOHC-SR04SG90 SERVOPROCESSINGCanlı demoyu dene ↘
Arduino Servo Radar proje görseli
NASIL ÇALIŞIR?

Donanımdan ekrana.

01 / 03

Bağlantı

HC-SR04, servo ve Arduino pinleri şemaya göre eşleştirilir.

02 / 03

Tarama

Servo açı değiştirir, sensör mesafe bilgisi gönderir.

03 / 03

Görselleştirme

Processing veriyi radar ekranına işler; sitedeki demo ayrıca çalışır.

Proje hakkında

SG90 servo motor sensörü farklı açılara çevirir. HC-SR04 her açıda bir mesafe ölçümü alır. Arduino, açı ve mesafeyi seri port üzerinden gönderir. Processing uygulaması bu verileri radar görünümünde gösterir.

Kullanılan araçlar ve bileşenler

  • Arduino Uno
  • HC-SR04 ultrasonik mesafe sensörü
  • SG90 servo motor
  • Breadboard, jumper kablolar ve USB
  • Arduino IDE ve Processing IDE

Malzeme listesi

CSV indir ↓

Projenin paylaşılan donanım ve kod yapısına göre hazırlanan liste. Adetler gösterilen kurulum içindir.

MalzemeAdetGörevi
Arduino Uno1Mesafe ölçümü ve servo kontrolü
HC-SR04 ultrasonik sensör1Mesafe ölçme
SG90 mikro servo1Sensörü sağa sola çevirme
Breadboard1Güç dağıtımı ve bağlantılar
Jumper kabloYeterli sayıdaSensör, servo ve Arduino bağlantıları
USB bağlantı kablosu1Programlama ve Processing uygulamasıyla seri bağlantı

Not: Gerçek donanım uygulamasında besleme akımını ve bağlantıların güvenliğini kendi kartına göre kontrol et.

Sanal laboratuvarı dene

Devre bağlantıları

Bağlantı şemasını tam boy görmek için görsele tıklayabilirsin.

HC-SR04 ve SG90 Servo için bağlantı şeması. HC-SR04 TRIG D9 ECHO D10; SG90 sinyal D11.
Pin bağlantı tablosu
Modül bağlantısıArduino Uno
HC-SR04 VCC5V
HC-SR04 GNDGND
HC-SR04 TRIGD9
HC-SR04 ECHOD10
SG90 kırmızı5V
SG90 kahverengiGND
SG90 turuncuD11

Pin numaraları yüklediğin bağlantı şemasına göre D9, D10 ve D11 olarak ayarlandı. Eski sitedeki kodunda farklı pinler kullanılıyordu; eski devreyi değiştirmeden kullanacaksan kodu buna göre düzenlemelisin.

ETKİLEŞİMLİ DENEY ALANI

Radar simülasyonu

Hedef mesafesini değiştir ve tarama hareketini izle. Bu bölüm örnek veri üretir; gerçek Arduino veya sensöre bağlı değildir.

DEMO VERİSİ
ÖRNEK RADAR VERİLERİ
Açı90°
Hedef mesafesi25 cm

Bu, Processing radar arayüzünün tarayıcıdaki görsel canlandırmasıdır.

Arduino kodu

Kodu indir ↓
servo-radar.ino
#include <Servo.h>

// Pinler, sayfadaki kullanici baglanti semasiyla aynidir.
const byte TRIG_PIN = 9;
const byte ECHO_PIN = 10;
const byte SERVO_PIN = 11;

Servo radarServo;

int mesafeOlc() {
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);
  unsigned long sure = pulseIn(ECHO_PIN, HIGH, 30000UL);
  if (sure == 0) return 0;
  return (int)(sure * 0.0343f / 2.0f);
}

void olcVeGonder(int aci) {
  radarServo.write(aci);
  delay(35);
  Serial.print(aci);
  Serial.print(',');
  Serial.print(mesafeOlc());
  Serial.print('.');
}

void setup() {
  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
  radarServo.attach(SERVO_PIN);
  Serial.begin(9600);
}

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

Processing kodu

Kodu indir ↓
radar-gorsellestirme.pde
import processing.serial.*;

Serial port;
int aci = 90;
int mesafe = 0;

void setup() {
  size(1100, 650);
  smooth();
  println(Serial.list());
  // Listedeki uygun portu secin (ornegin Serial.list()[0]).
  port = new Serial(this, Serial.list()[0], 9600);
  port.bufferUntil('.');
}

void serialEvent(Serial p) {
  String veri = p.readStringUntil('.');
  if (veri == null) return;
  veri = trim(veri.substring(0, veri.length() - 1));
  String[] alan = split(veri, ',');
  if (alan.length != 2) return;
  int yeniAci = int(alan[0]);
  int yeniMesafe = int(alan[1]);
  if (yeniAci >= 0 && yeniAci <= 180) aci = yeniAci;
  if (yeniMesafe >= 0) mesafe = yeniMesafe;
}

void draw() {
  background(4, 12, 17);
  translate(width / 2, height - 65);
  noFill();
  stroke(38, 197, 88);
  strokeWeight(2);
  for (int r = 160; r <= 950; r += 160) arc(0, 0, r, r, PI, TWO_PI);
  line(-480, 0, 480, 0);
  for (int a = 30; a <= 150; a += 30) {
    float x = 480 * cos(radians(a));
    float y = -480 * sin(radians(a));
    line(0, 0, x, y);
  }
  float x = 470 * cos(radians(aci));
  float y = -470 * sin(radians(aci));
  stroke(67, 255, 131);
  strokeWeight(4);
  line(0, 0, x, y);
  if (mesafe > 0 && mesafe < 40) {
    float hedefUzaklik = map(mesafe, 0, 40, 0, 470);
    stroke(255, 87, 87);
    strokeWeight(12);
    point(hedefUzaklik * cos(radians(aci)), -hedefUzaklik * sin(radians(aci)));
  }
  resetMatrix();
  fill(163, 249, 181);
  textSize(22);
  text("Arduino Servo Radar", 26, 36);
  textSize(17);
  text("Aci: " + aci + "°", 26, height - 20);
  text("Mesafe: " + (mesafe == 0 ? "Olcum yok" : mesafe + " cm"), 195, height - 20);
}

Diğer projeler

Başka bir çalışmamı da inceleyebilirsin.

Diğer projeye git