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.

