Advertisement
Guest User

Untitled

a guest
May 20th, 2018
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.53 KB | None | 0 0
  1. //motor speed tem de ser entre 0 e 255
  2.  
  3. int enA = 2; // Velocidade do motor A
  4. int Motor_Esquerda_Tras = 6; // Quando ativado, o motor A anda para trás IN1
  5. int Motor_Esquerda_Frente = 7; // Quando ativado, o motor A anda para a frente IN2
  6.  
  7. int enB = 3; // Velocidade do motor B
  8. int Motor_Direita_Frente = 11; // Quando ativado, o motor B anda para a frente IN3
  9. int Motor_Direita_Tras = 12; // Quando ativado, o motor B anda para trás Motor_Direita_Tras
  10.  
  11. int sensor_Esquerda = A5; // Sensor da esquerda
  12. int sensor_Meio = A7; // Sensor do meio
  13. int sensor_Direita = A6; // Sensor da direita
  14.  
  15. long distanciaDireita;
  16. long distanciaEsquerda;
  17. long tempo1;
  18. long tempo2; // Tempo que demora a transmitir o sinal
  19. int trigDireita = 10;
  20. int trigEsquerda = 5;
  21. int echoDireita = 9;
  22. int echoEsquerda = 4;
  23.  
  24.  
  25. const int encoder = 8;
  26. const float diametro = 6.5;
  27. const int pulsos_por_volta = 20;
  28. const float aux = diametro * PI / pulsos_por_volta;
  29. double Distancia_Percorrida;
  30. volatile int pulsos = 0;
  31.  
  32. void setup() {
  33. Serial.begin(9600);
  34. pinMode(enA, OUTPUT);
  35. pinMode(enB, OUTPUT);
  36. pinMode(Motor_Esquerda_Tras, OUTPUT);
  37. pinMode(Motor_Esquerda_Frente, OUTPUT);
  38. pinMode(Motor_Direita_Frente, OUTPUT);
  39. pinMode(Motor_Direita_Tras, OUTPUT);
  40.  
  41. pinMode(trigDireita, OUTPUT); //trigDireita
  42. pinMode(echoDireita, INPUT); //echoDireita
  43. pinMode(trigEsquerda, OUTPUT); //trigEsquerda
  44. pinMode(echoEsquerda, INPUT); //echoEsquerda
  45.  
  46. pinMode(sensor_Esquerda, INPUT);
  47. pinMode(sensor_Meio, INPUT);
  48. pinMode(sensor_Direita, INPUT);
  49.  
  50. pinMode(encoder, HIGH);
  51. attachInterrupt(digitalPinToInterrupt(encoder), contador, FALLING);
  52. }
  53.  
  54. void FORWARD() // Ambos os motores andam para a frente
  55. {
  56. digitalWrite(Motor_Esquerda_Tras, LOW);
  57. digitalWrite(Motor_Esquerda_Frente, HIGH);
  58. analogWrite(enA, 180);
  59. digitalWrite(Motor_Direita_Frente, HIGH);
  60. digitalWrite(Motor_Direita_Tras, LOW);
  61. analogWrite(enB, 165);
  62. Serial.print("...FORWARD...");
  63. }
  64.  
  65. void FORWARD_RIGHT() // O motor da direita anda para a frente
  66. {
  67. digitalWrite(Motor_Esquerda_Tras, LOW);
  68. digitalWrite(Motor_Esquerda_Frente, HIGH);
  69. analogWrite(enA, 190);
  70. digitalWrite(Motor_Direita_Frente, LOW);
  71. digitalWrite(Motor_Direita_Tras, LOW);
  72. Serial.print("...FORWARD_RIGHT...");
  73. }
  74.  
  75. void FORWARD_LEFT() // O motor da esquerda anda para a frente
  76. {
  77. digitalWrite(Motor_Direita_Frente, HIGH);
  78. digitalWrite(Motor_Direita_Tras, LOW);
  79. analogWrite(enB, 175);
  80. digitalWrite(Motor_Esquerda_Tras, LOW);
  81. digitalWrite(Motor_Esquerda_Frente, LOW);
  82. Serial.print("...FORWARD_LEFT...");
  83. }
  84.  
  85. void BACKWARD_RIGHT()
  86. {
  87. digitalWrite(Motor_Esquerda_Tras, HIGH);
  88. digitalWrite(Motor_Esquerda_Frente, LOW);
  89. analogWrite(enA, 160);
  90. digitalWrite(Motor_Direita_Frente, LOW);
  91. digitalWrite(Motor_Direita_Tras, LOW);
  92. Serial.print("...BACKWARD_RIGHT...");
  93. }
  94.  
  95. void BACKWARD() {
  96. digitalWrite(Motor_Esquerda_Tras, HIGH);
  97. digitalWrite(Motor_Esquerda_Frente, LOW);
  98. analogWrite(enA, 160);
  99. digitalWrite(Motor_Direita_Frente, LOW);
  100. digitalWrite(Motor_Direita_Tras, HIGH);
  101. analogWrite(enB, 170);
  102. Serial.print("...BACKWARD...");
  103. }
  104.  
  105. void HARD_TURN_LEFT() {
  106. digitalWrite(Motor_Esquerda_Tras, LOW);
  107. digitalWrite(Motor_Esquerda_Frente, HIGH);
  108. analogWrite(enA, 165);
  109. digitalWrite(Motor_Direita_Frente, LOW);
  110. digitalWrite(Motor_Direita_Tras, HIGH);
  111. analogWrite(enB, 165);
  112. Serial.print("...HTLEFT...");
  113. }
  114.  
  115. void HARD_TURN_RIGHT() {
  116. digitalWrite(Motor_Esquerda_Tras, HIGH);
  117. digitalWrite(Motor_Esquerda_Frente, LOW);
  118. analogWrite(enA, 165);
  119. digitalWrite(Motor_Direita_Frente, HIGH);
  120. digitalWrite(Motor_Direita_Tras, LOW);
  121. analogWrite(enB, 165);
  122. Serial.print("...HTRIGHT...");
  123. }
  124.  
  125. void STOP_RIGHT() { // Pára o motor da esquerda
  126. digitalWrite(Motor_Esquerda_Tras, LOW);
  127. digitalWrite(Motor_Esquerda_Frente, LOW);
  128. Serial.print("...STOP_RIGHT...");
  129. }
  130.  
  131. void STOP_LEFT() { // Pára o motor da direita
  132. digitalWrite(Motor_Direita_Frente, LOW);
  133. digitalWrite(Motor_Direita_Tras, LOW);
  134. Serial.print("...STOP_LEFT...");
  135. }
  136.  
  137. void contador()
  138. {
  139. pulsos++;
  140. }
  141.  
  142. void loop() {
  143.  
  144. digitalWrite(trigDireita,LOW);
  145. delayMicroseconds(5);
  146. digitalWrite(trigDireita, HIGH);
  147. delayMicroseconds(10);
  148. tempo1 = pulseIn(echoDireita, HIGH);
  149. distanciaDireita= int(0.017*tempo1);
  150.  
  151. digitalWrite(trigEsquerda,LOW);
  152. delayMicroseconds(5);
  153. digitalWrite(trigEsquerda, HIGH);
  154. delayMicroseconds(10);
  155. tempo2 = pulseIn(echoEsquerda, HIGH);
  156. distanciaEsquerda= int(0.017*tempo2);
  157.  
  158. int LED_Esquerda = analogRead(sensor_Esquerda);
  159. int LED_Meio = analogRead(sensor_Meio);
  160. int LED_Direita = analogRead(sensor_Direita);
  161.  
  162. Serial.print("Distancia sensor esquerda: ");
  163. Serial.print(distanciaEsquerda);
  164. Serial.println();
  165.  
  166. Serial.print("Distancia sensor direita: ");
  167. Serial.print(distanciaDireita);
  168. Serial.println();
  169.  
  170. delay(1000);
  171. while (LED_Esquerda > 500 || LED_Meio > 500 || LED_Direita > 500)
  172. {
  173. if (LED_Esquerda < 500 && LED_Meio > 500 && LED_Direita < 500) //Está tudo bem, anda para a frente 010
  174. {
  175. FORWARD();
  176. }
  177. else if (LED_Esquerda < 500 && LED_Meio < 500 && LED_Direita < 500) //Está fora do percurso, anda para trás até encontrar a linha preta 000
  178. {
  179. BACKWARD();
  180. delay(100);
  181. }
  182. else if (LED_Esquerda < 500 && LED_Meio < 500 && LED_Direita > 500) //Compensa o movimento para a direita 001
  183. {
  184. FORWARD_LEFT();
  185. }
  186. else if (LED_Esquerda > 500 && LED_Meio < 500 && LED_Direita < 500) //Compensa o movimento para a esquerda 100
  187. {
  188. FORWARD_RIGHT();
  189. }
  190. else if (LED_Esquerda < 500 && LED_Meio > 500 && LED_Direita > 500) // 011
  191. {
  192. HARD_TURN_RIGHT();
  193. }
  194. else if (LED_Esquerda > 500 && LED_Meio > 500 && LED_Direita < 500) // 110
  195. {
  196. HARD_TURN_LEFT();
  197. }
  198. else if (LED_Esquerda > 500 && LED_Meio < 500 && LED_Direita > 500) //Encontra 2 trajetórias 101
  199. {
  200. FORWARD_RIGHT();
  201. }
  202. else if (LED_Esquerda > 500 && LED_Meio > 500 && LED_Direita > 500) //Se todos os sensores tiverem em cima da trajetória 111
  203. {
  204. FORWARD_LEFT();
  205. FORWARD_RIGHT();
  206. delay(100);
  207.  
  208. while(LED_Esquerda > 500 && LED_Meio > 500 && LED_Direita > 500) //Se todos os sensores tiverem em cima da trajetória 111
  209. {
  210. STOP_RIGHT();
  211. STOP_LEFT();
  212. }
  213. }
  214. }
  215. if (distanciaDireita == distanciaEsquerda)
  216. {
  217. FORWARD();
  218. }
  219.  
  220. else if (distanciaDireita > distanciaEsquerda && distanciaEsquerda >= 6)
  221. {
  222. FORWARD_LEFT();
  223. FORWARD_RIGHT();
  224. }
  225.  
  226. else if (distanciaDireita < distanciaEsquerda && distanciaDireita >= 4)
  227. {
  228. FORWARD_LEFT();
  229. FORWARD_RIGHT();
  230. }
  231.  
  232. else if (distanciaDireita < distanciaEsquerda && 4 <= distanciaDireita < 6)
  233. {
  234. FORWARD_RIGHT();
  235. }
  236.  
  237. else if (distanciaDireita > distanciaEsquerda && 4 <= distanciaEsquerda < 6)
  238. {
  239. FORWARD_LEFT();
  240. }
  241.  
  242. else if (distanciaDireita < distanciaEsquerda && distanciaDireita < 4)
  243. {
  244. BACKWARD();
  245. }
  246.  
  247. else if (distanciaDireita > distanciaEsquerda && distanciaEsquerda < 4)
  248. {
  249. BACKWARD();
  250. }
  251.  
  252.  
  253. Distancia_Percorrida = pulsos * aux;
  254. Serial.print("Distancia percorrida: ");
  255. Serial.print(Distancia_Percorrida);
  256. Serial.println();
  257. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement