Tuesday, 13 September 2016

DEFENSIVE U-DAR SYSTEM

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.

   THEORY:

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

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:
    1. // Includes the Servo library
    2. #include <Servo.h>.
    3. // Defines Tirg and Echo pins of the Ultrasonic Sensor
    4. const int trigPin = 10;
    5. const int echoPin = 11;
    6. // Variables for the duration and the distance
    7. long duration;
    8. int distance;
    9. Servo myServo; // Creates a servo object for controlling the servo motor
    10. void setup() {
    11. pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
    12. pinMode(echoPin, INPUT); // Sets the echoPin as an Input
    13. Serial.begin(9600);
    14. myServo.attach(12); // Defines on which pin is the servo motor attached
    15. }
    16. void loop() {
    17. // rotates the servo motor from 15 to 165 degrees
    18. for(int i=15;i<=165;i++){
    19. myServo.write(i);
    20. delay(30);
    21. distance = calculateDistance();// Calls a function for calculating the distance measured by the Ultrasonic sensor for each degree
    22. Serial.print(i); // Sends the current degree into the Serial Port
    23. Serial.print(","); // Sends addition character right next to the previous value needed later in the Processing IDE for indexing
    24. Serial.print(distance); // Sends the distance value into the Serial Port
    25. Serial.print("."); // Sends addition character right next to the previous value needed later in the Processing IDE for indexing
    26. }
    27. // Repeats the previous lines from 165 to 15 degrees
    28. for(int i=165;i>15;i--){
    29. myServo.write(i);
    30. delay(30);
    31. distance = calculateDistance();
    32. Serial.print(i);
    33. Serial.print(",");
    34. Serial.print(distance);
    35. Serial.print(".");
    36. }
    37. }
    38. // Function for calculating the distance measured by the Ultrasonic sensor
    39. int calculateDistance(){
    40. digitalWrite(trigPin, LOW);
    41. delayMicroseconds(2);
    42. // Sets the trigPin on HIGH state for 10 micro seconds
    43. digitalWrite(trigPin, HIGH);
    44. delayMicroseconds(10);
    45. digitalWrite(trigPin, LOW);
    46. duration = pulseIn(echoPin, HIGH); // Reads the echoPin, returns the sound wave travel time in microseconds
    47. distance= duration*0.034/2;
    48. return distance;
PROCESSING CODE:
  1. Serial myPort; // defines Object Serial
  2. // defubes variables
  3. String angle="";
  4. String distance="";
  5. String data="";
  6. String noObject;
  7. float pixsDistance;
  8. int iAngle, iDistance;
  9. int index1=0;
  10. int index2=0;
  11. PFont orcFont;
  12. void setup() {
  13. size (1920, 1080); // ***CHANGE THIS TO YOUR SCREEN RESOLUTION***
  14. smooth();
  15. myPort = new Serial(this,"COM4", 9600); // starts the serial communication
  16. myPort.bufferUntil('.'); // reads the data from the serial port up to the character '.'. So actually it reads this: angle,distance.
  17. orcFont = loadFont("OCRAExtended-30.vlw");
  18. }
  19. void draw() {
  20. fill(98,245,31);
  21. textFont(orcFont);
  22. // simulating motion blur and slow fade of the moving line
  23. noStroke();
  24. fill(0,4);
  25. rect(0, 0, width, height-height*0.065);
  26. fill(98,245,31); // green color
  27. // calls the functions for drawing the radar
  28. drawRadar();
  29. drawLine();
  30. drawObject();
  31. drawText();
  32. }
  33. void serialEvent (Serial myPort) { // starts reading data from the Serial Port
  34. // reads the data from the Serial Port up to the character '.' and puts it into the String variable "data".
  35. data = myPort.readStringUntil('.');
  36. data = data.substring(0,data.length()-1);
  37. index1 = data.indexOf(","); // find the character ',' and puts it into the variable "index1"
  38. 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
  39. 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
  40. // converts the String variables into Integer
  41. iAngle = int(angle);
  42. iDistance = int(distance);
  43. }
  44. void drawRadar() {
  45. pushMatrix();
  46. translate(width/2,height-height*0.074); // moves the starting coordinats to new location
  47. noFill();
  48. strokeWeight(2);
  49. stroke(98,245,31);
  50. // draws the arc lines
  51. arc(0,0,(width-width*0.0625),(width-width*0.0625),PI,TWO_PI);
  52. arc(0,0,(width-width*0.27),(width-width*0.27),PI,TWO_PI);
  53. arc(0,0,(width-width*0.479),(width-width*0.479),PI,TWO_PI);
  54. arc(0,0,(width-width*0.687),(width-width*0.687),PI,TWO_PI);
  55. // draws the angle lines
  56. line(-width/2,0,width/2,0);
  57. line(0,0,(-width/2)*cos(radians(30)),(-width/2)*sin(radians(30)));
  58. line(0,0,(-width/2)*cos(radians(60)),(-width/2)*sin(radians(60)));
  59. line(0,0,(-width/2)*cos(radians(90)),(-width/2)*sin(radians(90)));
  60. line(0,0,(-width/2)*cos(radians(120)),(-width/2)*sin(radians(120)));
  61. line(0,0,(-width/2)*cos(radians(150)),(-width/2)*sin(radians(150)));
  62. line((-width/2)*cos(radians(30)),0,width/2,0);
  63. popMatrix();
  64. }
  65. void drawObject() {
  66. pushMatrix();
  67. translate(width/2,height-height*0.074); // moves the starting coordinats to new location
  68. strokeWeight(9);
  69. stroke(255,10,10); // red color
  70. pixsDistance = iDistance*((height-height*0.1666)*0.025); // covers the distance from the sensor from cm to pixels
  71. // limiting the range to 40 cms
  72. if(iDistance<40){
  73. // draws the object according to the angle and the distance
  74. line(pixsDistance*cos(radians(iAngle)),-pixsDistance*sin(radians(iAngle)),(width-width*0.505)*cos(radians(iAngle)),-(width-width*0.505)*sin(radians(iAngle)));
  75. }
  76. popMatrix();
  77. }
  78. void drawLine() {
  79. pushMatrix();
  80. strokeWeight(9);
  81. stroke(30,250,60);
  82. translate(width/2,height-height*0.074); // moves the starting coordinats to new location
  83. line(0,0,(height-height*0.12)*cos(radians(iAngle)),-(height-height*0.12)*sin(radians(iAngle))); // draws the line according to the angle
  84. popMatrix();
  85. }
  86. void drawText() { // draws the texts on the screen
  87. pushMatrix();
  88. if(iDistance>40) {
  89. noObject = "Out of Range";
  90. }
  91. else {
  92. noObject = "In Range";
  93. }
  94. fill(0,0,0);
  95. noStroke();
  96. rect(0, height-height*0.0648, width, height);
  97. fill(98,245,31);
  98. textSize(25);
  99. text("10cm",width-width*0.3854,height-height*0.0833);
  100. text("20cm",width-width*0.281,height-height*0.0833);
  101. text("30cm",width-width*0.177,height-height*0.0833);
  102. text("40cm",width-width*0.0729,height-height*0.0833);
  103. textSize(40);
  104. text("Object: " + noObject, width-width*0.875, height-height*0.0277);
  105. text("Angle: " + iAngle +" °", width-width*0.48, height-height*0.0277);
  106. text("Distance: ", width-width*0.26, height-height*0.0277);
  107. if(iDistance<40) {
  108. text(" " + iDistance +" cm", width-width*0.225, height-height*0.0277);
  109. }
  110. textSize(25);
  111. fill(98,245,60);
  112. translate((width-width*0.4994)+width/2*cos(radians(30)),(height-height*0.0907)-width/2*sin(radians(30)));
  113. rotate(-radians(-60));
  114. text("30°",0,0);
  115. resetMatrix();
  116. translate((width-width*0.503)+width/2*cos(radians(60)),(height-height*0.0888)-width/2*sin(radians(60)));
  117. rotate(-radians(-30));
  118. text("60°",0,0);
  119. resetMatrix();
  120. translate((width-width*0.507)+width/2*cos(radians(90)),(height-height*0.0833)-width/2*sin(radians(90)));
  121. rotate(radians(0));
  122. text("90°",0,0);
  123. resetMatrix();
  124. translate(width-width*0.513+width/2*cos(radians(120)),(height-height*0.07129)-width/2*sin(radians(120)));
  125. rotate(radians(-30));
  126. text("120°",0,0);
  127. resetMatrix();
  128. translate((width-width*0.5104)+width/2*cos(radians(150)),(height-height*0.0574)-width/2*sin(radians(150)));
  129. rotate(radian
  130. s(-60));
  131. text("150°",0,0);
  132. popMatrix();
  133. }
YOU CAN ALSO VISIT TO GIVEN LINK FOR DETAIL KNOWLEDGE OF THIS PROJECT

THANK YOU FOR WATCHING

No comments:

Post a Comment