Arduino RADAR Sensor

by rickymakthal in Circuits > Arduino

12757 Views, 54 Favorites, 0 Comments

Arduino RADAR Sensor

Arduino RADAR Sensor

I have always been interested in radars that airports and the military use. The ways they implement radio wave to find objects, and know its precise distances, have always been a mystery to me. But, after looking around youtube for a while, I realized that I could make my own mini-model of a radar, that could actually sense objects! So, with my skills with electronics, and my love of radars, I introduce to you the Arduino RADAR Sensor!

Mini RADAR can be assembled:

  • To help Visually Impaired people observe their surroundings
  • For Underwater Exploration
  • For Underwater Plastic Cleanup

Supplies

To create your very own Mini Arduino RADAR system, you will need the following materials:

  • 1 programmable Arduino (I'm using an Arduino Mega, but you can use an UNO or even a MINI)
  • 1 micro servo 9g (I'm using a Tiankongrc SG90 micro servo motor)
  • 1 HC-SR04 Ultrasonic Ranging Module
  • 1 USB A to USB B cable (For connecting the Arduino to your computer)
  • 4 Female to Male Jumper Wires (For your Ultrasonic Sensor)
  • 3 Male to Male Jumper Wires (For your Servo Motor)
  • Arduino IDE Software
  • Processing 4 Software

Optional Materials:

  • Double Sided Foam Tape
  • Arduino Prototype Shield
  • Electrical Tape

Optional Prototype Shield

IMG_1675.jpg
IMG_1674.jpg

In my opinion, the prototype shield for the Arduino MEGA is a lifesaver! I love how you can solder on it without actually damaging your Arduino. So, for this project, I will be using the Arduino MEGA Prototype Shield. I won't actually be soldering on to the shield, but it makes for an easier surface to mount the servo motor on.

If you would like to follow along, all you need to do is to place your Shield on top of the Arduino and push down until they are flush together.

Servo to Arduino

Servo Motor To Arduino.png
IMG_1673.jpg

The first step in making your own Mini Arduino RADAR system is to connect the servo motor to the Arduino. In our model, the servo motor will be our platform in which the Ultrasonic Ranging Module will mount on to. This will allow for a 180 degree rotation and view angle for the RADAR.


***Before you do the following, be sure to connect the three Male to Male Jumper wires to the three wires on the servo. If you skip this, you will not be able to connect your Servo motor to the Arduino.***

  • Connect the ground wire to the ground pin on your Arduino.
  • Connect the VCC wire to the 5V pin on your Arduino.
  • Connect the Signal wire to Pin 12 of your Arduino.


A Schematic and Image for this step is attached below.

Ultrasonic Module to Arduino

Ultrasonic Module to Arduino.png
IMG_1672.jpg

The next step in making your own Mini Arduino RADAR system is to connect the Ultrasonic Ranging Module to the Arduino. In our model, the Ultrasonic Module will be the "Radar" of our RADAR. This will be the device that actually senses to see if there are any objects nearby.

***Before you do the following, be sure to connect the four Male to Female Jumper wires to the four pins on the Ultrasonic Module. If you skip this, you will not be able to connect your Ultrasonic Module to the Arduino.***

  • Connect the ground wire to the ground pin on your Arduino.
  • Connect the VCC wire to the 5V pin on your Arduino. (You may need to use another 5V pin. If you are not using an Arduino MEGA, you may need to use a breadboard and use your 5V pin to connect both VCC's to the same pin)
  • Connect the Echo wire to Pin 11 of your Arduino.
  • Connect the Trigger (Trig) wire to Pin 10 of your Arduino.


A Schematic and Image for this step is attached below.

Ultrasonic and Servo

IMG_1671.jpg

The next step in making your own Mini Arduino RADAR system is to glue the Ultrasonic Module to the Servo Motor. This will allow for 180 degree rotation of the Ultrasonic Module.

Assembling All of the Parts

IMG_1670.jpg

This is a collection of photos of how I assembled my Mini RADAR. I used some double sided tape to help stick the servo motor to the Arduino, and some hot glue to mount the ultrasonic module to the servo motor.

Adding Code to Arduino IDE

IMG_1676.jpg

The next step in making your own Mini Arduino RADAR system is add code to our Arduino.


The code is attached below:

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


Be sure to upload the code onto your Arduino by clicking the Upload button after you plugged in the Arduino into your computer!

Adding Code to Processing 4

The next step in making your own Mini Arduino RADAR system is add code to our Arduino.

***Before running the code, be sure to change the COM3 port (When myPort is being defined) to the port that your Arduino is on.

Check under Tools --> Port in the Arduino IDE***


The code is attached 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,"COM3", 9600); // ****CHANGE THE COM3 To the PORT YOUR ARDUINO IS ON!!!!****
 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("Arduino Radar", width-width*0.975, height-height*0.0277);
  text("Angle: " + iAngle +" °", width-width*0.68, height-height*0.0277);
  text("Distance: ", width-width*0.36, height-height*0.0277);
  if(iDistance<40) {
  text("        " + iDistance +" cm", width-width*0.26, 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(); 
}

Run the Code!

Arduino RADAR Sensor

Press the run button, and watch your RADAR in action!