Advertisement
Erfinator

ATOAR - automated terrestrial object avoidance robot V1 code

Dec 27th, 2014
195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.48 KB | None | 0 0
  1. #include <Servo.h> // servo library
  2. const int ping_pin = 9; // signal pin for Ultrasonic Range Sensor
  3. const int min_safe_distance = 20; // The distance the robot will stop at from a wall, 10cm
  4. long duration, distance, right_distance, left_distance; // time it takes for ping to return, distance of ping scan, ping distance of right and left directions
  5. Servo servo; // declaring servo that rotates ultrasoinc sensor
  6.  
  7. // --------------------------------------------------------------------------- Motors
  8. int motor_left_1 = 2;
  9. int motor_left_2 = 4;
  10. int motor_right_1 = 7;
  11. int motor_right_2 = 8;
  12.  
  13. int enable_right = 3;
  14. int enable_left = 5;
  15.  
  16. // --------------------------------------------------------------------------- Setup
  17. void setup() {
  18. servo.attach(10);
  19. servo.write(90);
  20.  
  21. pinMode(motor_left_1, OUTPUT);
  22. pinMode(motor_left_2, OUTPUT);
  23. pinMode(motor_right_1, OUTPUT);
  24. pinMode(motor_right_2, OUTPUT);
  25.  
  26. pinMode(enable_right, OUTPUT);
  27. pinMode(enable_left, OUTPUT);
  28.  
  29. digitalWrite(enable_right, HIGH);
  30. digitalWrite(enable_left, HIGH);
  31. }
  32.  
  33. // --------------------------------------------------------------------------- Loop
  34. void loop() {
  35. int forward_distance = ping();
  36. if(forward_distance > min_safe_distance){
  37. Drive_forward();
  38. }
  39. else{
  40. Stop();
  41. servo.write(5); // look right
  42. delay(500);
  43. right_distance = ping();
  44. delay(1000);
  45. servo.write(175); // look left
  46. delay(500);
  47. left_distance = ping();
  48. delay(1000);
  49. servo.write(90);
  50.  
  51. if(right_distance > left_distance){
  52. Turn_right();
  53. delay(325);
  54. }
  55. else{
  56. Turn_left();
  57. delay(325);
  58. }
  59. }
  60. }
  61.  
  62. // --------------------------------------------------------------------------- Drive
  63. void Stop(){ // Stop robot
  64. digitalWrite(motor_left_1, LOW);
  65. digitalWrite(motor_left_2, LOW);
  66.  
  67. digitalWrite(motor_right_1, LOW);
  68. digitalWrite(motor_right_2, LOW);
  69. delay(25);
  70. }
  71.  
  72. //---------------------------------
  73. void Drive_forward(){ // go forward
  74. analogWrite(enable_left, 249);
  75. analogWrite(enable_right, 250);
  76.  
  77. digitalWrite(motor_left_1, HIGH);
  78. digitalWrite(motor_left_2, LOW);
  79.  
  80. digitalWrite(motor_right_1, HIGH);
  81. digitalWrite(motor_right_2, LOW);
  82. }
  83.  
  84. //---------------------------------
  85. void Drive_backward(){ // go backward
  86. analogWrite(enable_left, 249);
  87. analogWrite(enable_right, 250);
  88.  
  89. digitalWrite(motor_left_1, LOW);
  90. digitalWrite(motor_left_2, HIGH);
  91.  
  92. digitalWrite(motor_right_1, LOW);
  93. digitalWrite(motor_right_2, HIGH);
  94. }
  95.  
  96. //---------------------------------
  97. void Turn_left(){ // turn robot left
  98. analogWrite(enable_left, 249);
  99. analogWrite(enable_right, 250);
  100.  
  101. digitalWrite(motor_left_1, LOW);
  102. digitalWrite(motor_left_2, HIGH);
  103.  
  104. digitalWrite(motor_right_1, HIGH);
  105. digitalWrite(motor_right_2, LOW);
  106. }
  107.  
  108. //---------------------------------
  109. void Turn_right(){ // turn robot right
  110. analogWrite(enable_left, 249);
  111. analogWrite(enable_right, 250);
  112.  
  113. digitalWrite(motor_left_1, HIGH);
  114. digitalWrite(motor_left_2, LOW);
  115.  
  116. digitalWrite(motor_right_1, LOW);
  117. digitalWrite(motor_right_2, HIGH);
  118. }
  119.  
  120. //---------------------------------
  121. unsigned long ping(){ // find distance using ultrasonic sensor
  122. pinMode(ping_pin, OUTPUT);
  123. digitalWrite(ping_pin, LOW);
  124. delay(2);
  125. digitalWrite(ping_pin, HIGH);
  126. delay(5);
  127. digitalWrite(ping_pin, LOW);
  128.  
  129. pinMode(ping_pin, INPUT);
  130. duration = pulseIn(ping_pin, HIGH);
  131. distance = duration/59;
  132. return distance;
  133. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement