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!