Membuat Radar Menggunakan Sensor Ultrasonik dan Arduino

Indobot Update

Halo semuanya. Ada project apa nih hari ini? Kita buat radar yuk. Kalian tau radar? Radar(Radio Detection and Ranging) merupakan alat yang dapat digunakan sebagai pendeteksi benda yang mendekatinya. Radar ini akan berputar bolak-balik untuk memantau lokasi. Nah kali ini kita akan membuat radar menggunakan sensor ultrasonik dan arduino. sensor ultrasonik berfungsi sebagai pendeteksi jarak. Sensor akan mengeluarkan gelombang ultrasonik yang kemudian akan dikembalikan jika kita gelombang menabrak benda di depannya. Waktu pengiriman dan penerimaan benda inilah yang digunakan sebagai nilai jarak. Selain sensor ultrasonik dan arduino, kita juga membutuhkan device lain berupa servo. Servo ini berfungsi sebagai penggerak sensor untuk berputar memantau lokasi.

Penggambaran radar berupa tampilan setengah lingkaran yang dengan satu garis lurus yang bergerak sesuai dengan gerakan sensor ultrasonik. Dalam ilmu perkapalan, biasanya ini disebut dengan Pulse Position Indicator (PPI). PPI ini akan terus terus menampilkan kondisi yang terpantau oleh sensor. Tampilan ini kita buat dengan menggunakan software Processing.

baca juga: Sensor Ultrasonik untuk Mata Robot Avoider

Langsung saja kita coba buat radar menggunakan sensor ultrasonik.

Bahan dan Alat

Bahan dan alat yang digunakan dalam pembuatan radar kali ini adalah sebagai berikut.

Software Arduino IDE     DOWNLOAD

Software Processing       DOWNLOAD

Library Servo                     DOWNLOAD

Laptop/PC                           1

Arduino UNO                     1

Sensor Ultrasonik             1

Servo                                    1

Kabel Jumper                     Secukupnya

 

Rangkaian

Rangkai arduino UNO, sensor dan servo seperti berikut.

Setelah rangkaian sudah selesai, teman-teman bisa gabungkan sensor ultrasonik dan servo menjadi seperti berikut.

Seperti penjelasan sebelumnya bahwa sensor ultrasonik akan diputar oleh servo, pemasangan rangkaian menjadi seperti di atas juga sangat diperlukan.

 

Konsultasikan project mu bersama Tutor Indobot Academy dengan cara registrasi melalui tombol di bawah!

Program Arduino

Masuk ke program arduino dan tuliskan program sebagai berikut. Jangan lupa untuk memasukkan library servo terlebih dahulu ya.

 
//Project Radar oleh indobot.co.id
#include Servo.h; 
// inisialisasi pin untuk trigger dan Echo pada sensor ultrasonik
const int trigPin = 10; //trigger menggunakan pin 10
const int echoPin = 11; //Echo menggunakan pin 11
// variabel untuk durasi dan jarak
long duration;
int distance;
Servo myServo; // untuk pengaturan servo
void setup() {
  pinMode(trigPin, OUTPUT); // pengaturan trigger sebagai output
  pinMode(echoPin, INPUT); // pengaturan Echo sebagai input
  Serial.begin(9600); //untuk menampilkan hasil bacaan di serial monitor
  myServo.attach(12); // pengaturan pin servo di 12
}
void loop() {
  // berputar dari sudut 15 hingga 165
  for(int i=15;i<=165;i++){  
  myServo.write(i);
  delay(30);
  distance = calculateDistance();// menghitung jarak baca sensor ultrasonik
  
  Serial.print(i); // mengirimkan data sudut putaran servo untuk ditampilkan di Processing
  Serial.print(","); // mengirimkan karakter pemisah yang dibutuhkan untuk dikirimkan ke Processing sebagai index
  Serial.print(distance); // mengirimkan nilai hasil baca jarak
  Serial.print("."); // mengirimkan karakter yang dibutuhkan untuk dikirimkan ke Processing sebagai index
  }
  // pengulangan untuk menggerakkan servo kembali dari sudut 165 sampai 15
  for(int i=165;i>15;i--){  
  myServo.write(i);
  delay(30);
  distance = calculateDistance();
  Serial.print(i);
  Serial.print(",");
  Serial.print(distance);
  Serial.print(".");
  }
}
// Function untuk perhitungan jarak
int calculateDistance(){ 
  
  digitalWrite(trigPin, LOW); 
  delayMicroseconds(5);
  // trigger mengirim gelombang ultrasonik setiap 10ms
  digitalWrite(trigPin, HIGH); 
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH); // Echo membaca pantulan gelombang
  distance= duration*0.034/2; //rumus perhitungan jarak
  return distance;
}

Setelah program selesai dituliskan, upload program di atas ke arduino UNO yang anda gunakan. hasilnya servo akan menggerakkan sensor ultrasonik seperti geleng-geleng dan jika teman-teman membuka serial monitor Arduino IDE, hasilnya adalah seperti ini.

Jika hasilnya sudah seperti yang di atas, maka dapat kita lanjutkan ke program Processing.

baca juga: Handsanitizer Otomatis dengan Sensor Ultrasonik dan Arduino UNO

Program Processing

Teman-teman sudah pernah menggunakan software processing? Jika belum, jangan lupa buat install dulu ya. Kalau sudah terinstall, masukkan program sebagai berikut.

 
//Project Radar oleh indobot.co.id
import processing.serial.*; // library untuk komunikasi serial
import java.awt.event.KeyEvent; // library untuk membaca data dari port yang digunakan
import java.io.IOException;
Serial myPort; // inisialisasi untuk Serial
// variabel lainnya yang digunakan
String angle="";
String distance="";
String data="";
String noObject;
float pixsDistance;
int iAngle, iDistance;
int index1=0;
int index2=0;
PFont orcFont;
void setup() {
  
 size (1200, 700); // sesuaikan dengan resolusi komputer
 smooth();
 myPort = new Serial(this,"COM5", 9600); // sesuaikan dengan COM dan serial monitor
 myPort.bufferUntil('.'); // membaca data dari port serial hingga ".", jadi hanya terbaca "sudut,jarak"
}
void draw() {
  
  fill(98,245,31);
  // membuat seperti blur setelah garis bergerak
  noStroke();
  fill(0,4); 
  rect(0, 0, width, height-height*0.065); 
  
  fill(98,245,31); // warna hijau
  // pemanggilan function untuk penggambaran radar
  drawRadar(); 
  drawLine();
  drawObject();
  drawText();
}
void serialEvent (Serial myPort) { // memulai membaca data pada port serial
  data = myPort.readStringUntil('.');
  data = data.substring(0,data.length()-1);
  
  index1 = data.indexOf(","); // temukan karakter ',' dan masukkan ke dalam variabel "index1"
  angle= data.substring(0, index1); //membaca data dari posisi "0" ke posisi variabel "index1"
  distance= data.substring(index1+1, data.length()); // membaca data dari "index1" hingga data terakhir (data jarak)
  
  // konvert string menjadi integer
  iAngle = int(angle);
  iDistance = int(distance);
}
void drawRadar() {
  pushMatrix();
  translate(width/2,height-height*0.074); // bergerak sesuai koordinat lokasi
  noFill();
  strokeWeight(2);
  stroke(98,245,31);
  // menggambar garis busur
  arc(0,0,(width-width*0.0625),(width-width*0.0625),PI,TWO_PI);
  arc(0,0,(width-width*0.27),(width-width*0.27),PI,TWO_PI);
  arc(0,0,(width-width*0.479),(width-width*0.479),PI,TWO_PI);
  arc(0,0,(width-width*0.687),(width-width*0.687),PI,TWO_PI);
  // menggambar garis sudut
  line(-width/2,0,width/2,0);
  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)));
  line((-width/2)*cos(radians(30)),0,width/2,0);
  popMatrix();
}
void drawObject() {
  pushMatrix();
  translate(width/2,height-height*0.074); // // bergerak sesuai koordinat lokasi
  strokeWeight(9);
  stroke(255,10,10); // warna merah
  pixsDistance = iDistance*((height-height*0.1666)*0.025); // mengubah jarak dari cm ke pixel
  // batasi jangkauan ke 40 cm
  if(iDistance<40){
    // penggambaran benda sesuai sudut dan jarak.
  line(pixsDistance*cos(radians(iAngle)),-pixsDistance*sin(radians(iAngle)),(width-width*0.505)*cos(radians(iAngle)),-(width-width*0.505)*sin(radians(iAngle)));
  }
  popMatrix();
}
void drawLine() {
  pushMatrix();
  strokeWeight(9);
  stroke(30,250,60);
  translate(width/2,height-height*0.074); // memindahkan koordinat awal ke lokasi baru
  line(0,0,(height-height*0.12)*cos(radians(iAngle)),-(height-height*0.12)*sin(radians(iAngle))); // penggambaran garis berdasarkan sudut
  popMatrix();
}
void drawText() { // gambar teks di layar
  
  pushMatrix();
  if(iDistance>200) {
  noObject = "Out of Range";
  }
  else {
  noObject = "In Range";
  }
  fill(0,0,0);
  noStroke();
  rect(0, height-height*0.0648, width, height);
  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 Distance ", width-width*0.875, height-height*0.0277);
  text("Angle: " + iAngle +" °", width-width*0.58, height-height*0.0277);
  text("Distance: ", width-width*0.26, height-height*0.0277);
  if(iDistance<40) {
  text("        " + iDistance +" cm", width-width*0.190, height-height*0.0277);
  }
  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(); 
}

Jangan lupa untuk mengubah COM yang anda gunakan untuk arduino anda yaa. Jika sudah semua, jalankan program di Processing dengan klik icon segitiga di kiri atas. Maka akan muncul hasil seperti berikut ini.

coba letakkan benda di depannya dan lihat hasilnya. selamat mencoba.

 

Mau belajar elektronika dasar? Arduino? atau Internet of Things? Ikuti kursus online Indobot Academy!

Ingin Tahu Program Kami Lebih Lanjut?

Silahkan isi Formulir Dibawah Ini untuk Diskusi dengan Tim Indobot Academy.

Baca Juga

Bagikan:

Tags

Tinggalkan komentar

whatsapp whatsapp