• estou precisando de uma ajuda p/ programar um ultrasom servo + ponte H(L298N) + Arduino UNO

  • programei ele mas so anda p/ frente

Exibições: 629

Responder esta

Respostas a este tópico

PH, bom dia.

Voce não deve usar o mesmo pino para as duas funções.

Vi  que voce não utiliza as portas analógicas.

Nunca usei elas para isto, mas acho que pode usar os pinos das portas analogicas para isto.

Rui

para fazer funcionar preciso de 6 portas e so restou 5

PH,

testei o LCD nas portas analógicas de A0 até A5 e funcinou ok.

Para teste usei este code:

Rui

//Testa LCD
int Teste = 8080;
#include <LiquidCrystal.h> //Inclui a biblioteca do LCD


LiquidCrystal lcd(A0, A1, A2, A3, A4, A5);

void setup() {
lcd.begin(16, 2); //Inicia o LCD com dimensões 16x2(Colunas x Linhas)
}

void loop(){
lcd.clear();// Limpa do buffer do LCD
lcd.setCursor(0, 0);
lcd.print("Imprimindo TXT");
lcd.setCursor(0, 1);
lcd.print("Linha 1");
lcd.setCursor(10, 1);
lcd.print(Teste);
delay(500);
}

fiz duas programações diferentes, se eu te passar vc pode analisar p/ min e ver oq acha?

Sim

a que ficou melhor foi essa

// inclusão de bibliotecas.   
    #include <Servo.h>   // inclui biblioteca de manipulação de servos motores.   
    #include <Ultrasonic.h>  // inclui biblioteca de manipulação do sensor ultrassónico.   
    #include <LiquidCrystal.h> // inclui biblioteca de manipulação do monitor LCD 16x2   
    #define echoPin 9 //Pino 9 será o Echo do sensor   era 8
    #define trigPin 8 //Pino 8 será o TRig do sensor era 12
 
  Servo servo_ultra_sonico; // nomeando o servo motor
  Ultrasonic ultrasonic(8,9); // nomeando o sensor   
  int BUZZER = 11; // Ligar o buzzer (Som) no pino 11  
  int in1 = 4; // pino 1 do motor 1
  int in2 = 5; // pino 2 do motor 1
  int in3 = 6; // pino 1 do motor 2
  int in4 = 7; // pino 2 do motor 2
  int distancia_cm = 0;   //variável do valor da distância

  //variáveis para uso da função do LCD   
    LiquidCrystal lcd(A0, A1, A2, A3, A4, A5); // ligando o display no arduino   
    int pinoPotenciometro = 0;    // controle do brilho do LCD   
    long valorPotenciometro = 0;   // controle do brilho do LCD   
    boolean dist = true;     // Variável para saber se é para exibir a distância ou não   
    String lado = "";      //Variável para escrever qual o lado da medição   
    String frase = "";      //Variável para escrever uma frase na parte de cima   
    String frase2 = "";     //Variável para escrever uma frase na parte de baixo   
    int valor = 0;       //Variável para colocar o valor da distancia  


  // executado na inicialização do Arduino   
    void setup(){   
    lcd.begin(16, 2); // inicia o LCD   
    Serial.begin(9600); // inicializa a comunicação serial para mostrar dados em um display LCD   
    escrever_LCD(dist = false, lado = "",valor = 0, frase = ">> Car. Eng. " , frase2 = "Iniciando..." );   
    delay(500);  
 
  //configurações do servos motores   
    servo_ultra_sonico.attach(10); // anexa o servo motor lógico ao físico no pino 10.   
    pinMode(trigPin, OUTPUT);  // define o pino triger como saída.   
    pinMode(echoPin, INPUT);  // define o pino echo como entrada.   
    pinMode(BUZZER,OUTPUT);   // define o pino do buzzer como saída.   
    servo_ultra_sonico.write(90); // inicialmente servo do sensor à 90 graus     
    rotacao_Parado;
    pinMode(in1, OUTPUT);
    pinMode(in2, OUTPUT);
    pinMode(in3, OUTPUT);
    pinMode(in4, OUTPUT);         
    escrever_LCD(dist = false, lado = "",valor = 0, frase = "** Criado por **" , frase2 = "CRCA");   
    delay(2000);

  }   

  // função principal do Arduino   
  void loop(){   
  escrever_LCD(dist = false, lado = "",valor = 0, frase = "Pensando..." , frase2 = ">> Car. Eng. ");    
 
 //seta o pino 8 com um pulso baixo "LOW" ou desligado ou ainda 0   
    digitalWrite(trigPin, LOW);   
    delayMicroseconds(2);
 
  //seta o pino 8 com pulso alto "HIGH" ou ligado ou ainda 1   
    digitalWrite(trigPin, HIGH);   
    delayMicroseconds(10);
 
  //seta o pino 8 com pulso baixo novamente   
    digitalWrite(trigPin, LOW);   
   andar();    
  }   
 
 //função para unir outras funções para poder andar com o robô   
    void andar(){   
    reposicionaServoSonar();   
    int distancia = lerSonar();   
    if (distancia > 25) {   
    rotacao_Frente();   
  }else{    
    posicionaCarroMelhorCaminho();   
    andar();   
  }    
  }   
  //função para ler o sensor ultrassónico   
    int lerSonar(){   
    return ultrasonic.Ranging(CM);   
  }   
  //função para calcular a distancia do centro   
    int calcularDistanciaCentro(){   
    servo_ultra_sonico.write(90);
    delay(200);
    int leituraDoSonar = lerSonar();// Ler sensor de distância  
    delay(600);
    leituraDoSonar = lerSonar();   
    delay(600);   
    Serial.print("Distancia Centro: "); // Exibe no serial  
    Serial.println(leituraDoSonar);
    return leituraDoSonar;    
  }   
  //função para calcular a distancia da direita   
    int calcularDistanciaDireita(){   
    servo_ultra_sonico.write(30);   
    delay(200);  
    int leituraDoSonar = lerSonar();   
    delay(600);   
    leituraDoSonar = lerSonar();   
    delay(600);   
    Serial.print("Distancia Direita: ");  
    Serial.println(leituraDoSonar);   
    return leituraDoSonar;    
  }   
  //função para calcular a distancia da esquerda   
   int calcularDistanciaEsquerda(){    
   servo_ultra_sonico.write(150);   
   delay(200);  
   int leituraDoSonar = lerSonar();   
   delay(600);   
   leituraDoSonar = lerSonar();   
   delay(600);   
   Serial.print("Distancia Esquerda: ");  
   Serial.println(leituraDoSonar);   
   return leituraDoSonar;        
  }   

  //função para pegar as distancia lidas e calcular qual a melhor distancia   
    char calculaMelhorDistancia(){   
    int esquerda = calcularDistanciaEsquerda();   
    int centro = calcularDistanciaCentro();   
    int direita = calcularDistanciaDireita();   
    reposicionaServoSonar();   
    int maiorDistancia = 0;   
    char melhorDistancia = '0';
 
    if (centro > direita && centro > esquerda){   
     melhorDistancia = 'c';   
     maiorDistancia = centro;
 
    }else if (direita > centro && direita > esquerda){   
     melhorDistancia = 'd';   
     maiorDistancia = direita;  
 
    }else if (esquerda > centro && esquerda > direita){   
     melhorDistancia = 'e';   
     maiorDistancia = esquerda;   
   }   
   if (maiorDistancia <= 25) {   
    rotacao_Re();   
    posicionaCarroMelhorCaminho();   
  }   
    reposicionaServoSonar();   
    return melhorDistancia;   
  }   

  // função para colocar o carrinho na melhor distancia, ou seja girar ele para a melhor distancia   
    void posicionaCarroMelhorCaminho(){   
    char melhorDist = calculaMelhorDistancia();     
    Serial.print("melhor Distancia: ");  
    Serial.println(melhorDist);

 if (melhorDist == 'c'){   
    escrever_LCD(dist = false, lado = "",valor = 0, frase = "Melhor Distancia....: " , frase2 = "Frente" );    
    andar();   
 
 }else if (melhorDist == 'd'){   
    escrever_LCD(dist = false, lado = "",valor = 0, frase = "Melhor Distancia....: " , frase2 = "Direita" );    
    rotacao_Direita();   
      
 }else if (melhorDist == 'e'){   
    escrever_LCD(dist = false, lado = "",valor = 0, frase = "Melhor Distancia....: " , frase2 = "Esquerta" );    
    rotacao_Esquerda();   
     
 }else{   
    rotacao_Re();   
   }   
   reposicionaServoSonar();   
  }   

  //função para deixar o sensor "olho" do robô no centro   
    void reposicionaServoSonar(){   
    servo_ultra_sonico.write(90);
    delay(200);
  }   

  //função para escrever no LCD    
   void escrever_LCD(boolean dist, String lado, int valor, String frase, String frase2 )   
  {   
    lcd.clear();   
    valorPotenciometro = analogRead(pinoPotenciometro); // brilho do lcd   
    if (dist == true ) {    
    lcd.setCursor(0,0);   
    lcd.print("Distancia ");   
    lcd.print(lado+" : ");   
    lcd.setCursor(0,1);   
    lcd.print(valor);   
   }   
    if (dist == false){   
    lcd.setCursor(0,0);   
    lcd.print(frase);   
    lcd.setCursor(0,1);   
    lcd.print(frase2);   
   }   
  }   
  // função que faz o carro (servo motor) parar    
  void rotacao_Parado()   
  {
   digitalWrite(in1, LOW);
   digitalWrite(in2, LOW);  
   digitalWrite(in3, LOW);
   digitalWrite(in4, LOW);
  }   
  // função que faz o carro (servo motor) andar para frente    
  void rotacao_Frente()   
  {   
   escrever_LCD(dist = false, lado = "",valor = 0, frase = "Indo para:" , frase2 = "Frente");    
  // apenas pinos secundarios em HiGH, definindo o movimento para frente
   digitalWrite(in1, LOW);
   digitalWrite(in2, HIGH);
   digitalWrite(in3, LOW);
   digitalWrite(in4, HIGH);      
   delay(600);   
   rotacao_Parado();   
  }   

  // função que faz o carro (servo motor) andar para traz    
  void rotacao_Re()   
  {   
   tone(11,300,300);    
   escrever_LCD(dist = false, lado = "",valor = 0, frase = "Indo para:" , frase2 = "Tras");    
   tone(11,300,300);
   digitalWrite(in1, HIGH);
   digitalWrite(in2, LOW);
   digitalWrite(in3, HIGH);
   digitalWrite(in4, LOW);     
   delay(600);   
   tone(11,300,300);    
   rotacao_Parado();   
  }  
 
  // função que faz o carro (servo motor) vira a direita   
  void rotacao_Direita()   
  {   
   escrever_LCD(dist = false, lado = "",valor = 0, frase = "Virando para:" , frase2 = "Direita");    
   digitalWrite(in1, HIGH);
   digitalWrite(in2, LOW);
   digitalWrite(in3, LOW);
   digitalWrite(in4, HIGH);   
   delay(250);   
   rotacao_Parado();   
  }  
 
  // função que faz o carro (servo motor) vira a esquerda   
  void rotacao_Esquerda()   
  {   
   escrever_LCD(dist = false, lado = "",valor = 0, frase = "Virando para:" , frase2 = "Esquerta");    
   digitalWrite(in1, LOW);
   digitalWrite(in2, HIGH);
   digitalWrite(in3, HIGH);
   digitalWrite(in4, LOW);  
   delay(250);   
   rotacao_Parado();   
  }  

Oi PH,

o que posso dizer é o seguinte.

Se funciona, isto  é o bom.

O importante é que o code atenda à sua necessidede e expectativa.

Se atender,  é o ótimo.

Agora, a performance, eu não tenho como testar,

pois para isto teria que montar um carro igual aos seu, e não tenho os materiaisi para isto.

Rui

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço