Advertisement
Guest User

nih

a guest
Jan 23rd, 2020
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.92 KB | None | 0 0
  1. /***************************************************************************************
  2. * ARDUINO LINE FOLLOWER AND SUMO (BLUETOOTH CONTROLLED) ROBOT *
  3. * CODERS: *
  4. * ALMER RASHAD *
  5. * PRAJNA *
  6. * R. W. ANDHIKA *
  7. * WAHIB ADIYATMA *
  8. * *
  9. * Reference: *
  10. * https://www.instructables.com/id/How-to-use-the-L293D-Motor-Driver-Arduino-Tutorial/ *
  11. * https://create.arduino.cc/projecthub/robocircuits/line-follower-robot-arduino-299bae *
  12. * https://www.youtube.com/watch?v=Q36NbjPMV5k *
  13. * https://www.youtube.com/watch?v=t7k9D1jDEtk *
  14. * https://create.arduino.cc/projecthub/samanfern/bluetooth-controlled-car-d5d9ca *
  15. ****************************************************************************************/
  16.  
  17. //Note for Prajna: to upload the code to arduino, write this permission in terminal $sudo chmod a+rw /dev/ttyUSB0
  18.  
  19. //Motor A (right)
  20. #define motor_pin_1 5 // Pin 14 of L293
  21. #define motor_pin_2 6 // Pin 10 of L293
  22. //Motor B (left)
  23. #define motor_pin_3 10 // Pin 7 of L293
  24. #define motor_pin_4 9 // Pin 2 of L293
  25.  
  26. //photosensor IR
  27. #define left_sensor_pin A0
  28. #define right_sensor_pin A1
  29.  
  30. //baud_rate
  31. #define baud_rate 9600
  32.  
  33. void setup(){
  34. //Set pins as outputs
  35. pinMode(motor_pin_1, OUTPUT);
  36. pinMode(motor_pin_2, OUTPUT);
  37. pinMode(motor_pin_3, OUTPUT);
  38. pinMode(motor_pin_4, OUTPUT);
  39. Serial.begin(baud_rate);
  40. }
  41.  
  42. void motorAClockwise(int speed){
  43. analogWrite(motor_pin_1,0);
  44. analogWrite(motor_pin_2,speed);
  45. }
  46.  
  47. void motorACounterClockwise(int speed){
  48. analogWrite(motor_pin_1,speed);
  49. analogWrite(motor_pin_2,0);
  50. }
  51.  
  52. void motorBClockwise(int speed){
  53. analogWrite(motor_pin_3,0);
  54. analogWrite(motor_pin_4,speed);
  55. }
  56. void motorBCounterClockwise(int speed){
  57. analogWrite(motor_pin_3,speed);
  58. analogWrite(motor_pin_4,0);
  59. }
  60.  
  61. void stop(){
  62. motorAClockwise(0);
  63. motorBClockwise(0);
  64. }
  65.  
  66. void forward(int speed){
  67. motorAClockwise(speed);
  68. motorBCounterClockwise(speed);
  69. }
  70.  
  71. void backward(int speed){
  72. motorACounterClockwise(speed);
  73. motorBClockwise(speed);
  74. }
  75.  
  76. void turnLeft(int speed){
  77. motorAClockwise(speed);
  78. motorBClockwise(speed);
  79. }
  80.  
  81. void turnRight(int speed){
  82. motorACounterClockwise(speed);
  83. motorBCounterClockwise(speed);
  84. }
  85.  
  86. void forwardRight(int speed){
  87. motorAClockwise(speed/2);
  88. motorBCounterClockwise(speed);
  89. }
  90.  
  91. void forwardLeft(int speed){
  92. motorAClockwise(speed);
  93. motorBCounterClockwise(speed/2);
  94. }
  95.  
  96. void backwardRight(int speed){
  97. motorACounterClockwise(speed/2);
  98. motorBClockwise(speed);
  99. }
  100.  
  101. void backwardLeft(int speed){
  102. motorACounterClockwise(speed);
  103. motorBClockwise(speed/2);
  104. }
  105.  
  106. bool isBlack(int sensor){
  107. return sensor<500;
  108. }
  109.  
  110. void lineFollower(){
  111. //speed is from 0 to 255
  112. int left_sensor=analogRead(left_sensor_pin);
  113. int right_sensor=analogRead(right_sensor_pin);
  114. if (!isBlack(left_sensor) && !isBlack(right_sensor)){
  115. forward(180);
  116. }
  117. else if (isBlack(left_sensor) && !isBlack(right_sensor)){
  118. turnLeft(100);
  119. }
  120. else if (!isBlack(left_sensor) && isBlack(right_sensor)){
  121. turnRight(100);
  122. }
  123. else{
  124. stop();
  125. }
  126. }
  127.  
  128. bool isNumber(char c){
  129. if (((int)c)<48 || ((int)c)>57){
  130. return 0;
  131. }
  132. return 1;
  133. }
  134.  
  135. int num(char c){
  136. return ((int)c) - 48;
  137. }
  138.  
  139. int speed_now=0;
  140. void sumo(){
  141. //speed is from 0 to 255
  142. stop();
  143. char command = Serial.read();
  144. if (isNumber(command)){
  145. speed_now=25*num(command)+5;
  146. }
  147. switch(command){
  148. case 'F':
  149. forward(speed_now);
  150. break;
  151. case 'B':
  152. backward(speed_now);
  153. break;
  154. case 'L':
  155. turnLeft(speed_now);
  156. break;
  157. case 'R':
  158. turnRight(speed_now);
  159. break;
  160. case 'G':
  161. forwardLeft(speed_now);
  162. break;
  163. case 'I':
  164. forwardRight(speed_now);
  165. break;
  166. case 'H':
  167. backwardLeft(speed_now);
  168. break;
  169. case 'J':
  170. backwardRight(speed_now);
  171. break;
  172. case 'q':
  173. speed_now=255;
  174. break;
  175. }
  176. }
  177.  
  178. void loop(){
  179. //if you use the robot as sumo robot, call sumo()
  180. //if you use the robot as line follower robot, call lineFollower()
  181. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement