Circuit Creation

Radar System using Ultrasonic Sensor

This project demonstrates how to build a simple radar system using an ultrasonic sensor, servo motor, and Arduino. The sensor scans the surroundings and detects objects by measuring distance, just like a real radar system.

Intermediate

Components Required

Circuit Connections

Follow the steps below to connect the ultrasonic sensor and servo motor with the Arduino board. This setup allows the sensor to scan the surroundings by rotating with the servo motor.

  1. Connect the VCC pin of the ultrasonic sensor to the 5V pin on Arduino.
  2. Connect the GND pin of the ultrasonic sensor to the GND pin on Arduino.
  3. Connect the TRIG pin of the sensor to digital pin 10 on Arduino.
  4. Connect the ECHO pin of the sensor to digital pin 11 on Arduino.
  5. Connect the signal pin of the servo motor to digital pin 12 on Arduino.
  6. Connect the VCC of the servo motor to 5V and GND to GND.
Arduino Radar system circuit connection

Here is the circuit diagram for reference. The ultrasonic sensor measures distance, while the servo motor rotates it to create a scanning radar effect.

Arduino Code

                
/*
    Project: Radar System using Ultrasonic Sensor
    description: This project demonstrates how to create a simple radar system using an ultrasonic
     sensor and a servo motor with Arduino. The sensor scans the surroundings by rotating with the 
     servo, measuring distances to objects, and sending data to the Serial Monitor for visualization.

   Components:
     -  Arduino Uno
     -  HC-SR04 Ultrasonic Sensor
     -  SG90 Servo Motor
     -  Breadboard
     -  Jumper Wires
     -  USB Cable 
   Author: Circuit Creation RN

*/


// Includes the Servo library
#include <Servo.h> 

// Defines Tirg and Echo pins of the Ultrasonic Sensor
const int trigPin = 10;
const int echoPin = 11;

// Variables for the duration and the distance
long duration;
int distance;

Servo myServo; // Creates a servo object for controlling the servo motor

void setup() {
  pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
  pinMode(echoPin, INPUT); // Sets the echoPin as an Input

  Serial.begin(9600);
  myServo.attach(12); // Defines on which pin is the servo motor attached
}
void loop() {
  // rotates the servo motor from 15 to 165 degrees
    for(int i=15;i<=165;i++){  
        myServo.write(i);
        delay(30);
        distance = calculateDistance();// Calls a function for calculating the distance measured by the Ultrasonic sensor for each degree
  
        Serial.print(i); // Sends the current degree into the Serial Port
        Serial.print(","); // Sends addition character right next to the previous value needed later in the Processing IDE for indexing
        Serial.print(distance); // Sends the distance value into the Serial Port
        Serial.print("."); // Sends addition character right next to the previous value needed later in the Processing IDE for indexing
    }
  // Repeats the previous lines from 165 to 15 degrees
    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 for calculating the distance measured by the Ultrasonic sensor
    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); // Reads the echoPin, returns the sound wave travel time in microseconds
        distance= duration*0.034/2;
        return distance;
    }
            
            

Upload the Code

  1. Connect Arduino to your computer.
  2. Open Arduino IDE and paste the code.
  3. Select correct board and port.
  4. Click Upload.
  5. Open Processing software to visualize radar output.

Code Explanation

Let us understand how the radar system code works step by step. This project combines a servo motor and an ultrasonic sensor to scan and detect objects.

Including the Library

#include <Servo.h> includes the Servo library which allows us to control the servo motor easily.

Creating Servo Object

Servo myServo; creates a servo object that will control the rotation of the ultrasonic sensor for scanning.

Defining Pins

const int trigPin = 10; and const int echoPin = 11; define the pins connected to the ultrasonic sensor.

setup() Function

The setup() function initializes Serial communication at 9600 baud, sets trigPin as OUTPUT and echoPin as INPUT, and attaches the servo motor to pin 12 using myServo.attach(12).

Servo Scanning

The first for loop rotates the servo from 15° to 165°, and the second loop rotates it back from 165° to 15°. This back-and-forth motion creates a continuous radar scanning effect.

Triggering the Sensor

The trigPin is set HIGH for 10 microseconds to send an ultrasonic pulse. This pulse travels through the air and reflects back when it hits an object.

Reading the Echo

pulseIn(echoPin, HIGH) measures how long the echo signal stays HIGH. This duration represents the time taken by the sound wave to travel to the object and return.

Calculating Distance

The formula distance = duration * 0.034 / 2 converts time into distance in centimeters. The value 0.034 represents the speed of sound in cm/µs.

Custom Function

The calculateDistance() function handles triggering the ultrasonic sensor and calculating the distance. This keeps the main loop clean and organized.

Sending Data to Processing

The Arduino sends data in the format angle,distance. using Serial communication. The comma separates angle and distance values, while the dot indicates the end of each data set. This format is used by Processing software to create the radar visualization.

Processing Visualization

To visualize the radar output, you can use Processing software. It reads the serial data from Arduino and creates a graphical representation of the radar scan. Click here to download the software Processing IDE.


Please copy the following code into a new Processing sketch to visualize the radar system. Make sure to adjust the COM port in the code to match your Arduino's connection. And RUN the code

Processing Code

                
import processing.serial.*; // imports library for serial communication
import java.awt.event.KeyEvent; // imports library for reading the data from the serial port
import java.io.IOException;
Serial myPort; // defines Object Serial
// defines 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 (1200, 700); // ***CHANGE THIS TO YOUR SCREEN RESOLUTION***
  smooth();
  myPort = new Serial(this,"COM8", 9600); // ***CHANGE THE COM PORT NUMBER TO YOUR COM PORT NUMBER***
  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("Indian Lifehacker ", 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(); 
}
                
                

IMPORTANT: Understanding the COM Port

The myPort = new Serial(this,"COM8", 9600); line establishes serial communication between Processing and Arduino. COM8 is the serial port number where my Arduino is connected. This varies depending on your computer and USB port.

How to Find Your COM Port

  1. On Windows: Open Arduino IDE → Tools → Port → You will see options like COM3, COM4, COM8, etc. Select the one with "Arduino Uno" next to it.
  2. On Mac: The ports appear as /dev/cu.usbserial-XXXXX or similar.
  3. On Linux: The ports appear as /dev/ttyUSB0, /dev/ttyUSB1, etc.

Changing the COM Port

To change the COM port in Processing code, simply modify the port name in line:
myPort = new Serial(this,"COM8", 9600);
Replace COM8 with your actual COM port number (e.g., COM3, COM5, COM9, etc.). The baud rate 9600 must match the baud rate set in the Arduino code.

Tips

Common Mistakes & Troubleshooting

What You Learned