Arduino Bluetooth Car

Hi, i've start a project of restoring and old rc car, with arduino, h bridge and hc-05, I followed this diagram conection.


I tested the motor and they're working, the problem is when i use the bluetooth app to pair with the HC-05, i'm unable to control the motors, i don't know where is the problem, please if anybody can help me, I'll aprecciate it.

Thanks.

Also this is the code i used.
//Saludos
//Actualización del código para que sea mas entendible

//INNOVADORES
//V.M.
//Facebook: Innovadores
//YouTube: INNOVADORES
//Cualquier consulta no duden en hacerla

//En esta parte declaramos los pines que utilizaremos
//en nuestro caso 2 para traccion y 2 para direccion
int adelante =2; //usaremos este pin para dar la señal de ir
int atras=3; //usaremos este pin para dar la señal de ir atras
int izquierda =4; //usaremos este pin para dar la señal torcer la direccion hacia la izquierda
int derecha=5; //usaremos este pin para dar la señal de torcer la direccion a la derecha
char blue; //creamos una variable para guardar las letras que nos enviara a app al apretar un boton
void setup() {
Serial.begin(9600);//fijamos la velocidad de coneccion con el bluetooth
/en esta parte le decimos que nuestros pines seran de salida ya que emitiran una señal que
ira a el puente H
/
pinMode (adelante, OUTPUT);
pinMode (atras, OUTPUT);
pinMode (izquierda, OUTPUT);
pinMode (derecha, OUTPUT);
}
void loop() {
if(Serial.available()>0){ // preguntamos si la app envio una letra
blue=Serial.read(); //y si envio la letra la guardamos en nuestra variable blue
if(blue=='F'){ //en esta parte se compara si blue es igual a F,de ser asi se ejecuta la accion de abajo
digitalWrite(adelante, HIGH); //activa este pin que seria la marcha
digitalWrite(atras, LOW); //desactiva este pin para que solo avance
digitalWrite(izquierda, LOW); //desactiva este pin para que la direccion este recta
digitalWrite(derecha,LOW); //desactiva este pin para que la direccion este recta
}
if(blue=='B'){ //en esta parte se compara si blue es igual a B de ser asi se ejecuta la accion de abajo
digitalWrite(adelante, LOW); //desactiva este pin para que solo avance atras
digitalWrite(atras, HIGH); //activa este pin que seria la marcha hacia atras
digitalWrite(izquierda, LOW); //desactiva este pin para que la dieccion este recta
digitalWrite(derecha,LOW); //desactiva este pin para que la direccion este recta
}
if(blue=='L'){ //en esta parte se compara si blue es igual a L de ser asi la direccion apunta hacia la izquierda
digitalWrite(adelante, LOW); //desactiva este pin para que solo haga la accion de torcer la direccion
digitalWrite(atras, LOW);//desactiva este pin para que solo haga la accion de torcer la direccion
digitalWrite(izquierda, HIGH);//activa este pin para que solo haga la accion de torcer la direccion hacia la izquierda
digitalWrite(derecha,LOW);//desactiva este pin para que solo haga la accion de torcer la izquierda
}
if(blue=='R'){ //en esta parte se compara si blue es igual a R de ser asi se ejecuta la accion de torcer hacia la derecha
digitalWrite(adelante, LOW); //desactiva este pin para que solo haga la accion de torcer
digitalWrite(atras, LOW);//desactiva este pin para que solo haga la accion de torcer
digitalWrite(izquierda, LOW);//desactiva este pin para que solo haga la accion de torcer
digitalWrite(derecha,HIGH);//activa este pin para que solo haga la accion de torcer hacia la derecha
}
if(blue=='G'){ //en esta parte se compara si blue es igual a G de ser asi se ejecuta la siguiente accion
//en la parte de abajo se combina la marcha hacia al frente y a la zquierda
digitalWrite(adelante, HIGH); //activa la marcha delantera
digitalWrite(atras, LOW); //desactiva la marcha hacia atras
digitalWrite(izquierda, HIGH); //activa la direccion en sentido izquierda
digitalWrite(derecha,LOW); //desactiva la direccion en sentido derecha
}
if(blue=='I'){ //en esta parte se compara si blue es igual a I de ser asi se ejecuta la siguiente accion
//en la parte de abajo se combina la marcha hacia el frente y la direccion en sentido derecha
digitalWrite(adelante, HIGH); //activa la marcha delantera
digitalWrite(atras, LOW); //desactiva la marcha hacia atras
digitalWrite(izquierda, LOW); //desactiva la direccion en sentido izquierda
digitalWrite(derecha,HIGH); //activa la direccion en sentido derecha
}
if(blue=='H'){ //en esta parte se compara si blue es igual a H de ser asi se ejecuta la siguiente accion
//en la parte de abajo se combina la marcha hacia atras y la direccion en sentido izquierda
digitalWrite(adelante, LOW); //desactiva la marcha delantera
digitalWrite(atras, HIGH); //activa la marcha atras
digitalWrite(izquierda, HIGH); //activa la direccion en sentido izquierda
digitalWrite(derecha,LOW); //desactiva la direccion en sentido derecha
}
if(blue=='J'){ //en esta parte se compara si blue es igual a J de ser asi se ejecuta la siguiente accion
//en la parte de abajo se combina la marcha hacia atras y la direccion en sentido derecha
digitalWrite(adelante, LOW); //desactiva la marcha delantera
digitalWrite(atras, HIGH); //activa la marcha atras
digitalWrite(izquierda, LOW); //desactiva la direccion en sentido izquierda
digitalWrite(derecha,HIGH); //activa la direccion en sentido derecha
}
if(blue=='S'){ //en esta parte se compara si blue es igual a S de ser asi se ejecuta la siguiente accion
//la app envia la letra S cuando no se apreta ningun boton para que el robot se detenga y apague todas la acciones
digitalWrite(adelante, LOW); //desactiva la marcha
digitalWrite(atras, LOW);//desactiva la marcha atras
digitalWrite(izquierda, LOW); //desactiva la direccion en sentido izquierda
digitalWrite(derecha,LOW); //desactiva la direccion en sentido derecha
}
}
}

You need a power source. That 9 volt battery doesn't provide power, only 9 volt if the load draws almost no current.
For posting code, please use IDE autoformat and the code tag function in this window,

Welcome to the forum.

Please read the forum guidelines to see how to properly post code and some information on making a good post.

Use the IDE autoformat tool (ctrl-t or Tools, Auto format) before posting code in a code block.

Here is your code formatted and posted properly. Is this not easier to read and follow. It is certainly easier for members to copy to put into our IDE or a text editor for examination.

//Saludos
//Actualización del código para que sea mas entendible

//INNOVADORES
//V.M.
//Facebook: Innovadores
//YouTube: INNOVADORES
//Cualquier consulta no duden en hacerla

//En esta parte declaramos los pines que utilizaremos
//en nuestro caso 2 para traccion y 2 para direccion
int adelante = 2; //usaremos este pin para dar la señal de ir
int atras = 3; //usaremos este pin para dar la señal de ir atras
int izquierda = 4; //usaremos este pin para dar la señal torcer la direccion hacia la izquierda
int derecha = 5; //usaremos este pin para dar la señal de torcer la direccion a la derecha
char blue; //creamos una variable para guardar las letras que nos enviara a app al apretar un boton

void setup()
{
   Serial.begin(9600);//fijamos la velocidad de coneccion con el bluetooth
   / en esta parte le decimos que nuestros pines seran de salida ya que emitiran una señal que
   ira a el puente H /
   pinMode (adelante, OUTPUT);
   pinMode (atras, OUTPUT);
   pinMode (izquierda, OUTPUT);
   pinMode (derecha, OUTPUT);
}

void loop()
{
   if (Serial.available() > 0) // preguntamos si la app envio una letra
   {
      blue = Serial.read(); //y si envio la letra la guardamos en nuestra variable blue
      if (blue == 'F') //en esta parte se compara si blue es igual a F,de ser asi se ejecuta la accion de abajo
      {
         digitalWrite(adelante, HIGH); //activa este pin que seria la marcha
         digitalWrite(atras, LOW); //desactiva este pin para que solo avance
         digitalWrite(izquierda, LOW); //desactiva este pin para que la direccion este recta
         digitalWrite(derecha, LOW); //desactiva este pin para que la direccion este recta
      }
      if (blue == 'B') //en esta parte se compara si blue es igual a B de ser asi se ejecuta la accion de abajo
      {
         digitalWrite(adelante, LOW); //desactiva este pin para que solo avance atras
         digitalWrite(atras, HIGH); //activa este pin que seria la marcha hacia atras
         digitalWrite(izquierda, LOW); //desactiva este pin para que la dieccion este recta
         digitalWrite(derecha, LOW); //desactiva este pin para que la direccion este recta
      }
      if (blue == 'L') //en esta parte se compara si blue es igual a L de ser asi la direccion apunta hacia la izquierda
      {
         digitalWrite(adelante, LOW); //desactiva este pin para que solo haga la accion de torcer la direccion
         digitalWrite(atras, LOW);//desactiva este pin para que solo haga la accion de torcer la direccion
         digitalWrite(izquierda, HIGH);//activa este pin para que solo haga la accion de torcer la direccion hacia la izquierda
         digitalWrite(derecha, LOW); //desactiva este pin para que solo haga la accion de torcer la izquierda
      }
      if (blue == 'R') //en esta parte se compara si blue es igual a R de ser asi se ejecuta la accion de torcer hacia la derecha
      {
         digitalWrite(adelante, LOW); //desactiva este pin para que solo haga la accion de torcer
         digitalWrite(atras, LOW);//desactiva este pin para que solo haga la accion de torcer
         digitalWrite(izquierda, LOW);//desactiva este pin para que solo haga la accion de torcer
         digitalWrite(derecha, HIGH); //activa este pin para que solo haga la accion de torcer hacia la derecha
      }
      if (blue == 'G') //en esta parte se compara si blue es igual a G de ser asi se ejecuta la siguiente accion
      {
         //en la parte de abajo se combina la marcha hacia al frente y a la zquierda
         digitalWrite(adelante, HIGH); //activa la marcha delantera
         digitalWrite(atras, LOW); //desactiva la marcha hacia atras
         digitalWrite(izquierda, HIGH); //activa la direccion en sentido izquierda
         digitalWrite(derecha, LOW); //desactiva la direccion en sentido derecha
      }
      if (blue == 'I') //en esta parte se compara si blue es igual a I de ser asi se ejecuta la siguiente accion
      {
         //en la parte de abajo se combina la marcha hacia el frente y la direccion en sentido derecha
         digitalWrite(adelante, HIGH); //activa la marcha delantera
         digitalWrite(atras, LOW); //desactiva la marcha hacia atras
         digitalWrite(izquierda, LOW); //desactiva la direccion en sentido izquierda
         digitalWrite(derecha, HIGH); //activa la direccion en sentido derecha
      }
      if (blue == 'H') //en esta parte se compara si blue es igual a H de ser asi se ejecuta la siguiente accion
      {
         //en la parte de abajo se combina la marcha hacia atras y la direccion en sentido izquierda
         digitalWrite(adelante, LOW); //desactiva la marcha delantera
         digitalWrite(atras, HIGH); //activa la marcha atras
         digitalWrite(izquierda, HIGH); //activa la direccion en sentido izquierda
         digitalWrite(derecha, LOW); //desactiva la direccion en sentido derecha
      }
      if (blue == 'J') //en esta parte se compara si blue es igual a J de ser asi se ejecuta la siguiente accion
      {
         //en la parte de abajo se combina la marcha hacia atras y la direccion en sentido derecha
         digitalWrite(adelante, LOW); //desactiva la marcha delantera
         digitalWrite(atras, HIGH); //activa la marcha atras
         digitalWrite(izquierda, LOW); //desactiva la direccion en sentido izquierda
         digitalWrite(derecha, HIGH); //activa la direccion en sentido derecha
      }
      if (blue == 'S') //en esta parte se compara si blue es igual a S de ser asi se ejecuta la siguiente accion
      {
         //la app envia la letra S cuando no se apreta ningun boton para que el robot se detenga y apague todas la acciones
         digitalWrite(adelante, LOW); //desactiva la marcha
         digitalWrite(atras, LOW);//desactiva la marcha atras
         digitalWrite(izquierda, LOW); //desactiva la direccion en sentido izquierda
         digitalWrite(derecha, LOW); //desactiva la direccion en sentido derecha
      }
   }
}

I agree with @Railroader that the 9V battery is not going to provide enough current for your motors nor will the Arduino itself. The motor power supply must be able to provide the combined stall current of the motors.

Thanks for your advicement, I'm new here, sorry about the code, it's ok if I use another 9 battery supply? or little less?

One suggestion is to post in the section using the language used in the comments. In the English forum the comments give almost no information.
Commenting in English is sometimes advisable.

1 Like

Hi @groundFungus thanks for your answer, it's ok if I put another 9v battery to provide enough current for the motors?

Not really. The 9V smoke alarm batteries just do not have the current capability to power motors.

so how many volts I need to provide enough current to my motors?

If I connect two 9v batteries in series, is enough to get enough current?

That will do nothing for the current, but it will double the voltage. Double the voltage could damage the motors if the batteries were capable of the current (which they are probably not). A 6 AA battery pack would give you 9V with enough current capability.

Going back to your Original Post (OP), what does that mean? Were you able to control the robot before attaching the HC05? What happens when you try to control the robot with the HC05? How do you know that you are even receiving anything from the HC05?

What is sending the data to the HC05 and the robot?

I would suggest that you move the HC05 to a software serial port and use the hardware serial port (pins 0 and 1) for program upload, debugging and monitoring program flow and variable values.

Open the Serial port and insert some serial prints to verify that you are receiving data, what (if anything) that you are receiving and follow the program flow.

I followed the diagram that i posted upright here, after everything is connected I tested the motors to see if they work, connecting the signal pins to control the motors, to the 5v pin in the arduino, and it works, But when i connect my phone to the HC-05 through the app, the motors don't move.

So if change my 9V battery to a 6 AA batteries, that will give me enough current to move the motors? it will work through the app?

A 6 AA battery pack will provide 9V and should provide sufficient current for 6V hobby motors.

What app? Is the Arduino actually receiving data? How do you know?

If I connect two 9V batteries in parallel it can also work?

The app than I'm using is this one

1 Like

Excuse me sir, i am a student of secondary and i am making this project with same codes diagrams and all. My moters are not working. I am giving power supply by the arduino round port. According to the diagram i should give it from batteries. Please help me. I have to submit my project.

so you want someboody to do your work for free? Like in the other 3 threads?

Those words makes no sense. Try pen and paper and draw a schematic.

What about a power suply at 12V.? Because I'm on the same point. I can't find a way to move the motors. Now, without Bluetooth, everything works great. Not even feeding with 12V.

#include <SoftwareSerial.h>
SoftwareSerial ElMeuBT(10, 11);  // pin 10 como RX, pin 11 como TX
char DATO = '0';
int IN1 = 2;
int IN2 = 3;
int IN3 = 7;
int IN4 = 8;

void setup() {
  ElMeuBT.begin(38400);
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
}
void loop() {
  if (ElMeuBT.available() > 0) {  // si hay informacion disponible desde modulo
    DATO = ElMeuBT.read();        // almacena en DATO el caracter recibido desde modulo
    if (DATO == '2') {
      digitalWrite(IN1, LOW);
      digitalWrite(IN2, HIGH);
      digitalWrite(IN3, LOW);
      digitalWrite(IN4, HIGH);
    }
    if (DATO == '8') {
      digitalWrite(IN1, HIGH);
      digitalWrite(IN2, LOW);
      digitalWrite(IN3, HIGH);
      digitalWrite(IN4, LOW);
    }
    if (DATO == '4') {
      digitalWrite(IN1, LOW);
      digitalWrite(IN2, HIGH);
      digitalWrite(IN3, LOW);
      digitalWrite(IN4, LOW);
    }
    if (DATO == '6') {
      digitalWrite(IN1, LOW);
      digitalWrite(IN2, LOW);
      digitalWrite(IN3, LOW);
      digitalWrite(IN4, HIGH);
    } else if (DATO == '5') {
      digitalWrite(IN1, LOW);
      digitalWrite(IN2, LOW);
      digitalWrite(IN3, LOW);
      digitalWrite(IN4, LOW);
    }
  }
}

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