Berikan donasi untuk mendukung pengembangan konten Arduino berkualitas yang lebih baik

Radar Ultrasonik Sederhana dengan Arduino

Pelajari cara membuat radar ultrasonik menggunakan Arduino, sensor ultrasonik, dan tampilan UI dengan Processing.

Komponen yang Dibutuhkan Untuk Proyek Ini

6 item

Di bawah ini Anda akan menemukan semua komponen yang diperlukan untuk menyelesaikan tutorial Arduino ini. Setiap komponen mencakup tautan afiliasi ke berbagai marketplace tempat Anda dapat membelinya.

Arduino Uno

Arduino Uno

Mikrokontroler

Mikrokontroler populer untuk proyek elektronik dan prototipe.

Rp 58.980
Harga terbaik di Shopee
Sensor Ultrasonik HC-SR04

Sensor Ultrasonik HC-SR04

Sensor

Sensor untuk mendeteksi jarak benda menggunakan gelombang ultrasonik.

Rp 9.500
Harga terbaik di Shopee
Servo Motor SG90

Servo Motor SG90

Aktuator

Motor servo untuk menggerakkan sensor ultrasonik secara rotasi.

Rp 12.600
Harga terbaik di Tokopedia
Buzzer Aktif

Buzzer Aktif

Output

Buzzer untuk menghasilkan suara saat benda terdeteksi.

Rp 1.500
Harga terbaik di Tokopedia
Kabel Jumper Male-to-Male

Kabel Jumper Male-to-Male

Kabel

Kabel untuk menghubungkan komponen di breadboard.

Rp 9.980
Harga terbaik di Shopee
Kabel Jumper Male-to-Female

Kabel Jumper Male-to-Female

Kabel

Kabel untuk menghubungkan komponen ke Arduino.

Rp 9.980
Harga terbaik di Shopee

Kode Sumber

RadarUltrasonic.ino
cpp
100 lines
2204 characters
#include <Servo.h>

// Definisi pin
const int trigPin = 10;  // Pin Trig sensor ultrasonik
const int echoPin = 11;  // Pin Echo sensor ultrasonik
const int buzzer = 3;    // Pin buzzer
const int servoPin = 12; // Pin servo motor

// Variabel untuk mengukur jarak
long duration;
int distance;

Servo myServo;

void setup()
{
    // Atur mode pin
    pinMode(trigPin, OUTPUT);
    pinMode(echoPin, INPUT);
    pinMode(buzzer, OUTPUT);

    // Mulai komunikasi Serial untuk Processing
    Serial.begin(9600);

    // Hubungkan servo ke pin
    myServo.attach(servoPin);

    // Pastikan buzzer mati saat mulai
    noTone(buzzer);
}

void loop()
{
    // Sapu servo dari 15 ke 165 derajat
    sweepServo(15, 165, 1);

    // Sapu servo dari 165 ke 15 derajat
    sweepServo(165, 15, -1);
}

// Fungsi untuk menggerakkan servo dan mengukur jarak
void sweepServo(int startAngle, int endAngle, int step)
{
    for (int i = startAngle; step > 0 ? i <= endAngle : i >= endAngle; i += step)
    {
        myServo.write(i);
        delay(50);
        distance = calculateDistance();

        // Kirim data ke Serial untuk Processing
        Serial.print(i);
        Serial.print(",");
        Serial.print(distance);
        Serial.print(".");

        updateBuzzer(distance);
    }
}

// Fungsi untuk mengatur buzzer berdasarkan jarak
void updateBuzzer(int distance)
{
    // Atur nada buzzer berdasarkan jarak
    if (distance > 30)
    {
        noTone(buzzer); // Matikan buzzer jika jarak > 30 cm
    }
    else if (distance <= 30 && distance > 10)
    {
        tone(buzzer, 1000); // Nada 1000 Hz untuk jarak 10-30 cm
    }
    else if (distance <= 10)
    {
        tone(buzzer, 500); // Nada 500 Hz untuk jarak < 10 cm
    }
}

int calculateDistance()
{
    // Kirim pulsa ultrasonik
    digitalWrite(trigPin, LOW);
    delayMicroseconds(2);
    digitalWrite(trigPin, HIGH);
    delayMicroseconds(10);
    digitalWrite(trigPin, LOW);

    // Ukur durasi echo dengan batas jarak maksimal
    duration = pulseIn(echoPin, HIGH, 23530);

    // Hitung jarak dalam cm
    if (duration == 0)
    {
        distance = 400;
    }
    else
    {
        distance = duration * 0.034 / 2;
    }
    return distance;
}
RadarDisplay.pde
processing
163 lines
5217 characters
import processing.serial.*;

// Objek untuk komunikasi dengan Arduino
Serial myPort;

// Variabel untuk sudut dan jarak dari Arduino
String angle = "";
String distance = "";
String data = "";
String statusObjek;
float pixsDistance;
int iAngle, iDistance;
int index1 = 0;
int index2 = 0;

void setup() {
  // Atur ukuran layar (sesuaikan dengan resolusi Anda)
  size(1200, 700);
  smooth();
  
  // Mulai komunikasi Serial (ganti indeks port jika perlu)
  String portName = Serial.list()[0]; // Pilih port Arduino
  myPort = new Serial(this, portName, 9600);
  myPort.bufferUntil('.'); // Baca data sampai tanda '.'
}

void draw() {
  // Efek fade untuk latar belakang
  fill(0, 10);
  noStroke();
  rect(0, 0, width, height - height * 0.065);
  
  // Gambar elemen radar
  fill(98, 245, 31); // Warna hijau
  drawRadar();
  drawLine();
  drawObject();
  drawText();
}

// Fungsi untuk membaca data dari Arduino
void serialEvent(Serial myPort) {
  data = myPort.readStringUntil('.');
  if (data != null) {
    data = trim(data);
    index1 = data.indexOf(",");
    angle = data.substring(0, index1);
    distance = data.substring(index1 + 1, data.length());
    
    // Ubah string ke integer
    iAngle = int(angle);
    iDistance = int(distance);
  }
}

// Fungsi untuk menggambar lingkaran dan garis radial radar
void drawRadar() {
  pushMatrix();
  translate(width/2, height - height * 0.074); // Pindah ke tengah bawah layar
  noFill();
  strokeWeight(2);
  stroke(98, 245, 31);
  
  // Gambar lingkaran jarak
  arc(0, 0, width - width * 0.0625, width - width * 0.0625, PI, TWO_PI); // 40 cm
  arc(0, 0, width - width * 0.27, width - width * 0.27, PI, TWO_PI);     // 30 cm
  arc(0, 0, width - width * 0.479, width - width * 0.479, PI, TWO_PI);   // 20 cm
  arc(0, 0, width - width * 0.687, width - width * 0.687, PI, TWO_PI);   // 10 cm
  
  // Gambar garis sudut
  line(-width/2, 0, width/2, 0); // Garis tengah (0 derajat)
  line(0, 0, (-width/2) * cos(radians(30)), (-width/2) * sin(radians(30)));
  line(0, 0, (-width/2) * cos(radians(60)), (-width/2) * sin(radians(60)));
  line(0, 0, (-width/2) * cos(radians(90)), (-width/2) * sin(radians(90)));
  line(0, 0, (-width/2) * cos(radians(120)), (-width/2) * sin(radians(120)));
  line(0, 0, (-width/2) * cos(radians(150)), (-width/2) * sin(radians(150)));
  popMatrix();
}

// Fungsi untuk menggambar garis sapuan radar
void drawLine() {
  pushMatrix();
  strokeWeight(9);
  stroke(30, 250, 60);
  translate(width/2, height - height * 0.074);
  line(0, 0, (height - height * 0.12) * cos(radians(iAngle)), -(height - height * 0.12) * sin(radians(iAngle)));
  popMatrix();
}

// Fungsi untuk menggambar objek yang terdeteksi
void drawObject() {
  pushMatrix();
  translate(width/2, height - height * 0.074);
  strokeWeight(9);
  stroke(255, 10, 10); // Warna merah
  pixsDistance = iDistance * ((height - height * 0.1666) * 0.025); // Ubah jarak ke piksel
  
  // Gambar garis merah jika jarak < 100 cm
  if (iDistance < 100) {
    line(pixsDistance * cos(radians(iAngle)), -pixsDistance * sin(radians(iAngle)),
         (width - width * 0.505) * cos(radians(iAngle)), -(width - width * 0.505) * sin(radians(iAngle)));
  }
  popMatrix();
}

// Fungsi untuk menampilkan teks informasi
void drawText() {
  pushMatrix();
  // Tentukan status objek
  if (iDistance > 100) {
    statusObjek = "Di Luar Jangkauan";
  } else {
    statusObjek = "Dalam Jangkauan";
  }
  
  // Gambar latar belakang teks
  fill(0);
  noStroke();
  rect(0, height - height * 0.0648, width, height);
  
  // Teks informasi
  fill(98, 245, 31);
  textSize(25);
  text("10cm", width - width * 0.3854, height - height * 0.0833);
  text("20cm", width - width * 0.281, height - height * 0.0833);
  text("30cm", width - width * 0.177, height - height * 0.0833);
  text("40cm", width - width * 0.0729, height - height * 0.0833);
  textSize(40);
  text("Radar DIY", width - width * 0.875, height - height * 0.0277);
  text("Sudut: " + iAngle + " °", width - width * 0.48, height - height * 0.0277);
  text("Jarak: ", width - width * 0.26, height - height * 0.0277);
  if (iDistance < 100) {
    text("        " + iDistance + " cm", width - width * 0.185, height - height * 0.0250);
  }
  
  // Teks untuk sudut
  textSize(25);
  fill(98, 245, 60);
  translate((width - width * 0.4994) + width/2 * cos(radians(30)), (height - height * 0.0907) - width/2 * sin(radians(30)));
  rotate(-radians(-60));
  text("30°", 0, 0);
  resetMatrix();
  
  translate((width - width * 0.503) + width/2 * cos(radians(60)), (height - height * 0.0888) - width/2 * sin(radians(60)));
  rotate(-radians(-30));
  text("60°", 0, 0);
  resetMatrix();
  
  translate((width - width * 0.507) + width/2 * cos(radians(90)), (height - height * 0.0833) - width/2 * sin(radians(90)));
  rotate(radians(0));
  text("90°", 0, 0);
  resetMatrix();
  
  translate(width - width * 0.513 + width/2 * cos(radians(120)), (height - height * 0.07129) - width/2 * sin(radians(120)));
  rotate(radians(-30));
  text("120°", 0, 0);
  resetMatrix();
  
  translate((width - width * 0.5104) + width/2 * cos(radians(150)), (height - height * 0.0574) - width/2 * sin(radians(150)));
  rotate(radians(-60));
  text("150°", 0, 0);
  popMatrix();
}

Skema/Diagram Rangkaian

Petunjuk Langkah demi Langkah

Siapkan Komponen

Siapkan Arduino Uno, sensor ultrasonik HC-SR04, servo motor SG90, buzzer, kabel jumper male-to-male, dan male-to-female.

Hubungkan Sensor Ultrasonik

Hubungkan pin GND sensor ultrasonik ke GND Arduino, pin Echo ke pin 11, pin Trig ke pin 10, dan pin VCC ke 5V.

Hubungkan Servo Motor

Hubungkan kabel coklat servo ke GND, kabel merah ke 5V, dan kabel oranye ke pin 12 pada Arduino.

Hubungkan Buzzer

Hubungkan pin positif buzzer ke pin 3 dan pin negatif ke GND pada Arduino.

Hubungkan Daya

Gunakan kabel USB untuk menghubungkan Arduino ke laptop untuk daya dan pemrograman.

Unggah Kode ke Arduino

Buka Arduino IDE, salin kode radar ultrasonik, dan unggah ke Arduino Uno.

Jalankan Program Processing

Buka Processing IDE, salin kode tampilan radar, dan jalankan untuk menampilkan UI radar.

Uji Radar

Uji radar dengan menyalakan Arduino dan Processing. Sensor akan mendeteksi benda, buzzer berbunyi, dan UI menampilkan jarak serta sudut benda.

Video Hasil