Ir ao conteúdo

Posts recomendados

Postado

Boa Tarde!

Fiz uma programação para o carrinho rastreador, e deu tudo certo, mas quando eu coloco para enviar dados para a porta serial aumenta muito o tempo de resposta, ficando muito lento a movimentação do servo motor, preciso da transmissão serial pois vou colocar um bluetooth para desativar o carrinho a distância. Alguém poderia me dar uma dica? vou disponibilizar o código e o vídeo no youtube.Link para ver o projeto no youtube

Veja o carrinho no YouTube: 

 

Obrigado.

//Inclusão de Bibliotecas
#include <Servo.h>
#include <LiquidCrystal.h>  
#include <Ultrasonic.h>
  
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);  //definição dos pinos para o LCD

//Configuração do Sensor Ultrassonico
#define pino_trigger 12  //Pino trigger ligado ao pino 0 do Arduino 
#define pino_echo 13    //Pino echo ligado ao pino 1 do Arduino                          
Ultrasonic ultrasonic(pino_trigger, pino_echo);  //definição dos pinos para o sensor ultrassonico
int SensorUltrassonico();   //Prototipagem da função
float cmMsec;         //Nomea a variavel que vai guardar o valor da distancia medida, em centimetros

Servo myservo;  // Criação do objeto servo
int pos = 30;    //Portas para comando das rodas

//Pinos para ligação dos reles
//RODA DIREITA
const int releA1 = A3; //Altere a ordem das portas para ajustar o movimento das rodas
const int releA2 = A4;
//RODA ESQURDA
const int releB1 = A1;
const int releB2 = A2;

void setup() {
  myservo.attach(3);  // attaches the servo on pin 9 to the servo object
  pinMode(releA1, OUTPUT);
  pinMode(releA2, OUTPUT);
  pinMode(releB1, OUTPUT);
  pinMode(releB2, OUTPUT);
  //Configuração do Display 16x2 e mostrar a palavra nele
  lcd.begin(16, 2);  
  lcd.setCursor(0,0);              
  lcd.print("pos:");
  Serial.begin(9600);
}

void loop() {
   for (pos = 30; pos <= 60; pos++) { //Move o eixo do servo de 0 a 90 graus, de um em um grau
    myservo.write(pos);              // Envia o valor do grau para o comando de movimentação 
    delay(15);                       // Aguarda 15 ms chegar na posição mover o eixo do servo
    lcd.setCursor(5,0);  
    lcd.print(pos);                  //Printa a posição no display
    SensorUltrassonico();            //Chama a função SensorUltrassonico()
   
    Serial.println(cmMsec); 
    
  }
  for (pos = 60; pos >= 30; pos--) { //Move o eixo do servo de 90 a 0 graus, de um em um grau
    myservo.write(pos);              // Envia o valor do grau para o comando de movimentação 
    delay(15);                       // Aguarda 15 ms chegar na posição mover o eixo do servo
    lcd.setCursor(5,0);  
    lcd.print(pos);                  //Printa a posição no display
    SensorUltrassonico();            //Chama a função SensorUltrassonico()
    
    Serial.println(cmMsec);
  }
}

//Função para controle do sensor Ultrassonico e movimentação das rodas
int SensorUltrassonico()
{
  long microsec = ultrasonic.timing();                     //Armazena o tempo na variavel
  cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM);   //função que calcula distancia em funcao do tempo
  
  if (cmMsec < 30)       //Entra nesta condiçao quando o objeto está a menos de 50 centimetros de distância
  {    //ESQUERDA
    if (pos > 45)           //Entra nesta condiçao quando o objeto está posicionado a um angulo maior ou igual a 55 graus
      {
      lcd.setCursor(0,1);  
      lcd.print("                ");
      lcd.setCursor(0,1);  
      lcd.print(cmMsec);                    //Printa a distância no display
      lcd.setCursor(8,1);  
      lcd.print("esq");                     //Printa a direção do objeto no display
      
      //Pausa
      digitalWrite(releA1, HIGH);
      digitalWrite(releA2, HIGH);
      digitalWrite(releB1, HIGH);
      digitalWrite(releB2, HIGH);
      delay(100);
      //Move para direita
      digitalWrite(releA1, LOW);
      digitalWrite(releA2, HIGH);
      digitalWrite(releB1, HIGH);
      digitalWrite(releB2, LOW);
      delay(300);
      digitalWrite(releA1, HIGH);
      digitalWrite(releA2, HIGH);
      digitalWrite(releB1, HIGH);
      digitalWrite(releB2, HIGH);
      delay(100);
      }
      
    else         //Entra nesta condição quando o objeto está posicionado a um angulo menor ou igual que 35 graus
      {       //DIREITA
      lcd.setCursor(0,1);  
      lcd.print("                ");
      lcd.setCursor(0,1);  
      lcd.print(cmMsec);                 //Printa a distância no display
      lcd.setCursor(8,1);  
      lcd.print("dir");                  //Printa a direção do objeto no display
      
      //Pausa
      digitalWrite(releA1, HIGH);
      digitalWrite(releA2, HIGH);
      digitalWrite(releB1, HIGH);
      digitalWrite(releB2, HIGH);
      delay(100);
      //Move para esquerda
      digitalWrite(releA1, HIGH);
      digitalWrite(releA2, LOW);
      digitalWrite(releB1, LOW);
      digitalWrite(releB2, HIGH);
      delay(300);
      digitalWrite(releA1, HIGH);
      digitalWrite(releA2, HIGH);
      digitalWrite(releB1, HIGH);
      digitalWrite(releB2, HIGH);
      delay(100);
      }
    } 
   else //Enquanto nao encontra nenhum objeto, continua em frente
   {    //CENTRO
    lcd.setCursor(0,1);  
      lcd.print(" Nada Encontrado");
      //Comando para mover as rodas
      //Move para esquerda
      digitalWrite(releA1, HIGH);
      digitalWrite(releA2, LOW);
      digitalWrite(releB1, HIGH);
      digitalWrite(releB2, LOW);
   }
}

 

 

Carrinho_VersãoFinal.rar

  • Membro VIP
Postado

Apesar de óbvio d+, 'sete' o baud rate pro maior possível. Também pode capturar o dado por interrupt. E tem+: escrever no display demanda tempo. Tenha certeza que é necessário.

Postado
10 minutos atrás, Isadora Ferraz disse:

Apesar de óbvio d+, 'sete' o baud rate pro maior possível. Também pode capturar o dado por interrupt. E tem+: escrever no display demanda tempo. Tenha certeza que é necessário.

Vou implementar isso, valeu!

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!