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.
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:
- Ultrasonic sensor HC- SR04 View on Amazon
- Servo Motor View on Amazon
- Arduino Board View on Amazon
- Breadboard and Jump Wires View on Amazon
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