STEMpedia
Published © CC BY

Make a Radar Using Ultrasonic Sensor Using Arduino

This project will show you how to make a radar using an ultrasonic sensor.

IntermediateFull instructions provided3,054
Make a Radar Using Ultrasonic Sensor Using Arduino

Things used in this project

Hardware components

evive Starter Kit
STEMpedia evive Starter Kit
×1
Ultrasonic Sensor - HC-SR04 (Generic)
Ultrasonic Sensor - HC-SR04 (Generic)
×1
SG90 Micro-servo motor
SG90 Micro-servo motor
×1
Jumper wires (generic)
Jumper wires (generic)
×1
Ultrasonic Holder
×1
Arduino Mega 2560
Arduino Mega 2560
×1

Software apps and online services

Arduino IDE
Arduino IDE
Processing
The Processing Foundation Processing

Story

Read more

Schematics

Fritzing Diagram of radar

Code

Arduino Code

Arduino
#include<evive.h>

// Defines Tirg and Echo pins of the Ultrasonic Sensor
const int trig = 2;
const int echo = 3;
   

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

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

void setup() 
   {
        pinMode(trig, OUTPUT); // Sets the trigPin as an Output
        pinMode(echo, INPUT); // Sets the echoPin as an Input
        Serial.begin(9600);
       
        mServo.attach(44); // Defines on which pin is the servo motor attached

         tft_init(INITR_GREENTAB);
        tft.setRotation(1);
        tft.fillScreen(ST7735_BLACK);

       tft.setCursor(25,10);
       tft.setTextSize(2);
       tft.setTextColor(ST7735_WHITE,ST7735_BLACK);
       tft.print("STEMpedia");

       tft.setCursor(25,50);
       tft.setTextSize(1.8);
       tft.setTextColor(ST7735_GREEN,ST7735_BLACK);
       tft.print("ULTRASONIC RADAR");

       tft.setTextColor(ST7735_GREEN,ST7735_BLACK);
       tft.setCursor(0,105);
       tft.setTextSize(1.8);
       tft.print("FOR MORE INFORMATION VISIT");
       tft.setCursor(30,115);
       tft.setTextColor(ST7735_WHITE,ST7735_BLACK);
       tft.print("thestempedia.com");

   }

void loop()
     {
      
       // rotates the servo motor from 0 to 180 degrees
       
      for(int i=0;i<=180;i++)
      {  
        
         delay(30);
         distance = calculateDistance();  // Calls a function for calculating the distance measured by the Ultrasonic sensor for each degree
         mServo.write(i);             
         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 180 to 0 degrees
  
  for(int i=180;i>0;i--)
      {  
       
        delay(30);
        distance = calculateDistance();
        mServo.write(i);
        Serial.print(i);
        Serial.print(",");
        Serial.print(distance);
        Serial.print(".");
     }
}

// Function for calculating the distance measured by the Ultrasonic sensor

int calculateDistance()
     { 
  
          digitalWrite(trig, LOW); 
          delayMicroseconds(2);
          // Sets the trigPin on HIGH state for 10 micro seconds
          digitalWrite(trig, HIGH); 
          delayMicroseconds(10);
          digitalWrite(trig, LOW);
          duration = pulseIn(echo, HIGH); // Reads the echoPin, returns the sound wave travel time in microseconds
          distance= duration*0.034/2;
          return distance;
     }

Processing Code for Radar

Java
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
// 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, 700); // ***CHANGE THIS TO YOUR SCREEN RESOLUTION***
 smooth();
 myPort = new Serial(this,"/dev/cu.usbmodem14101", 9600); // starts the serial communication
 myPort.bufferUntil('.'); // reads the data from the serial port up to the character '.'. So actually it reads this: angle,distance.
 orcFont = createFont("OCRAExtended" ,30);
}
void draw() {
  
  fill(98,245,31);
  textFont(orcFont);
  // 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(25);
  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(); 
}

evive Library

C/C++
No preview (download only).

Credits

STEMpedia

STEMpedia

42 projects • 168 followers
STEMpedia blends theory with experiential learning by offering state-of-the-art technology, projects, tutorials, courses, and much more.

Comments