1. El Octavo Bit
  2. / Arduino
  3. / Proyectos para Arduino
  4. / ¿Cómo hacer un coche controlado por bluetooth con Arduino?

¿Cómo hacer un coche controlado por bluetooth con Arduino?

| Actualizado:
Comentarios: 4

¿Cómo hacer un coche controlado por bluetooth con Arduino?
¿Cómo hacer un coche controlado por bluetooth con Arduino?

En este tutorial construiremos un robot móvil controlado por Bluetooth desde nuestro móvil a través de una aplicación de Android.

El montaje y la puesta en funcionamiento de este pequeño coche es sencillo puesto que es el resultado de la combinación de dos tutoriales que ya hemos visto: funcionamiento del módulo controlador de motores L298N y tutorial básico de uso del módulo bluetooth HC-06 en Arduino. Aconsejamos que reviséis esos dos proyectos para conocer anticipadamente el funcionamiento del controlador de motores L298N y cómo conectar el módulo de bluetooth y configurarlo.

Material necesario:

  • Placa Arduino
  • Chasis rueda loca.
  • 2 ruedas.
  • 2 motores reductores TT de doble eje.
  • Módulo controlador de motores L298N.
  • Módulo bluetooth HC-06.
  • Interruptor ON/OFF de 2 pines.
  • Portapilas para la alimentación de la placa de Arduino y 4 pilas AA.
  • Pila de 9V para el controlador y motores.
  • Cables. Tornillos y tuercas.

Esquema:

Esquema para el montaje de robot controlado por Bluetooth con una aplicación Android

Montaje

Paso 1. Conectamos los cables en los motores y los sujetamos al chasis. Primero conectamos los cables rojos y negros a los dos motores que tenemos. Los podemos soldar a los bornes metálicos de los motores o utilizar cinta aislante, asegurándonos de que el contacto con el borne es correcto. Para sujetar los motores en el chasis utilizamos las piezas rectangulares y los tornillos.

Colocación de los motores al chasis del robot
Montaje del chasis con los dos motores eductores.

Paso 2. Montamos la rueda loca y el soporte para las pilas. La rueda loca es una rueda sin tracción que gira libremente; el soporte de pilas lo utilizaremos para colocar las cuatro pilas AA encargadas de alimentar la placa Arduino.

Colocación en el chasis de la rueda loca y el portapilas
Colocamos en el chasis la rueda loca y el portapilas.

Paso 3. Colocamos el interruptor. El interruptor lo usaremos para el módulo controlador de motores L298N. Podemos insertarlo en el hueco que hay en medio del chasis.

En el paso 3 colocamos el interruptor que nos va a permitir dar energia al controlador de motores.
Interruptor con sus cables colocado en el chasis.

Paso 4. Colocar la placa de Arduino.

Colocamos la placa Arduino en el chasis.
Chasis con la placa Arduino colocada en la zona delantera.

Paso 5. Colocar el módulo controlador de motores L298N en la zona trasera del chasis. Una vez colocado, unimos los cables de los motores a los correspondientes pines del módulo.

Chasis con el controlador L298N en la zona trasera.
Chasis con el controlador L298N para los motores.

Paso 6. Colocamos la pila de 9V que alimentará al módulo controlador.

Pila de 9V para alimentar el controlador de los motores
Pila de 9V para alimentar el módulo controlador.

Utilizaremos la pila de 9 V como fuente de alimentación del módulo L298N; el cable rojo irá a la entrada de alimentación del módulo y el cable de tierra al GND del controlador y al GND de la placa Arduino.

Paso 7. Conectamos la placa de Arduino con el módulo controlador L298N.

Los pines van conectados en el siguiente orden:

  • ENA –> Pin 10 (cable verde en la imagen). Debemos recordar que los pines ENA y ENB son los que controlan la velocidad de giro.
  • ENB –> Pin 5 (cable verde)
  • IN1 –> Pin 9 (cable naranja)
  • IN2 –> Pin 8 (cable azul)
  • IN3 –> Pin 7 (cable azul)
  • IN4 –> Pin 6 (cable naranja)
Colocamos los cables que conectan la placa Arduino y el controlador L298N.
Colocamos los bables que conectan la placa y el controlador.

Paso 8. Probamos los motores. Una vez que tenemos en el chasis: la placa de Arduino, el controlador L298N, la pila de 9V para alimentar el controlador, el portapilas de 4 pilas para alimentar el Arduino, los motores con sus respectivas ruedas y el interruptor montado; podemos probar los motores y si el giro de las ruedas es el correcto.

Chasis completo con la placa Arduino, controlador L298N, portapilas, y pila de 9V.

Este código para probar el giro de los motores no incluye la biblioteca, sin embargo, si preferís utilizar la biblioteca, mirad el tutorial funcionamiento del módulo controlador de motores L29.

// Motor 1
int ENA = 10;
int IN1 = 9;
int IN2 = 8;

// Motor 2
int ENB = 5;
int IN3 = 7;
int IN4 = 6;

void setup() {
 pinMode (ENA, OUTPUT);
 pinMode (ENB, OUTPUT);
 pinMode (IN1, OUTPUT);
 pinMode (IN2, OUTPUT);
 pinMode (IN3, OUTPUT);
 pinMode (IN4, OUTPUT);  
}

void loop() {
  Adelante();
  delay(5000);
  Atras();
  delay(5000);
  Derecha();
  delay(5000);
  Izquierda();
  delay(5000);
  Parar();
  delay(5000);
}

void Adelante (){
 //Dirección motor A
 digitalWrite (IN1, LOW);
 digitalWrite (IN2, HIGH);
 analogWrite (ENA, 100); //Velocidad motor A
 //Dirección motor B
 digitalWrite (IN3, HIGH);
 digitalWrite (IN4, LOW);
 analogWrite (ENB, 100); //Velocidad motor B
}

void Derecha (){
 //Dirección motor A
 digitalWrite (IN1, HIGH);
 digitalWrite (IN2, LOW);
 analogWrite (ENA, 255); //Velocidad motor A
 //Dirección motor B
 digitalWrite (IN3, HIGH);
 digitalWrite (IN4, LOW);
 analogWrite (ENB, 255); //Velocidad motor A
}

void Izquierda (){
 //Dirección motor A
 digitalWrite (IN1, LOW);
 digitalWrite (IN2, HIGH);
 analogWrite (ENA, 255); //Velocidad motor A
 //Dirección motor B
 digitalWrite (IN3, LOW);
 digitalWrite (IN4, HIGH);
 analogWrite (ENB, 255); //Velocidad motor A
}

void Atras (){
 //Dirección motor A
 digitalWrite (IN1, HIGH);
 digitalWrite (IN2, LOW);
 analogWrite (ENA, 255); //Velocidad motor A
 //Dirección motor B
 digitalWrite (IN3, LOW);
 digitalWrite (IN4, HIGH);
 analogWrite (ENB, 255); //Velocidad motor B
}

void Parar (){
 //Dirección motor A
 digitalWrite (IN1, LOW);
 digitalWrite (IN2, LOW);
 analogWrite (ENA, 0); //Velocidad motor A
 //Dirección motor B
 digitalWrite (IN3, LOW);
 digitalWrite (IN4, LOW);
 analogWrite (ENB, 0); //Velocidad motor A
}

Cada función de movimiento está separada, hay que ir probándolas y comprobando si se corresponden con el movimiento que deseamos, en caso de que no sea así, habría que probar cambiando los cables de conexión del motor o la sección de código correspondiente. IN1 e IN2 son los responsables del giro del motor. Si IN1 está configurado como HIGH e IN2 como LOW, para cambiar el sentido de giro, invertimos la configuración, IN1 cambia a LOW e IN2 a HIGH.

Paso 9. Conectamos el módulo de bluetooth.

Conexión del módulo bluetooth
Conexión del módulo bluetooth.

Realizamos las conexiones entre la placa y el módulo de bluetooth:

  • VCC –> al pin de 5V de Arduino (cable rojo en la imagen)
  • GND –> al pin GND de la placa (cable negro)
  • TXD –> al pin 4 digital de la placa (cable amarillo)
  • RXD –> al pin 2 digital de la placa (cable blanco)

Antes de probar el módulo bluetooth, configuramos la aplicación. La aplicación que vamos a utilizar ya ha sido usada anteriormente en el tutorial: Tutorial básico de uso del módulo bluetooth HC-06 en Arduino. La descargamos de Google Play si no la tenemos instalada: Arduino bluetooth controller. Para configurar la aplicación, primero vinculamos el móvil al módulo, abrimos la aplicación, y veremos:

Capturas de pantalla de la aplicación android utilizada para el móvil.
Capturas de pantalla de la aplicación andorid utilizada para el móvil.

Aparecerá en la pantalla el nombre del dispositivo, por defecto será HC-06 si estáis utilizando el mismo que en el tutorial. En este caso concreto, aparece mibluetooth puesto que yo he cambiado la configuración. La contraseña por defecto es 1234. Una vez conectado, escogemos el modo «Controller mode».

Pantalla con los mandos de control
Pantalla con los mandos de control

Para controlar nuestro coche utilizaremos las flechas de la izquierda, habrá que configurarlas, para ello presionamos sobre el icono de la rueda en la zona superior derecha y se abrirá una ventana donde podremos ir configurando cada flecha con las letras que corresponden con la imagen de la derecha. En este caso lo he configurado con las letras: i, izquierda, a, avance, d, derecha, r, retroceso y p parada.

Añadimos el código necesario para controlar el módulo de bluetooth, utilizamos la librería SoftwareSerial para tener libres los pines digitales 0 y 1 de la placa Arduino:

#include "SoftwareSerial.h"
SoftwareSerial BT(4,2);

En la función setup() iniciamos la comunicación serial y con el puerto BT:

Serial.begin(9600);
BT.begin(9600);

Y modificamos la función loop() para controlar nuestro coche. Según el botón que presionemos en nuestro móvil, Arduino realizará el movimiento correspondiente:

void loop() {
  if (BT.available()){
    char dato=BT.read();

    switch(dato){
      case 'a':
        Adelante();
        break;
      case 'r':
        Atras();
        break;
      case 'd':
        Derecha();
        break;
      case 'i':
        Izquierda();
        break;
      case 'p':
        Parar();
        break;
    }    
  }
}

El código completo sería:

#include "SoftwareSerial.h"
SoftwareSerial BT(4,2); // RX, TX recorder que se cruzan
// Motor 1
int ENA = 10;
int IN1 = 9;
int IN2 = 8;

// Motor 2
int ENB = 5;
int IN3 = 7;
int IN4 = 6;

void setup() {
 Serial.begin(9600);
 BT.begin(9600);
 pinMode (ENA, OUTPUT);
 pinMode (ENB, OUTPUT);
 pinMode (IN1, OUTPUT);
 pinMode (IN2, OUTPUT);
 pinMode (IN3, OUTPUT);
 pinMode (IN4, OUTPUT);  
}

void loop() {
  if (BT.available()){
    char dato=BT.read();

    switch(dato){
      case 'a':
        Adelante();
        break;
      case 'r':
        Atras();
        break;
      case 'd':
        Derecha();
        break;
      case 'i':
        Izquierda();
        break;
      case 'p':
        Parar();
        break;
    }    
  }
}

void Adelante (){
 //Dirección motor A
 digitalWrite (IN1, LOW);
 digitalWrite (IN2, HIGH);
 analogWrite (ENA, 255); //Velocidad motor A
 //Dirección motor B
 digitalWrite (IN3, HIGH);
 digitalWrite (IN4, LOW);
 analogWrite (ENB, 255); //Velocidad motor B
}

void Derecha (){
 //Dirección motor A
 digitalWrite (IN1, HIGH);
 digitalWrite (IN2, LOW);
 analogWrite (ENA, 255); //Velocidad motor A
 //Dirección motor B
 digitalWrite (IN3, HIGH);
 digitalWrite (IN4, LOW);
 analogWrite (ENB, 255); //Velocidad motor A
}

void Izquierda (){
 //Dirección motor A
 digitalWrite (IN1, LOW);
 digitalWrite (IN2, HIGH);
 analogWrite (ENA, 255); //Velocidad motor A
 //Dirección motor B
 digitalWrite (IN3, LOW);
 digitalWrite (IN4, HIGH);
 analogWrite (ENB, 255); //Velocidad motor A
}

void Atras (){
 //Dirección motor A
 digitalWrite (IN1, HIGH);
 digitalWrite (IN2, LOW);
 analogWrite (ENA, 255); //Velocidad motor A
 //Dirección motor B
 digitalWrite (IN3, LOW);
 digitalWrite (IN4, HIGH);
 analogWrite (ENB, 255); //Velocidad motor B
}

void Parar (){
 //Dirección motor A
 digitalWrite (IN1, LOW);
 digitalWrite (IN2, LOW);
 analogWrite (ENA, 0); //Velocidad motor A
 //Dirección motor B
 digitalWrite (IN3, LOW);
 digitalWrite (IN4, LOW);
 analogWrite (ENB, 0); //Velocidad motor A
}

Artículos que te pueden interesar

Servomotores con Arduino, servo SG90
Uso de servomotores con Arduino. Servo SG90

Uso de servomotores con Arduino. Servo SG90

| Actualizado:
Comentarios: 0

En este tutorial se explicará el funcionamiento y características de un servomotor, Servo SG90, así como la conexión con la placa Arduino y su utilización Contenido 1 Librería servo de Arduino 2 Esquema para su montaje 3 Código para girar…

Robot esquiva obstáculos con Arduino
Robot esquiva obstáculos con Arduino y un sensor de ultrasonidos

Robot esquiva obstáculos con Arduino y un sensor de ultrasonidos

| Actualizado:
Comentarios: 2

En este proyecto nos marcamos el objetivo de desarrollar un robot capaz de esquivar objetos. Un robot que avanzará en línea recta mientras que no detecte ningún obstáculo; en caso de detectar algún estorbo, girará sobre sí mismo hasta que…

¿Cómo hacer un semáforo con Arduino?

¿Cómo hacer un semáforo con Arduino?

| Actualizado:
Comentarios: 0

Simular un semáforo es uno de los clásicos en la iniciación de los proyectos de Arduino. Aquí vamos a mostrar como puedes montar un semáforo sencillo, un semáforo para coches y peatones automatizado y por último, el semáforo para coches…

Robot Arduino controlado por un mando a distancia de infrarrojos
Robot Arduino dirigido con un mando infrarrojo

Robot Arduino controlado por un mando a distancia de infrarrojos

| Actualizado:
Comentarios: 0

El objetivo de este proyecto es controlar el movimiento de un robot Arduino con un mando a distancia, a través de una señal de infrarrojo.

Comentarios - 4

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

FAREEH TALHA BUTT DAR
14 February, 2021

He copiado tal cual todo. Pero cuando lo quiero funcionar con el móvil, hay un tengo un erro, es decir, que me empareja correctamente el bluetooth con el hc c6 pero al presionar los botones no funciona el coche


Alfredo Sanchez
5 May, 2021

Buen día. Me pudieran apoyar. Tengo problemas ya pude vincular módulo Bluetooth y en la aplicación si lo reconoce pero no hace los movimientos hacia los servomotores


Arturo
17 July, 2021

Hola amigos del octavobit!, escribo este comentario porque después de estar muchas horas buscando como hacer mi proyecto de mi primer robot con Arduino ustedes fueron los únicos que pudieron ayudarme, de verdad se los agradezco mucho, gracias por compartir su conocimiento. Saludos desde Puerto Varas, Chile.


JL
27 September, 2021

Muy bueno muchas gracias me adelanto bastante trabajo, ahora solo me falta poner cambio de velocidades para asimilar una caja de cambios