Advertisement
Jim421616

obstacle_avoid_with_servo_look_left_right

Jul 16th, 2018
442
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.61 KB | None | 0 0
  1. #include <Servo.h>
  2.  
  3. // motor one
  4. int enA = 12; //enable PWM for right motor
  5. int rightFwd = 7; //right forward
  6. int rightBack = 6; //right backward
  7. // motor two
  8. int enB = 11; //enable PWM for left motor
  9. int leftFwd = 5; //left forward
  10. int leftBack = 4; //left backward
  11.  
  12. //ultrasonic sensor
  13. int trig = 2;
  14. int echo = 3;
  15.  
  16. //servo for looking left and right
  17. int servoPin = 8;
  18.  
  19. int runSpeed = 255;
  20. int distance;
  21. int leftDistance;
  22. int rightDistance;
  23. int servoCenter = 100;
  24. int lookAngle = 40;
  25.  
  26. Servo servoMotor;
  27.  
  28. void setup()
  29. {
  30. Serial.begin(9600);
  31. pinMode(enA, OUTPUT);
  32. pinMode(enB, OUTPUT);
  33. pinMode(rightFwd, OUTPUT);
  34. pinMode(rightBack, OUTPUT);
  35. pinMode(leftFwd, OUTPUT);
  36. pinMode(leftBack, OUTPUT);
  37. pinMode(trig, OUTPUT);
  38. pinMode(echo, INPUT);
  39. pinMode(servoPin, OUTPUT);
  40.  
  41. servoMotor.attach(servoPin);
  42. servoMotor.write(servoCenter);
  43. }
  44.  
  45. void loop()
  46. {
  47. if (getDistance() <= 15)
  48. {
  49. allStop();
  50. delay(60);
  51.  
  52. if ((lookLeft() < 10) and (lookRight() < 10))
  53. {
  54. goBackward();
  55. delay(600);
  56. turnLeft();
  57. delay(300);
  58. }
  59. else if (lookLeft() > lookRight())
  60. {
  61. turnLeft();
  62. delay(200);
  63. }
  64. else
  65. {
  66. turnRight();
  67. delay(300);
  68. }
  69. }
  70. else
  71. goForward();
  72.  
  73. }
  74.  
  75. void goForward()
  76. {
  77. Serial.println("Going forward");
  78. analogWrite(enA, runSpeed);
  79. analogWrite(enB, runSpeed);
  80. digitalWrite(leftBack,LOW);
  81. digitalWrite(leftFwd,HIGH);
  82. digitalWrite(rightBack,LOW);
  83. digitalWrite(rightFwd,HIGH);
  84. }
  85.  
  86. void goBackward()
  87. {
  88. Serial.println("Going backward");
  89. analogWrite(enA, runSpeed*3/4);
  90. analogWrite(enB, runSpeed*3/4);
  91. digitalWrite(leftBack,HIGH);
  92. digitalWrite(leftFwd,LOW);
  93. digitalWrite(rightBack,HIGH);
  94. digitalWrite(rightFwd,LOW);
  95. }
  96.  
  97. void turnLeft()
  98. {
  99. Serial.println("Turning left");
  100. analogWrite(enA, runSpeed*3/4);
  101. analogWrite(enB, runSpeed*3/4);
  102. digitalWrite(leftBack,HIGH);
  103. digitalWrite(leftFwd,LOW);
  104. digitalWrite(rightBack,LOW);
  105. digitalWrite(rightFwd,HIGH);
  106. }
  107.  
  108. void turnRight()
  109. {
  110. Serial.println("Turning right");
  111. analogWrite(enA, runSpeed*3/4);
  112. analogWrite(enB, runSpeed*3/4);
  113. digitalWrite(leftBack,LOW);
  114. digitalWrite(leftFwd,HIGH);
  115. digitalWrite(rightBack,HIGH);
  116. digitalWrite(rightFwd,LOW);
  117. }
  118.  
  119. void allStop()
  120. {
  121. Serial.println("Stopping");
  122. digitalWrite(leftBack,LOW);
  123. digitalWrite(leftFwd,LOW);
  124. digitalWrite(rightBack,LOW);
  125. digitalWrite(rightFwd,LOW);
  126. }
  127.  
  128. int getDistance()
  129. {
  130. // Getting the distance from the sensor
  131. long duration, distance;
  132. digitalWrite(trig,HIGH);
  133. delayMicroseconds(1000);
  134. digitalWrite(trig, LOW);
  135. duration=pulseIn(echo, HIGH);
  136. distance =(duration/2)/29.1;
  137. Serial.print(distance);
  138. Serial.println(" cm");
  139. delay(10);
  140. return distance;
  141. }
  142.  
  143. int lookRight()
  144. {
  145. Serial.println("Looking right\n");
  146. servoMotor.write(50);
  147. delay(500);
  148. int distance = getDistance();
  149. delay(100);
  150. servoMotor.write(servoCenter - lookAngle);
  151. delay(100);
  152. servoMotor.write(servoCenter);
  153. return distance;
  154. }
  155.  
  156. int lookLeft()
  157. {
  158. Serial.println("Looking left\n");
  159. servoMotor.write(servoCenter + lookAngle);
  160. delay(500);
  161. int distance = getDistance();
  162. delay(100);
  163. servoMotor.write(servoCenter);
  164. return distance;
  165. delay(100);
  166. }
  167.  
  168. void test()
  169. {
  170. getDistance();
  171. goForward();
  172. delay(1000);
  173. allStop();
  174. delay(1000);
  175. goBackward();
  176. delay(1000);
  177. allStop();
  178. delay(1000);
  179. turnLeft();
  180. delay(1000);
  181. allStop();
  182. delay(1000);
  183. turnRight();
  184. delay(1000);
  185. allStop();
  186. delay(1000);
  187. lookLeft();
  188. lookRight();
  189. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement