Programação do projeto robô sumô

Boa tarde! estou com dificuldade de arrumar a minha programação.
gostaria de controlar a velocidade do meu carrinho e energizar as rodas ou seja quando eu não o comando para ele as rodas devem travar e quando eu der o comando deve destravar. Estou fazendo um robô sumô, estou usando arduino uno, motor shield L293D o bluethooth HC-05. Utilizando o aplicativo Bluethooth RC car para permitir a movimentação do robô.

#include <AFMotor.h>

AF_DCMotor motor1(2, MOTOR12_1KHZ);
AF_DCMotor motor2(4, MOTOR34_1KHZ);

int val;
int Speeed = 255;

}

pinMode(motor1, OUTPUT);
pinMode(motor2, OUTPUT);


digitalWrite(motor1, LOW);
digitalWrite(motor2, LOW);

return 0;

}

void setup()
{
Serial.begin(9600);
}
void loop(){
if(Serial.available() > 0){
val = Serial.read();

Stop();

     if (val == 'F'){
     forward();
     }

     if (val == 'B'){
     back();
     }

     if (val == 'L'){
     left();
     }

     if (val == 'R'){
     right();
     }
     if (val == 'I'){
     topright();
     }

     if (val == 'G'){
     topleft();
     }

     if (val == 'J'){
     bottomright();
     }

     if (val == 'H'){
     bottomleft();
     }
     if (val == 'S'){
     Stop();
     }

}
}

void forward()
{
motor1.setSpeed(Speeed);
motor1.run(FORWARD);
motor2.setSpeed(Speeed);
motor2.run(FORWARD);
}

void back()
{
motor1.setSpeed(Speeed);
motor1.run(BACKWARD);
motor2.setSpeed(Speeed);
motor2.run(BACKWARD);
}

void left()
{
motor1.setSpeed(Speeed);
motor1.run(FORWARD);
motor2.setSpeed(Speeed);
motor2.run(BACKWARD);
}

void right()
{
motor1.setSpeed(Speeed);
motor1.run(BACKWARD);
motor2.setSpeed(Speeed);
motor2.run(FORWARD);
}

void topleft(){
motor1.setSpeed(Speeed);
motor1.run(FORWARD);
motor2.setSpeed(Speeed);
motor2.run(FORWARD);
}

void topright()
{
motor1.setSpeed(Speeed/3.1);
motor1.run(FORWARD);
motor2.setSpeed(Speeed/3.1);
motor2.run(FORWARD);
}

void bottomleft()
{
motor1.setSpeed(Speeed);
motor1.run(BACKWARD);
motor2.setSpeed(Speeed);
motor2.run(BACKWARD);
}

void bottomright()
{
motor1.setSpeed(Speeed/3.1);
motor1.run(BACKWARD);
motor2.setSpeed(Speeed/3.1);
motor2.run(BACKWARD);
}

void Stop()
{
motor1.setSpeed(0);
motor1.run(RELEASE);
motor2.setSpeed(0);
motor2.run(RELEASE);
}

Olá! Bem vinda ao Fórum.

Algumas contribuições que eu posso dar:

  1. Com relação ao controle de velocidade, seria necessário que o seu programa lesse, além da variável "val", a variável que no seu programa você está chamando de "Speed" (obviamente sem colocar ela com o valor constante de 255). Eu nunca usei esse app Bluetooth RC car, mas vi no Google que ele possui um controle slide para a velocidade. Isso significa que o app consegue mandar esse valor. Logo, você precisa aprender como receber ele no Arduíno.

  2. Eu acho que a sua construção para os movimentos diagonais não está correta. Para o robô fazer curvas, as velocidades dos motores 1 e 2 precisam ser diferentes. Então, por exemplo, admitindo que motor1 é o da esquerda e motor 2 é o da direita, a função topright deveria ficar assim:

void topright()
{
motor1.setSpeed(Speeed);
motor1.run(FORWARD);
motor2.setSpeed(Speeed/3.1);
motor2.run(FORWARD);
}

Aqui vai uma outra observação: como você declara a variável Speed como int, dividir por 3.1 vai resultar num valor quebrado (float). Precisa ver se a função setSpeed aceita esse valor como parâmetro.

O trecho abaixo parece meio solto no nada e com duas chaves fechando. Retire as chaves e inclua ele dentro do Setup.

Veja se melhora assim:

#include <AFMotor.h>

AF_DCMotor motor1(2, MOTOR12_1KHZ);
AF_DCMotor motor2(4, MOTOR34_1KHZ);

int val;
int Speeed = 255;

void setup()
{
Serial.begin(9600);

pinMode(motor1, OUTPUT);
pinMode(motor2, OUTPUT);

digitalWrite(motor1, LOW);
digitalWrite(motor2, LOW);
}

ok! muito obrigada.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.