Defensive U-DAR System
In this project i will show you U-DAR system ( As similar to radar system) using the Arduino Board and the Processing Development Environment. Now, of course you have doubt about name which i had given to this project,that is U-DAR SYSTEM which means ultrasonic detection and ranging system. I had used ultrasonic sensor for obstacle detection and ranging, so it will use sonic wave and detect object from distance.
All you need for this Project is an Ultrasonic Sensor for detecting the objects, a Servo Motor for rotating the sensor and an Arduino Board for controlling them.Here in this project when ultrasonic sensor is rotating it will transmit ultrasonic wave which will reflected back when obstacle comes in the path. After that reflected wave will be received by receiver.
The speed of sound wave is approximately 341 m/s in air. The ultrasonic sensor uses this information along with the time difference between sending and receiving the sound pulse to determine the distance to an object. It uses the following mathematical equation:
Distance = Time x speed of sound divided by 2
Time = the time between when an ultrasonic wave is transmitted and when it is received.
Here is the diagram that showing work of ultrasonic sensor
ultrasonic sensor
APPARATUS:
1. ULTRASONIC SENSOR
2. ARDUINO CONTROLLER
3. MONITORING SCREEN
4. SERVO MOTOR
5. CONNECTING WIRE
2. ARDUINO CONTROLLER
3. MONITORING SCREEN
4. SERVO MOTOR
5. CONNECTING WIRE
WORKING PRINCIPLE:
Here in this project first we get angle and distance of obstacle using arduino serial monitor and then use that data in processing IDE for picture presentation of U-DAR system with features like obstacle in range or out range, it's angle and distance.
CIRCUIT DIAGRAM:
ARDUINO CODE:
- // 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;
PROCESSING CODE:
- 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 (1920, 1080); // ***CHANGE THIS TO YOUR SCREEN RESOLUTION***
- smooth();
- myPort = new Serial(this,"COM4", 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 = loadFont("OCRAExtended-30.vlw");
- }
- 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(40);
- 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(radian
- s(-60));
- text("150°",0,0);
- popMatrix();
- }
YOU CAN ALSO VISIT TO GIVEN LINK FOR DETAIL KNOWLEDGE OF THIS PROJECT
THANK YOU FOR WATCHING

No comments:
Post a Comment