Home ARDUINO How To Build Radar with Arduino using HC-SR04 and SG90 Servo

How To Build Radar with Arduino using HC-SR04 and SG90 Servo

0

In this Arduino Tutorial, I will show you how you can make this cool looking radar using the Arduino Board and the Processing Development Environment. You can watch the following video or read the written tutorial below for more details.

Build Radar with Arduino using HC-SR04 and SG90 Servo

Overview

All that is required of this Arduino project is an ultrasonic sensor for detecting objects, a small fan servo motor for rotating sensors, and an Arduino board for controlling them. You can watch the following video or read the written tutorial below

The device uses an ultrasonic sensor to detect objects so it can work even at night. In addition, we also installed U.S. (ultrasonic) sensors on servo motors that can be set to automatically rotate to scan the area, or we can use our mobile application to manually rotate so that we can focus the ultrasonic sensors we require The direction and feel of the object that exists there. The information sensed by all U.S. sensors will be broadcast to our smartphone via the Bluetooth module (HC-05). So it will work like sonar or radar.

Let’s see what we need to do for this project.

Collect Hardware

You can get these components from any of the sites below:

Collect Software

  • Arduino IDE
  • Processing

Circuit Diagram

Connect the pins as shown in figure

Upload Source
Upload Source with Arduino IDE and follow the screenshot as I mention below in the figure

Select your Board

// 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;

}

Execute Computer Program

Open Processing and Follow the steps mention below:-

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 (1200, 700); // CHANGE THIS TO YOUR SCREEN RESOLUTION

smooth();

myPort = new Serial(this,”COM8″, 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.

}

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-width0.0625),(width-width0.0625),PI,TWO_PI);

arc(0,0,(width-width0.27),(width-width0.27),PI,TWO_PI);

arc(0,0,(width-width0.479),(width-width0.479),PI,TWO_PI);

arc(0,0,(width-width0.687),(width-width0.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-height0.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(pixsDistancecos(radians(iAngle)),-pixsDistancesin(radians(iAngle)),(width-width0.505)cos(radians(iAngle)),-(width-width0.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-height0.12)cos(radians(iAngle)),-(height-height0.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-width0.3854,height-height0.0833);

text(“20cm”,width-width0.281,height-height0.0833);

text(“30cm”,width-width0.177,height-height0.0833);

text(“40cm”,width-width0.0729,height-height0.0833);

textSize(40);

text(“Pak Cyber Boy “, width-width0.875, height-height0.0277);

text(“Angle: ” + iAngle +” °”, width-width0.48, height-height0.0277);

text(“Distance: “, width-width0.26, height-height0.0277);

if(iDistance<40) {

text(”        ” + iDistance +” cm”, width-width0.225, height-height0.0277);

}

textSize(25);

fill(98,245,60);

translate((width-width0.4994)+width/2cos(radians(30)),(height-height0.0907)-width/2sin(radians(30)));

rotate(-radians(-60));

text(“30°”,0,0);

resetMatrix();

translate((width-width0.503)+width/2cos(radians(60)),(height-height0.0888)-width/2sin(radians(60)));

rotate(-radians(-30));

text(“60°”,0,0);

resetMatrix();

translate((width-width0.507)+width/2cos(radians(90)),(height-height0.0833)-width/2sin(radians(90)));

rotate(radians(0));

text(“90°”,0,0);

resetMatrix();

translate(width-width0.513+width/2cos(radians(120)),(height-height0.07129)-width/2sin(radians(120)));

rotate(radians(-30));

text(“120°”,0,0);

resetMatrix();

translate((width-width0.5104)+width/2cos(radians(150)),(height-height0.0574)-width/2sin(radians(150)));

rotate(radians(-60));

text(“150°”,0,0);

popMatrix();

}

You may also like to read these articles

How to Build Gesture Sensing project using APDS-9960 with Arduino

Getting started with LCD Shield, Arduino and connect the DS3231

LEAVE A REPLY

Please enter your comment!
Please enter your name here

six + 3 =