Arduino UNO Radar Project
Arduino Radar Project
In this project, we will explain how to create a simple radar system using Arduino and Processing IDE. The Arduino radar project is implemented using Processing Applications.
Radar is a long-range object detection system that uses radio waves to establish specific parameters of the object, such as distance and position. Radar technology is used in airplanes, missiles, marine, weather forecasts, and automobiles. Technically, the project is based on Sonar technology, because we will use an ultrasonic sensor to determine the presence of any object in a given range.
The Arduino radar project is more a visual project than a circuit implementation. Of course, we will use different hardware such as Arduino UNO, an HC-SR04 ultrasonic sensor, and a servomotor. But the main aspect is the visual representation in the processing application.
Requirements of hardware in this project:
- Arduino UNO board
- USB cable connector for Arduino UNO
- Ultra Sonic HC-SR04
- Jumper wires male to female
- Tower Pro SG90 Servo Motor

Requirements of software in this Project:
- Arduino IDE
- Processing IDE
The Working principle of this Project:
The Ultrasonic sensor HC-SR04 releases ultrasound at 40,000Hz that travels in the air. If an object comes in its range, then the sound wave collides with the object and bounces back to the Ultrasonic module. The angle and distance of an object displays on the monitor.
Open the Arduino IDE and write the following code
#include <Servo.h>
const int trigPin = 8;
const int echoPin = 9;
long duration; //declare time duration
int distance; //declare distance
Servo myServo; // Object servo
void setup() {
pinMode(trigPin, OUTPUT); // trigPin as an output
pinMode(echoPin, INPUT); // echoPin as an input
Serial.begin(9600);
myServo.attach(10); // pin connected to Servo
}
void loop() {
// rotating servo i++ depicts increment of one degree
for(int i=0;i<=180;i++){
myServo.write(i);
delay(30);
distance = calculateDistance();
Serial.print(i);
Serial.print(",");
Serial.print(distance);
Serial.print(".");
}
// Repeats the previous lines from 180 to 0 degrees
for(int i=180;i>0;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);
// Sets the trigPin on HIGH state for 10 micro seconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance= duration*0.034/2;
return distance;
}
Save the program and compile the code.

Connect your Arduino UNO board to your laptop or desktop via Arduino UNO USB cable. Remove all other connections with the Arduino UNO board, such as the Ultrasonic sensor module and Tower Pro SG90 Servo Motor. Now upload the program to the Arduino UNO board.

Note: Before uploading the code to the Arduino UNO board, make sure that Arduino serial port is selected. Otherwise, it shows an error message "Serial port not selected."
To select your serial port in your laptop or desktop do the followings:
Open Device Manager -> Ports ->Arduino Uno -> Upload your code.

After uploading the program in the Arduino UNO board, connect all the modules (Ultrasonic sensor module and Tower Pro SG90 Servo Motor) with the Arduino UNO board. The following image shows the "Digital circuit diagram."

Write the following code in the Processing IDE and run it. The Processing IDE displays the angle and distance of an object when it comes in the range of Ultrasonic sensors.
Full code show below:
import processing.serial.*;
import java.awt.event.KeyEvent;
import java.io.IOException;
Serial myPort;// defubes variables
String angle="";
String distance="";
String data="";
String noObject;
float pixsDistance;
int iAngle, iDistance;
int index1=0;
int index2=0;
PFont orcFont;
void setup() {
size (1366, 768);
smooth();
myPort = new Serial(this,"COM3", 9600); // change this accordingly
myPort.bufferUntil('.'); // reads the data from the serial port up to the character ?.?. So actually it reads this: angle,distance.
}
void draw() {
fill(98,245,31);
// simulating motion blur and slow fade of the moving line
noStroke();
fill(0,4);
rect(0, 0, width, height-height*0.065);
fill(98,245,31); // green color
// calls the functions for drawing the radar
drawRadar();
drawLine();
drawObject();
drawText();
}
void serialEvent (Serial myPort) { // starts reading data from the Serial Port
// reads the data from the Serial Port up to the character ?.? and puts it into the String variable ?data?.
data = myPort.readStringUntil('.');
data = data.substring(0,data.length()-1);
index1 = data.indexOf(","); // find the character ?,? and puts it into the variable ?index1?
angle= data.substring(0, index1); // read the data from position ?0? to position of the variable index1 or thats the value of the angle the Arduino Board sent into the Serial Port
distance= data.substring(index1+1, data.length()); // read the data from position ?index1? to the end of the data pr thats the value of the distance
// converts the String variables into Integer
iAngle = int(angle);
iDistance = int(distance);
}
void drawRadar() {
pushMatrix();
translate(width/2,height-height*0.074); // moves the starting coordinats to new location
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);
// draws the angle lines
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); // moves the starting coordinats to new location
strokeWeight(9);
stroke(255,10,10); // red color
pixsDistance = iDistance*((height-height*0.1666)*0.025); // covers the distance from the sensor from cm to pixels
// limiting the range to 40 cms
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); // moves the starting coordinats to new location
line(0,0,(height-height*0.12)*cos(radians(iAngle)),-(height-height*0.12)*sin(radians(iAngle))); // draws the line according to the angle
popMatrix();
}
void drawText() { // draws the texts on the 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("Angle: " + iAngle +" ?", width-width*0.78, height-height*0.0277);
text("Distance: ", width-width*0.36, 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();
}
Save and run the code.

Place an object in front of the ultrasonic sensor. When the servo motor rotates, the objects enters in the range of the ultrasonic sensor. The appearance of an object appears on the screen. We have shown the presence of an object with the red mark. If there is no object in the processing application range of the ultrasonic sensor, it shows green marks.


