Advertisement
Guest User

Untitled

a guest
Jul 7th, 2015
222
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <Servo.h>
  2. // O robô possui dois motores DC independentes.
  3. // cada motor tem dois fios
  4. //BOTAO
  5. #define BOTAO1 7
  6. #define BOTAO2 8
  7. //MOTOR DIREITA - pinos para controlar o motor
  8. #define DIR_VEL  10 // pino 10 Arduino - controla a corrente para o motor da direita
  9. #define DIR_PIN1  5 //pino 5 do Arduino
  10. #define DIR_PIN2  6 //pino 6 do arduino
  11.  
  12. //MOTOR ESQUERDA - pinos para controlar o motor
  13. #define ESQ_VEL   9 // pino 9 do Arduino - controla a corrente para o motor da esquerda
  14. #define ESQ_PIN1  3 //pino 3 do Arduino
  15. #define ESQ_PIN2  4 //pino 4 do arduino
  16.  
  17. #define ECHO  12 // Pino 12 do Arduino - eco (rx) - onda refletida pelo objeto é capturada.
  18. #define TRIG  13 // Pino 13 Arduino - Trig (tx) - transmitido como ultrassom pelo ar.
  19.  
  20. #define NORMAL_VEL 255 // Valor constante para alimentar os motores. Valores de 0 à 255.
  21. #define VEL_LADOS 255
  22. #define PARAR 0
  23. Servo mServo;
  24.  
  25. // A função Setup apenas é executada uma vez e
  26. // normalmente utilizada para executar a inicialização
  27. // de variáveis ou pinos por exemplo.
  28. void setup()
  29. {
  30.   //Serial.begin(9600); // Permite a inicialização da comunicação Série - USB.
  31.   setupMove(); // Chamada de função que seta os pinos dos motores com saída (OUTPUT). E prepara os motores colocando os pinos em LOW - baixo.
  32.   setupUltrasonic(); //Seta os pinos do Sensor SR04 e prepara o pino trigger em LOW - baixo
  33.   mServo.attach(11);
  34.   mServo.write(90); //90 graus (para frente)
  35. }
  36.  
  37. void loop()
  38. {
  39.   unsigned int esquerda; // leitura sonar na direção esquerda (de)
  40.   unsigned int direita; // leitura sonar na direção direita (dd)
  41.   unsigned int frente; // leitua do ssonar na direção frontal (d)
  42.   mServo.write(90); // coloca a posição do servo no angulo 90º (para frente)
  43.   delay(400);
  44.    
  45.    movePara();
  46.    delay (150);
  47.    
  48.    //Botões
  49.   if(BOTAO1, LOW)
  50.   {
  51.     moveTras(); // função para mover para trás
  52.     delay(60);
  53.     moveDireita(); // função para mover para direita
  54.     delay(45); // 100 milissegundos
  55.     movePara();
  56.    delay (50);
  57.   }
  58.     if(BOTAO2, LOW)
  59.   {
  60.     moveTras(); // função para mover para trás
  61.     delay(60);
  62.     moveEsquerda(); // função para mover para esquerda
  63.     delay(45); // 100 milissegundos
  64.     movePara();
  65.     delay (50);
  66.   }
  67.  
  68.    //leituras
  69.     mServo.write(0);// direita
  70.     delay (400);
  71.     direita = leDistancia(); // a variável d recebe o retorno da função leDistancia
  72.  
  73.     mServo.write(90);
  74.     delay (300);
  75.     frente = leDistancia();
  76.  
  77.     mServo.write(180);// direita
  78.     delay (300);
  79.     esquerda = leDistancia();
  80.    
  81.     mServo.write(90); // coloca a posição do servo no angulo 90º (para frente)
  82.   delay(400);
  83.    
  84.   if (frente > 20)
  85.   {
  86.     moveFrente();// Função para mover motores para frente
  87.    delay(400);
  88.    moveTras();
  89.    delay(80);
  90.    movePara();
  91.    delay (50);
  92.   }
  93.  
  94.   //direita maior
  95.   else if (frente<direita && esquerda<direita) {
  96.         moveDireita();
  97.         delay(85);
  98.   }
  99.   //esquerda maior
  100.   else if (frente<esquerda && direita<esquerda){
  101.         moveEsquerda();
  102.         delay(85);
  103.   }
  104.   else if (frente<20 && direita<20 && esquerda <20)
  105. {
  106.   moveEsquerda();
  107.       delay(180);
  108. }  
  109.  
  110.    movePara();
  111.   delay (150);
  112.    mServo.write(90); // coloca a posição do servo no angulo 90º (para frente)
  113.    delay(500);
  114.  
  115.  
  116.  
  117. }
  118.  
  119. void moveFrente() // Implementação da função para acionar os motores para frente.
  120. {
  121.   analogWrite(ESQ_VEL, NORMAL_VEL); //Possibilita a utilização dos pinos PWM. analogWrite(ESQ_VEL, 255); Valores de 0 à 255.
  122.   digitalWrite(ESQ_PIN1, HIGH); // digitalWrite passa como parâmetro o pino e as constantes HIGH/LOW
  123.   digitalWrite(ESQ_PIN2, LOW);
  124.  
  125.   analogWrite(DIR_VEL, NORMAL_VEL);
  126.   digitalWrite(DIR_PIN1, HIGH);
  127.   digitalWrite(DIR_PIN2, LOW);
  128. }
  129.  
  130. void moveTras() // Implementação da função para acionar os motores para trás.
  131. {
  132.   analogWrite(ESQ_VEL, NORMAL_VEL); //Possibilita a utilização dos pinos PWM. analogWrite(ESQ_VEL, 255); Valores de 0 à 255.
  133.   digitalWrite(ESQ_PIN1, LOW); // digitalWrite passa como parâmetro o pino e as constantes HIGH/LOW
  134.   digitalWrite(ESQ_PIN2, HIGH);
  135.  
  136.   analogWrite(DIR_VEL, NORMAL_VEL);
  137.   digitalWrite(DIR_PIN1, LOW);
  138.   digitalWrite(DIR_PIN2, HIGH);
  139. }
  140.  
  141. void moveEsquerda() // Implementação da função para acionar os motores para esquerda.
  142. {
  143.   analogWrite(ESQ_VEL, VEL_LADOS); //Possibilita a utilização dos pinos PWM. analogWrite(ESQ_VEL, 255); Valores de 0 à 255.
  144.   digitalWrite(ESQ_PIN1, HIGH); // digitalWrite passa como parâmetro o pino e as constantes HIGH/LOW
  145.   digitalWrite(ESQ_PIN2, LOW);
  146.  
  147.   analogWrite(DIR_VEL, VEL_LADOS);
  148.   digitalWrite(DIR_PIN1, LOW);
  149.   digitalWrite(DIR_PIN2, HIGH);
  150. }
  151.  
  152. void moveDireita() // Implementação da função para acionar os motores para direita.
  153. {
  154.   analogWrite(ESQ_VEL, VEL_LADOS); //Possibilita a utilização dos pinos PWM. analogWrite(ESQ_VEL, 255); Valores de 0 à 255.
  155.   digitalWrite(ESQ_PIN1, LOW); // digitalWrite passa como parâmetro o pino e as constantes HIGH/LOW
  156.   digitalWrite(ESQ_PIN2, HIGH);
  157.  
  158.   analogWrite(DIR_VEL, VEL_LADOS);
  159.   digitalWrite(DIR_PIN1, HIGH);
  160.   digitalWrite(DIR_PIN2, LOW);
  161. }
  162.  
  163. void movePara() // Implementação da função para parar os motores.
  164. {
  165.   analogWrite(ESQ_VEL, PARAR); //Possibilita a utilização dos pinos PWM. analogWrite(ESQ_VEL, 0); Valores de 0 à 255.
  166.   digitalWrite(ESQ_PIN1, LOW); // digitalWrite passa como parâmetro o pino e as constantes HIGH/LOW
  167.   digitalWrite(ESQ_PIN2, LOW);
  168.  
  169.   analogWrite(DIR_VEL, PARAR);
  170.   digitalWrite(DIR_PIN1, LOW);
  171.   digitalWrite(DIR_PIN2, LOW);
  172. }
  173.  
  174. void setupMove() // seta os pinos dos motores como saída
  175. {
  176.   pinMode(ESQ_VEL, OUTPUT);
  177.   pinMode(ESQ_PIN1, OUTPUT);
  178.   pinMode(ESQ_PIN2, OUTPUT);
  179.  
  180.   pinMode(DIR_VEL, OUTPUT);
  181.   pinMode(DIR_PIN1, OUTPUT);
  182.   pinMode(DIR_PIN2, OUTPUT);
  183.  
  184.   pinMode(BOTAO1, INPUT);
  185.   pinMode(BOTAO2, INPUT);
  186.  
  187.   analogWrite(ESQ_VEL, PARAR); //Possibilita a utilização dos pinos PWM. analogWrite(ESQ_VEL, 0); Valores de 0 à 255.
  188.   digitalWrite(ESQ_PIN1, LOW); // digitalWrite passa como parâmetro o pino e as constantes HIGH/LOW
  189.   digitalWrite(ESQ_PIN2, LOW);
  190.  
  191.   analogWrite(DIR_VEL, PARAR);
  192.   digitalWrite(DIR_PIN1, LOW);
  193.   digitalWrite(DIR_PIN2, LOW);
  194. }
  195.  
  196.  
  197. unsigned int leDistancia() // Implementação da função do sensor SR04. Retorna a distância em cm.
  198. {
  199.  
  200.   int duracao; // Variável para receber o cumprimento do pulso firme  em microssegundos e dividir por 58.
  201.   digitalWrite(TRIG, LOW);//Deixa trigo embaixo
  202.   delayMicroseconds(2);// por 2 uS - microssegundos
  203.   digitalWrite(TRIG, HIGH); //Deixa trigo em estado alto, Um sinal de um pulso curto de 10uS é disparado
  204.   delayMicroseconds(10); //O sensor envia uma ‘explosão’ de 8 ciclos de ultra-som em 40khz
  205.   digitalWrite(TRIG, LOW); // diminui a sua linha de eco para LOW - baixo.
  206.  
  207.   duracao = pulseIn(ECHO, HIGH); // aumenta a sua linha de eco para alto.
  208.                                 // Lê um pulso (HIGH ou LOW) em um pinto. Retorna o comprimento do pulso em microssegundos.
  209.                                //pulseIn retorna (tempo de alto nível * velocidade do som (340M/S)/2).
  210.   return duracao/58; //retorna a divisão por 58 da duração para converter em cm.
  211.  
  212. }
  213.  
  214. void setupUltrasonic() // seta os pinos do sensor SR04 e prepara o trigger como LOW
  215. {
  216.   pinMode(TRIG, OUTPUT); // seta pin 13 como saída - transmissor - trigger
  217.   pinMode(ECHO, INPUT); // seta pin 12 como entrada - receptor - echo
  218.  
  219.   digitalWrite(TRIG, LOW);
  220. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement