Advertisement
Guest User

Sonsonmóvel com variação de velocidade proporcional

a guest
May 21st, 2018
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.95 KB | None | 0 0
  1. #include "Ultrasonic.h"
  2. #define echoPin 10
  3. #define trigPin 9
  4. #define Motor_E1 8
  5. #define Motor_E2 7
  6. #define Motor_EV 6
  7. #define Motor_DV 5
  8. #define Motor_D2 4
  9. #define Motor_D1 3
  10. #define inPin 2
  11. #define Velocidade 120
  12. #define Dif 30
  13. #define Divisor_inicial 2
  14. #define Taxa_divisor 0.1
  15.  
  16. int valor = 0;
  17. float divisor = 2.0;
  18. bool lado = 0, flag = 0; // 0 - esq, 1 - dir
  19.  
  20. Ultrasonic ultrasonic(9,10);
  21.  
  22. void desviaObstaculo()
  23. {
  24.   analogWrite(Motor_EV, 0);
  25.   analogWrite(Motor_DV, 0);
  26.  
  27.   delay(400);
  28.  
  29.   analogWrite(Motor_EV, Velocidade-Dif);
  30.   analogWrite(Motor_DV, Velocidade);
  31.  
  32.   // INDO PRA ESQUERDA
  33.   digitalWrite(Motor_D1, LOW);
  34.   digitalWrite(Motor_D2, HIGH);
  35.   digitalWrite(Motor_E1, LOW);
  36.   digitalWrite(Motor_E2, LOW);
  37.  
  38.   // PASSA 200 MS SE POSICIONANDO
  39.   delay(700);
  40.  
  41.   // INDO PRA FRENTE
  42.   digitalWrite(Motor_D1, LOW);
  43.   digitalWrite(Motor_D2, HIGH);
  44.   digitalWrite(Motor_E1, LOW);
  45.   digitalWrite(Motor_E2, HIGH);
  46.  
  47.   // PASSA 500 MS INDO P FRENTE
  48.   delay(400);
  49.  
  50.   analogWrite(Motor_EV, 0);
  51.   analogWrite(Motor_DV, 0);
  52.  
  53.   delay(400);
  54.  
  55.   analogWrite(Motor_EV, Velocidade-Dif);
  56.   analogWrite(Motor_DV, Velocidade);
  57.  
  58.  
  59.   // INDO PRA DIREITA
  60.   digitalWrite(Motor_D1, LOW);
  61.   digitalWrite(Motor_D2, LOW);
  62.   digitalWrite(Motor_E1, LOW);
  63.   digitalWrite(Motor_E2, HIGH);
  64.  
  65.   // PASSA 200 MS SE POSICIONANDO
  66.   delay(500);
  67.  
  68.   // INDO PRA FRENTE
  69.   digitalWrite(Motor_D1, LOW);
  70.   digitalWrite(Motor_D2, HIGH);
  71.   digitalWrite(Motor_E1, LOW);
  72.   digitalWrite(Motor_E2, HIGH);
  73.  
  74.   delay(800);
  75.  
  76.  
  77.   analogWrite(Motor_EV, 0);
  78.   analogWrite(Motor_DV, 0);
  79.  
  80.   delay(400);
  81.  
  82.   analogWrite(Motor_EV, Velocidade-Dif);
  83.   analogWrite(Motor_DV, Velocidade);
  84.  
  85.   // INDO PRA DIREITA
  86.   digitalWrite(Motor_D1, LOW);
  87.   digitalWrite(Motor_D2, LOW);
  88.   digitalWrite(Motor_E1, LOW);
  89.   digitalWrite(Motor_E2, HIGH);
  90.  
  91.   // PASSA 200 MS SE POSICIONANDO
  92.   delay(500);
  93.  
  94.   // INDO PRA FRENTE
  95.   digitalWrite(Motor_D1, LOW);
  96.   digitalWrite(Motor_D2, HIGH);
  97.   digitalWrite(Motor_E1, LOW);
  98.   digitalWrite(Motor_E2, HIGH);
  99.  
  100.   delay(450);
  101. }
  102.  
  103. void seguePista()
  104. {
  105.   if (lado)
  106.   {
  107.     // INDO PRA DIREITA
  108.     digitalWrite(Motor_D1, LOW);
  109.     digitalWrite(Motor_D2, HIGH);
  110.     digitalWrite(Motor_E1, LOW);
  111.     digitalWrite(Motor_E2, HIGH); //
  112.  
  113.     analogWrite(Motor_EV, (int) (Velocidade-Dif)*((divisor - Divisor_inicial) * Divisor_inicial * 10);
  114.     analogWrite(Motor_DV, (int) Velocidade/divisor);
  115.  
  116.     if (valor == HIGH)
  117.     {
  118.       if (!flag)
  119.       {
  120.           lado ^= 1;
  121.           flag = 1;
  122.           divisor = Divisor_inicial;
  123.       }
  124.       else
  125.       {
  126.         divisor += Taxa_divisor;
  127.       }
  128.     }
  129.       else
  130.         flag = 0;
  131.   }
  132.   else
  133.   {  
  134.     // INDO PRA ESQUERDA
  135.     digitalWrite(Motor_D1, LOW);
  136.     digitalWrite(Motor_D2, HIGH); //
  137.     digitalWrite(Motor_E1, LOW);
  138.     digitalWrite(Motor_E2, HIGH);
  139.  
  140.     analogWrite(Motor_EV, (int)  (Velocidade-dif)/divisor);
  141.     analogWrite(Motor_DV, (int) Velocidade * ((divisor - Divisor_inicial) * Divisor_inicial * 10);
  142.  
  143.    
  144.     if (valor == HIGH)
  145.     {
  146.       if (!flag)
  147.       {
  148.           lado ^= 1;
  149.           flag = 1;
  150.           divisor = Divisor_inicial;
  151.       }
  152.     }
  153.       else
  154.         flag = 0;
  155.         divisor += Taxa_divisor;
  156.   }
  157. }
  158.  
  159. void setup()
  160. {
  161.    pinMode(Motor_E1, OUTPUT);
  162.    pinMode(Motor_E2, OUTPUT);
  163.    pinMode(Motor_EV, OUTPUT);
  164.    pinMode(Motor_DV, OUTPUT);
  165.    pinMode(Motor_D2, OUTPUT);
  166.    pinMode(Motor_D1, OUTPUT);
  167.  
  168.    pinMode(echoPin, INPUT);
  169.    pinMode(trigPin, OUTPUT);
  170.  
  171.    Serial.begin(9600);
  172.  
  173.    pinMode(inPin, INPUT);
  174. }
  175.  
  176. void loop()
  177. {
  178.   digitalWrite(trigPin, LOW);
  179.   delayMicroseconds(2);
  180.   digitalWrite(trigPin, HIGH);
  181.   delayMicroseconds(10);
  182.   digitalWrite(trigPin, LOW);
  183.   int distancia = (ultrasonic.Ranging(CM));
  184.   valor = digitalRead(inPin); //realizando a leitura no sensor optico
  185.  
  186.   if (distancia <= 15 && valor == LOW)
  187.   {
  188.     desviaObstaculo();
  189.   }
  190.   else
  191.   {
  192.     seguePista();
  193.   }
  194. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement