Visual radar 2D dengan Arduino dan Ultrasonik Sensor - Berbage Ilmu | Tutorial Arduino Android SEO Networking Software

Visual radar 2D dengan Arduino dan Ultrasonik Sensor

Project kita kali ini yaitu membuat radar visual 2D (dimensi) untuk mendeteksi objek dengan Arduino dan HC-SR04. Project kali ini seperti halnya model radar yang ada pada pesawat dll. saat ini kita tidak hanya melakukan pemograman di Arduino IDE tetapi kita juga memerlukan Software Processing yang berfungsi untuk mengitegrasi output sensor menjadi GUI ( graphical user interface). Untuk itu anda dapat mengikuti langkah - langkah berikut pada perancangan project ini dan di akhir postingan ada Video hasil percobaan dan Tutorial tentang project ini. Berikut ini merupakan bahan yang perlu disediakan pada project kali ini.

Bahan Percobaan :
- Arduino UNO / Mega2560
- Servo Motor SG90
- Ultrasonik Sensor HC-SR04
- Breadboard
- Software Processing (silakan download disini)

Skema Rangkaian :



*cat : rangkailah sesuai dengan kreatifitas anda sendiri, berikut ini model rangkaian saya yang menggunakan bekas label pakaian 




Setelah anda selesai perancangan berikut ini sketch untuk Software Arduino IDE, kemudian anda upload ke board arduino anda.

////wwww.berbageilmu.blogspot.co.id////
#include <Servo.h>.
const int trigPin = 10;
const int echoPin = 11;
long duration;
int distance;
Servo myServo;
void setup() {
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  Serial.begin(9600);
  myServo.attach(12);
}
void loop() {
  // Rotasi Servo Motor
  for(int i=15;i<=165;i++){
  myServo.write(i);
  delay(30);
  distance = calculateDistance();
  Serial.print(i);
  Serial.print(",");
  Serial.print(distance);
  Serial.print(".");
  }
  for(int i=165;i>15;i--){
  myServo.write(i);
  delay(30);
  distance = calculateDistance();
  Serial.print(i);
  Serial.print(",");
  Serial.print(distance);
  Serial.print(".");
  }
}
int calculateDistance(){
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance= duration*0.034/2;
  return distance;
Kemudian anda buka Software Processing dan copy paste kode dibawah ini

import processing.serial.*; //import library komunikasi serial
import java.awt.event.KeyEvent; // import library untuk membaca data dari port serial
import java.io.IOException;
Serial myPort; // definisikan objek serial
// defubes variabel
String angle="";
String distance="";
String data="";
String noObject;
float pixsDistance;
int iAngle, iDistance;
int index1=0;
int index2=0;
PFont orcFont;
void setup() {

 size (1920, 1080); // resolusi layar
 smooth();
 myPort = new Serial(this,"COM3", 9600); // Port serial yang sesuai dengan arduino Anda
 myPort.bufferUntil('.'); // membaca data dari port serial sampai karakter '.'. Jadi sebenarnya terbaca : sudut, jarak.
 orcFont = loadFont("OCRAExtended-30.vlw");
}
void draw() {

  fill(98,245,31);
  textFont(orcFont);
// simulasi motion blur dan slow fade dari moving line
  noStroke();
  fill(0,4);
  rect(0, 0, width, height-height*0.065);

  fill(98,245,31); //warna line (hijau)
// memanggil fungsi untuk menggambar radar
  drawRadar();
  drawLine();
  drawObject();
  drawText();
}
void serialEvent (Serial myPort) { // mulai membaca data dari Port Serial
  data = myPort.readStringUntil('.');
  data = data.substring(0,data.length()-1);

  index1 = data.indexOf(","); // temukan karakter ',' dan masukkan ke variabel "index1"
  angle= data.substring(0, index1);
  distance= data.substring(index1+1, data.length()); // baca data dari posisi "index1" sampai akhir data nilai jaraknya

  // mengubah variabel String menjadi Integer
  iAngle = int(angle);
  iDistance = int(distance);
}
void drawRadar() {
  pushMatrix();
  translate(width/2,height-height*0.074);  // pindah koordinat awal ke lokasi baru
  noFill();
  strokeWeight(2);
  stroke(98,245,31);
  // draws the arc lines
  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 lokasi sudut garis
  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); // pindah koordinat awal ke lokasi baru
  strokeWeight(9);
  stroke(255,10,10); // warna garis terdeteksi benda dll (merah)
  pixsDistance = iDistance*((height-height*0.1666)*0.025); // covers the distance from the sensor from cm to pixels

// membatasi jangkauan hingga 40 cm
  if(iDistance<40){
    // draws the object according to the angle and the distance
  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);  // pindah koordinat awal ke lokasi baru
  line(0,0,(height-height*0.12)*cos(radians(iAngle)),-(height-height*0.12)*sin(radians(iAngle))); // menggambar garis sesuai sudutnya
  popMatrix();
}
void drawText() { // menggambar teks pada screen

  pushMatrix();
  if(iDistance>40) {
  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("Object: " + noObject, width-width*0.875, height-height*0.0277);
  text("Angle: " + iAngle +" °", width-width*0.48, height-height*0.0277);
  text("Distance: ", width-width*0.26, height-height*0.0277);
  if(iDistance<40) {
  text("        " + iDistance +" cm", width-width*0.225, 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();
}
 Berikut ini video tutorial dan hasil percobaan dari project kali ini




Saya harapkan anda melakukan pengembangan dari project kali ini, semoga bisa bermanfaat untuk anda 😃😃.