RADAR project uses ultrasonic sensor to detect any object in its range and servo is used to rotate the ultrasonic sensor in 180 degree repeatedly to detect any object in 180 degree range. It is just like mini radar it recognizes the object in the path and makes a red affected area near the object. so, this is called radar and it works on the Ultrasonic frequency. it consists ultrasonic sensor mounted over the servo motor and connected to software that shows the output on the computer screen. the interface of this software is pretty the same as the Radar interface.
Components
Ardino Uno, Cable, Ultrasonic sensor, Servo motor, Lcd Display, wires and Processing Software
How Does Radar using Arduino Works?
The ultrasonic sensor rotates with the servo motor and transmitted the ultrasonic waves (40 kHz) during this time. and the whole time a graph interface make in the simulation software. and if any object comes under the range of the ultrasonic sensor it starts to detect the object. at that time the graph interface inside the software becomes red in the object area. ultrasonic sensor work as an object detector in this project. Radar using ultrasonic sensor works in software makes the reaction according to the waves received.
Ultrasonic sensors have two terminals one is a transmitter and another is the receiver. The transmitter terminal is known as the Trigger and the receiver terminal is known as the echo. Arduino continuously gives a command to the Servo motor to rotate. and the transmitter transmits the signal parallelly likewise the software also makes the graph. The ultrasonic sensor gave a different signal to the Arduino if anything comes in the path. then Arduino notifies the software for the affected region. the project depends on the ultrasonic sensor working. Radar using Arduino, ultrasonic sensor, and servo motor contents no other major components.
Distance Calculation
Duration = time-span between emitting the signal and receiving the echo.
The ultrasonic wave is basically a sound wave that travels at a speed of 340 m/s (0.034 cm/s). The ultrasonic sensor is measuring the time it takes to hit the object and then come back but we need only time that it takes to hit the object. So, we will divide it by 2.
Distance= duration*0.034/2;
Ardino code
// Includes the Servo vlibrary #include <Servo.h> #include <LiquidCrystal.h> // Defines Tirg and Echo pins of the Ultrasonic Sensor const int trigPin = 4; const int echoPin = 6; int led = 2; LiquidCrystal lcd(A5,A4,A3,A2,A1,A0); // Variables for the duration and the distance long duration; int distance; // Creates a servo object for controlling the servo motor Servo myServo; void setup() { lcd.begin(16,2); pinMode(led, OUTPUT); pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output pinMode(echoPin, INPUT); // Sets the echoPin as an Input Serial.begin(9600); myServo.attach(8); // Defines on which pin is the servo motor attached lcd.print(" Ultra sonic"); lcd.setCursor(0,1); lcd.print("Ultrasonic Radar"); delay(2000); } 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 lcd.clear(); lcd.print("Distance:"); lcd.print(distance); //Print distance in lcd lcd.print("cm"); if( distance <= 10){ lcd.setCursor(0,2); lcd.print("***- Danger -***"); //Print danger when range is below 10cm digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level) }else{ digitalWrite(led, LOW); // turn the LED off by making the voltage LOW } } // 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("."); lcd.clear(); lcd.print("Distance:"); lcd.print(distance); lcd.print("cm"); if( distance <= 10){ lcd.setCursor(0,2); lcd.print("***- Danger -***"); digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level) }else{ digitalWrite(led, LOW); // turn the LED off by making the voltage LOW } } } // 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; }
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 // 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, "COM6", 9600); // starts the serial communication /importANT 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("Pak Cyber Boy ", 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(); }