Artículos recientes

Novedades

Robot móvil controlado por bluetooth

Robot móvil controlado por bluetooth

En este tutorial, construiremos un robot móvil, el cual será controlado por bluetooth desde nuestro celular a través de un aplicativo Android.

 

Materiales

Empecemos describiendo los principales materiales:

Arduino

Podemos usar cualquiera de las placas Arduino, nosotros usaremos el Arduino Uno R3 por ser uno de los más usados.

Arduino Uno R3

Modulo Bluetooth HC-06 o HC-05 

Este módulo nos sirve para que nuestro Arduino y el celular puedan comunicarse a través de bluetooth. Para esta aplicación podemos usar cualquiera de los dos modulo pues los trabajaremos en modo esclavo.

Módulo bluetooth HC-05
Si usan un HC-06 estaría listo para usar, si usan un HC-05 deben verificar que esté configurado como esclavo. La velocidad con la que vamos a trabajar es a 9600baudios, que es la velocidad que viene por defecto tanto en el HC-06 como en el HC-05.

 

Nosotros usaremos el HC-06 con su configuración por defecto, si desean realizar configuraciones adicionales puede consultar nuestros tutoriales:
Configuración del módulo bluetooth HC-06 usando comandos AT

Configuración del módulo bluetooth HC-05 usando comandos AT

Driver Puente H

El puente H es el que nos permite invertir el giro de un motor, necesitamos un puente H que tenga dos canales para poder controlar dos motores.

 Puente H L298NPuente H L9110

Entre los puente H más comunes tenemos el L298N, L293D, TB6612FNG y el L9110S , Algunos módulos aparte de los pines para controlar la dirección tienen un pin (Enable ) por donde podemos enviar PWM y controlar la velocidad, pero para este tutorial podemos usar cualquiera pues solo controlaremos dirección.

 

Motores con Llanta:

Básicamente  2 motores DC con caja reductora y su respectiva llanta, una velocidad promedio puede ser 100RPM, pero dependerá de la velocidad que uno desee.

Motores N20 12VMotores con llanta

El voltaje dependerá de la batería, por ejemplo si tienen una batería de 6V o de 3.7V se puede trabajar con el motor amarillo, si tienen una batería de 12V  o 9V pueden trabajar con los micro motores, Si alimentamos un motor con un voltaje inferior al nominal, su velocidad disminuye, en cambio sí alimentamos con un voltaje superior podemos malograr el motor, por eso debemos de tener en cuenta las especificaciones técnicas del motor.

Batería

Esto tal vez sea lo más difícil de establecer, lo primero que hay que tener en cuenta es el voltaje. Arduino trabaja con un  voltaje entre 6 y 12V, aparte de esto hay que tener en cuenta el voltaje del motor. También hay que considerar la corriente y la capacidad, por ejemplo si usamos una pila económica de 9V nos durará menos de un minuto, se recomienda que la capacidad sea superior a 500mAH

A continuación mostramos las opciones que pueden usar dependiendo del motor que tengan:

Motor de  6V:

Opción 1: 4 pilas AA para los motores y una de 9V para el Arduino

Opción 2: 1 celda de litio (batería de celular) para los motores y una pila de 9V para el Arduino

Opción 2: Cualquier batería superior a 6V (de suficiente corriente) y un step down para bajar el voltaje.

Motor de 12V:

Opción 1: Pila duracell 9V

Opción 2: batería lipo o litio de 2 o 3 celdas.

Opción 3: cualquier Batería de 12V  (de suficiente corriente)

Opción 4: 1 celda de litio (batería de celular) o batería de 3.7V y un step Up para aumentar el voltaje.

Independiente del valor del voltaje de la batería podemos usar conversores DC-DC para aumentar (step up) o reducir (step down) el voltaje.

 

Chasis y rueda loca 

Esto dependerá del diseño de cada uno, pueden hacerlo, o comprar uno hecho. El chasis básicamente es en donde se va a poner los dos motores con llanta y los demás componentes, adicionalmente se necesita una rueda giratoria o una ballcaster, que será el tercer punto de apoyo junto a las otras dos llantas.

Chasis Robot movil

Otros accesorios:

Adicionalmente podemos necesitamos un protoboard, cables DuPont Macho-Macho y Hembra-Macho y cablecillo para soldar los motores.

1. Ensamblando la parte mecánica de nuestro Robot Móvil

Existen varios diseños en internet que nos pueden ayudar, así como existen plataformas comerciales. Esto dependerá de cada uno,

Para nuestro tutorial usaremos la locomoción diferencial, que utiliza dos ruedas principales que dan la tracción y por diferencia de velocidad en estas podremos realizar giros. Usaremos esta configuración por ser fácil de implantar, a diferencia de la configuración Ackerman (la que usan los vehículo motorizados) que es más complicado de implementar la parte mecánica.

La principal diferencia entre estas dos configuraciones es en el giro del robot, en la configuración diferencial tenemos que invertir el giro en uno de los motores o simplemente disminuir la velocidad, en cambio en la configuración Ackerman necesitamos de un servomotor para girar las llantas delanteras.

Movimiento Robot Diferencial y Ackerman

Como indicamos nosotros vamos a trabajar en la configuración diferencial y adicionalmente a las dos llantas principales necesitamos una o dos ruedas giratorias que nos servirán de apoyo, esta rueda lo podemos poner adelante y/o atrás.

Robot Movil

2. Conexiones eléctricas:

A continuación mostramos dos posibles conexiones dependiendo del tipo de motor que tengan.


2.1 Para motores DC de 3-6VDC

Conexión motores de 3V o 6V
Para este caso si necesitamos usar una sola batería, es mejor usar un step down y no alimentar los motores con los 5V del Arduino, pues sobrecalentaríamos el regulador interno que tiene.
La betería tiene que ser superior a 6V para que pueda trabajar nuestro Arduino pero se recomienda que tampoco sea superior a los 12V, adicionalmente la batería debe tener suficiente corriente para que pueda alimentar los dos motores, de lo contrario nuestro Arduino se va a estar reseteando cuando empiecen a funcionar los motores.

Antes de instalar el step down hay que regular al voltaje que deseamos, puede ser 6v, 5V, 3v, etc, variando este voltaje también estamos modificando la velocidad de los motores.



2.2 Para motores DC de 12V DC

 Conexión motores de 9V o 12V

De esta forma el voltaje que ingresa a los motores es el mismo que el de la batería.
Dependiendo del tipo de motor puedes usar la batería que más se adecue a tu necesidad, teniendo en cuenta que tenga la suficiente corriente y duración.

Las conexión son similares para otros tipos de Drivers Puente H, pueden revisar nuestro tutorial de uso del L298N en caso estén usando ese módulo.


3. Programación de  nuestro Robot Móvil


Para que tengan una mayor comprensión trabajaremos el programa en dos etapas:

3.1 Test de movimientos

En este primer ejemplo probaremos los diferentes movimientos del robot, lo realizaremos aun sin conexión bluetooth para poder entender mejor el programa.

Para poder programar necesitamos desconectar el módulo bluetooth, podemos desconectar todo el módulo o simplemente dejar libre el RX (pin 0) del Arduino

El código es el siguiente:
 

//Pines de conexión del driver
int Pin_Motor_Der_A = 8;
int Pin_Motor_Der_B = 9;
int Pin_Motor_Izq_A = 10;
int Pin_Motor_Izq_B = 11;

void setup() {
  // inicializar la comunicación serial a 9600 bits por segundo:
  Serial.begin(9600);
  // configuramos los pines como salida
  pinMode(Pin_Motor_Der_A, OUTPUT);
  pinMode(Pin_Motor_Der_B, OUTPUT);
  pinMode(Pin_Motor_Izq_A, OUTPUT);
  pinMode(Pin_Motor_Izq_B, OUTPUT);
}

void loop() {
  //movemos el robot hacia delante por 2 segundos
  Mover_Adelante();
  delay(2000);
  //movemos el motor a la derecha por 2 segundos
  Mover_Derecha();
  delay(2000);
  
}

void Mover_Adelante()
{
  digitalWrite (Pin_Motor_Der_A, HIGH);
  digitalWrite (Pin_Motor_Der_B, LOW);
  digitalWrite (Pin_Motor_Izq_A, HIGH);
  digitalWrite (Pin_Motor_Izq_B, LOW);
}
void Mover_Retroceso()
{
  digitalWrite (Pin_Motor_Der_A,LOW );
  digitalWrite (Pin_Motor_Der_B,HIGH );
  digitalWrite (Pin_Motor_Izq_A,LOW );
  digitalWrite (Pin_Motor_Izq_B,HIGH );
}
void Mover_Derecha()
{
  digitalWrite (Pin_Motor_Der_A,LOW );
  digitalWrite (Pin_Motor_Der_B,HIGH );
  digitalWrite (Pin_Motor_Izq_A,HIGH);
  digitalWrite (Pin_Motor_Izq_B,LOW);
}
void Mover_Izquierda()
{
  digitalWrite (Pin_Motor_Der_A,HIGH);
  digitalWrite (Pin_Motor_Der_B,LOW);
  digitalWrite (Pin_Motor_Izq_A,LOW );
  digitalWrite (Pin_Motor_Izq_B,HIGH );
}
void Mover_Stop()
{
  digitalWrite (Pin_Motor_Der_A, LOW);
  digitalWrite (Pin_Motor_Der_B, LOW);
  digitalWrite (Pin_Motor_Izq_A, LOW);
  digitalWrite (Pin_Motor_Izq_B, LOW);
}


Como se observa la programación es fácil, se ha programado cada movimiento del robot en funciones separadas, las cuales llamamos desde el void loop(),

Para probar los movimientos hay que ir probando cada función y ver si nuestro robot se mueva de la misma manera como se lo ha programado, por ejemplo así como está el código, después de encender o resetear el Arduino debe moverse hacia delante por 2 segundos, seguidamente debe girar a la derecha por dos segundos más y lego repetir la secuencia, si el robot gira en dirección equivocada, entonces debemos de cambiar la polaridad de motor que gira en sentido erróneo.
Podemos ir probando los movimientos de forma individual reprogramando cada vez para cambiar el movimiento o programar todos a la vez con pausas entre movimientos, eso dependerá de cada uno, después de estar seguros que nuestro robot funciona correctamente pasamos a implementar la comunicación bluetooth.

2.2 Robot Móvil controlado por Bluetooth


Para controlar el Robot usaremos una aplicación en nuestro celular, para esto debemos de instalar en nuestro celular la siguiente aplicacion.

 icono naylamp car

Naylamp Car: Instalar desde Google Play

La aplicación consta de 4 botones una para cada dirección, al presionar el botón para mover adelante, la aplicación envía por bluetooth el carácter ‘a’ y lo sigue enviando constantemente mientras se tenga presionado. De igual manera para los otros botones, la aplicación envía ‘r’ para retroceso, ‘i’ para izquierda y ‘d’  para mover a la derecha.

Naylamp car


Nuestro  Arduino debe de leer estos 4 caracteres y realizar el movimiento, además al no tener un botón stop, nuestro Arduino deberá detener de forma automática los movimientos cuando no se tenga presionado ningún botón.

Antes de cargar el programa a nuestro Arduino debemos de desconectar los cables de nuestro bluetooth y después de terminado la carga podemos volverlo a conectarlo.

 
El  código que debemos de cargar a nuestro Arduino es el siguiente:

//Pines de conexión del driver
int Pin_Motor_Der_A = 8;
int Pin_Motor_Der_B = 9;
int Pin_Motor_Izq_A = 10;
int Pin_Motor_Izq_B = 11;

int tiempo=0;
void setup() {
  // inicializar la comunicación serial a 9600 bits por segundo:
  Serial.begin(9600);
  // configuramos los pines como salida
  pinMode(Pin_Motor_Der_A, OUTPUT);
  pinMode(Pin_Motor_Der_B, OUTPUT);
  pinMode(Pin_Motor_Izq_A, OUTPUT);
  pinMode(Pin_Motor_Izq_B, OUTPUT);

}

void loop() {

  if (Serial.available()) {
     char dato= Serial.read();
     if(dato=='a')
     {
        Mover_Adelante();
        tiempo=0;
     }
     else if(dato=='r')
     { 
        Mover_Retroceso();
        tiempo=0;
     }
     else if(dato=='d')
     { 
        Mover_Derecha();
        tiempo=0;
     }
     else if(dato=='i')
     { 
        Mover_Izquierda();
        tiempo=0;
     }   
   
  }

  if(tiempo<200) // 100 cilcos de 1ms 
  {    
    tiempo=tiempo+1;
  }
  else   //ya transcurrió 100ms (100ciclos)
  {
    Mover_Stop();
  }
  
  
  delay(1); //pasusa de 1ms por ciclo
  
}

void Mover_Adelante()
{
  digitalWrite (Pin_Motor_Der_A, HIGH);
  digitalWrite (Pin_Motor_Der_B, LOW);
  digitalWrite (Pin_Motor_Izq_A, HIGH);
  digitalWrite (Pin_Motor_Izq_B, LOW);
}
void Mover_Retroceso()
{
  digitalWrite (Pin_Motor_Der_A,LOW );
  digitalWrite (Pin_Motor_Der_B,HIGH );
  digitalWrite (Pin_Motor_Izq_A,LOW );
  digitalWrite (Pin_Motor_Izq_B,HIGH );
}
void Mover_Derecha()
{
  digitalWrite (Pin_Motor_Der_A,LOW );
  digitalWrite (Pin_Motor_Der_B,HIGH );
  digitalWrite (Pin_Motor_Izq_A,HIGH);
  digitalWrite (Pin_Motor_Izq_B,LOW);
}
void Mover_Izquierda()
{
  digitalWrite (Pin_Motor_Der_A,HIGH);
  digitalWrite (Pin_Motor_Der_B,LOW);
  digitalWrite (Pin_Motor_Izq_A,LOW );
  digitalWrite (Pin_Motor_Izq_B,HIGH );
}
void Mover_Stop()
{
  digitalWrite (Pin_Motor_Der_A, LOW);
  digitalWrite (Pin_Motor_Der_B, LOW);
  digitalWrite (Pin_Motor_Izq_A, LOW);
  digitalWrite (Pin_Motor_Izq_B, LOW);
}

Como se observa al código del primer ejemplo solo le hemos agregado la parte de la comunicación serial, en donde leemos el dato y comparamos para ver si es el carácter correspondiente para realizar su respectivo movimiento, adicionalmente si durante 100 milisegundos no llega ningún dato detenemos el robot, y tan pronto le llega uno de los datos reiniciamos la cuenta de los 100ms.

Una vez que tengan todo listo, tan solo hay que abrir la App, conectarnos a nuestro modulo bluetooth y empezar a mover nuestro robot con los botones.

42 Comments

    • Avatar
      Juan Carlos Fernández López
      dic 29, 2016

      Hola amigo!! Felicidades por lo bien que explicas y ayudas tanto a gente como yo que tenemos medio siglo de edad y seguimos estudiando electrónica. He realizado un trabajo con tres motores para una pequeña grúa y tú programación de Arduino me ha venido genial y he podido incorporar el tercer motor y he cambiado los movimientos. Tengo un pequeño problema al hacerme mi propia app con MIT App inventor que cuando pulso el botón del móvil me lo hace como un click, aunque lo haga con "touch down" y con tu aplicación si me funciona los motores mientras lo tengo pulsado (No me sirve la tuya porque necesito dos botones para el tercer motor) Ojalá me puedas ayudar Un abrazo desde Martos (Jaén) ESPAÑA Feliz año nuevo!!

      • Avatar
        Ernesto Rodriguez
        oct 17, 2018

        Excelente hermano, explicas de una forma didáctica que se te entiende. Solo te pido que me envíes la aplicación hecha con App Inventor 2. Gracias desde Lima - Perú

    • Avatar
      pablo martinez
      feb 26, 2017

      Que maravilla lo bien que lo explicáis. Voy a usar este ejemplo para dar clases en España. Muchas gracias!

    • Avatar
      Luis
      may 29, 2017

      Una pregunta y si trabajo con cuatro motores cuanta bateria seria

    • Avatar
      Toteboy
      jun 14, 2017

      Hola buenas tardes, tengo un problema con este montaje. Una vez empleado el montaje a 9V y cargado el programa (tras haber probado todo con el "test de movimientos") y establecido la comunicación bluethooth, a la hora de mandar los pulsos desde vuestra app, no llega ningúhn tipo de impulso al receptor HC-06 a 9600 baudios. Quisiera saber cómo puedo solucionarlo. Gracias de antemano.

      • Avatar
        Naylamp
        jun 30, 2017

        Hola, primero asegúrate si la app se a conectado al HC-06, el led del HC-06 debe dejar de parpadear mientras esté conectado. Asegúrate de haber conectado correctamente los pines RX y TX como en la imagen (cruzado rx con tx), el cable USB debe de estar desconectado de la PC (o por lo menos cerrado el monitor serial). Verifica que la batería tenga suficiente corriente para alimentar todo el circuito. Verifica que el HC-06 está configurado a 9600

    • Avatar
      Daniel Isaías Ullauri Torres
      ago 6, 2017

      avrdude: ser_open(): can't open device "\.COM1": The system cannot find the file specified.Me sale este error al cargar... motivo? Gracias

      • Avatar
        Naylamp
        ago 29, 2017

        Hola Daniel. Es porque no tienes seleccionado el puerto COM correcto, si tu PC dejó de reconocer el COM de tu arduino solo desconecta el arduino y vuelve a conectarlo, si es necesario cierra también el IDE.

    • Avatar
      Juan Marañón
      ago 22, 2017

      Hola,muy buen proyecto, me gustaria ponerle una camara, pero no se cual y como ponerle. Alguna ayuda?

      • Avatar
        Naylamp
        ago 29, 2017

        Hola Juan, lo más recomendable es que la cámara no lo maneje arduino sino sea totalmente externo, por ejemplo una cámara Wifi inalámbrica o un cámara IP, también puedes usar tu celular como webcam, lo último seria para visualizar la imagen de la cámara del celular en tu PC.

    • Avatar
      Eduardo
      sep 11, 2017

      Hola, amigo podrias explicarme en la programcion cual es la funcion de la variable tiempo... De ante mano gracias.

    • Avatar
      Raul Balarezo
      oct 15, 2017

      Buenas, queria hacerle una consulta acerca del step down

    • Avatar
      joseias olarte borda
      oct 15, 2017

      Buenas noches, quisiera saber porque no funciona las app, eh conectado todo como menciona el diagrama, la puebra de movimiento, cambie las baterías y nada, ayuda por favor. GRACIAS

    • Avatar
      remso
      oct 27, 2017

      buenas noches quería hacerles una consulta, me encuentro estudiando en la universidad y quisiera hacer un puente grúa como proyecto , tengo los rieles de una impresora antigua pero quisiera saber que me recomendarían , o que sensores se deben usar para ese proyecto.

    • Avatar
      Alejandra
      oct 27, 2017

      Me

    • Avatar
      martin
      mar 4, 2018

      hola una pregunta ya conecte todo como lo muestra en el diagrama pero los motores no se mueven solo suena un tic al presionar las flechas para que se mueve ¿que ago?

      • Avatar
        Lucas Gutiérrez
        jul 18, 2018

        me pasa lo mismo, pero en la version de test de movimientos

    • Avatar
      Jesús Cano
      mar 11, 2018

      Hola, excelente proyecto que estoy poniendo en prácticas con mis alumnos de robótica en un instituto de secundaria de Castilla-La Mancha, en España. Me gustaría si fuese posible que me pasases el código con el que has creado la app y el programa con el que la has hecho para que ellos pudiesen entender perfectamente todo el proyecto con todo detalle.Muchas gracias.

    • Avatar
      miguel
      may 9, 2018

      bueno la verdad es que si la politica en estosaños esta dificil

    • Avatar
      Jorge
      may 9, 2018

      Quiero saber que funcion usaste para los botones para que mientras lo presiones se envie la señal y cuando dejes de hacerlo esta tambien deje de enviarse.

    • Avatar
      Majo
      jun 2, 2018

      Hola tengo dudas sobre el robot: tienen las conexiones de este robot con Puente driver H L298n y modulo bluethoot HC-5 y el código?

    • Avatar
      Lucas Gutiérrez
      jul 18, 2018

      hola queria hacer una pregunta, no hay que cargar ninguna libreria, por lo del driver? Ademas cambia algo si uso el modulo BT Hc-05?

    • Avatar
      Saúl Gustavo
      ago 12, 2018

      Cambia la manera en la que se conecta con el puente driver h L298n

    • Avatar
      Fernanda
      oct 21, 2018

      Hola, está super padre la forma en la que explicas todo el programa. Te quería preguntar sobre qué podría hacer con lo app. Es que yo usé otro puente H, y cambié los pines 8y9 por los pines 5y6 del Arduino Leonardo. Hice la prueba de lo del puente H con tu código (claro, con la modificación del pin 8y9 por 5y6), y me funcionó de maravilla. El problema es que ya cuando lo quise controlar con la app, en esta no me aparece nada de error y tampoco se mueve el carrito. El módulo bluetooth es el HC-06.

    • Avatar
      cesar
      nov 17, 2018

      hola, muy bueno el proyecto, lo estoy usando en el arduino, pero no se como agregarle al codigo de arduino para que funcione el sensor de ulatrasonido podrias agregarlo o mandarmelo por email. pls

    • Avatar
      Windy
      nov 30, 2018

      Geniaaaaal !! Funciono perfectooooo :D

    • Avatar
      luis angel
      nov 30, 2018

      como conectaria un puente h TB6612FNG a este proyecto

    • Avatar
      MALDO
      dic 4, 2018

      HOLA MIRA ME SALIO EL PROYECTO QUE AL PUBLICADO PERO ESTOY MODIFICANDO AUMENTANDO UN MOTOR MAS Y CUANDO COMPILO ME SALE ESTO PIN_MOTOR-3_E` WAS NOT DECLARED IN THIS SCOPE NO SE QUE ASER E REVISADO TODO NO SI ME PUEDES AYUDAR

    • Avatar
      roboticboy
      dic 20, 2018

      oye amigo la app es solo para google play o tambien se puede en app store?

      • Avatar
        Elva jinón
        ene 8, 2019

        no somos amigos

    • Avatar
      luis
      ene 21, 2019

      HOLA CARGO EL PROGRAMA EN ARDUINO CON EL CBALE CUANDO LO DESCONECTO Y PONGO LA BATERIA AL ARDUINO YA NO SE MUEVEN LAS LLANTAS DEL MOTOR

    • Avatar
      javier
      feb 8, 2019

      me sirvió de mucho tu explicación espero me puedas ayudar ya que deseo agregar 2 sensores seguidores de linea y 1 ultrasonico saludos y muchas gracias por aportar tus conocimientos se te agradece hermano.

    • Avatar
      LUIS FERNANDO
      feb 16, 2019

      Amigo, me apoyas por favor, con el codigo cualquier tecla funciona, por ejemplo 8 y10 se activan tanto ala izquierda como adelante, y la 9 y 11 al activar las otras dos, ya cargue varias veces el codigo

    • Avatar
      nicolas aparicio
      feb 18, 2019

      Hola amigo, muchas gracias por tu explicación, me salio todo muy bien, pero tengo una duda ¿Como puedo agregarle un ultrasónico para que al detectar un obstáculo se detenga?

    • Avatar
      mauricio
      mar 25, 2019

      Webos XD

      • Avatar
        TU MAMA
        mar 25, 2019

        PLAthanos xdxd :v

      • Avatar
        JONI NASCO
        mar 25, 2019

        ME PICA EL WEBO IZQ. ALGUIEN LO RASCA

    • Avatar
      Elver Galarga
      mar 25, 2019

      Komo mato a un negro con un arduyno?? XdXdXd

    • Avatar
      Meco Giatum Amá
      abr 8, 2019

      que pedo que hago aki iba a ber bideos de fri faier

    • Avatar
      Gilberto Simbron
      abr 14, 2019

      Disculpa amigo, pero al cargar el código me sale un error dónde dice que no fue declarado el ámbito, no sé si me puedas ayudar, copié el código tal y como es.

Leave a Reply

* Name:
* E-mail: (Not Published)
   Website: (Site url withhttp://)
* Comment: