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:

  1. Arduino UNO board
  2. USB cable connector for Arduino UNO
  3. Ultra Sonic HC-SR04
  4. Jumper wires male to female
  5. Tower Pro SG90 Servo Motor

Requirements of software in this Project:

  1. Arduino IDE
  2. 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.

Compile 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.

Uploading Load

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."

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.

save and run

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.

Angle and Distance
Arduino UNO Radar Project