Si aún no eres usuario, puedes crear una cuenta o entrar
Tutorial: Robot 4x4 con Arduino

Mucha gente me pregunta sobre cómo hacer un pequeño robot. La verdad es que es una pregunta un póco dificil de responder ya que hay muchas maneras de hacerlo y por supuesto muchos tipos de robots diferentes. En la gran mayoría de los casos, se suelen montar robots tipo coche con servomotores o motores de corriente contínua. Esto es lo que os voy a mostrar hoy, un robot con tracción a las cuatro ruedas con motores de corriente contínua. La idea aqui no es hacer un gran robot inteligente que sea capaz de traernos el desayuno a cama (aunque sería la leche!), sino la base para crear un pequeño robot con tracción a las cuatro ruedas basado en Arduino que os pueda servir de base para un robot más completo e inteligente, incluyendo distintos tipo de sensores como los de distancia, GPS o incluso telemetría.

Es un tutorial muy básico que todo el mundo puede realizar de forma sencilla y en muy poco tiempo. Luego de tener la base, podemos ir añadiendo más complejidad. Por supuesto no dudeis en dejar vuestro comentario, dudas y sugerencias!





Robot 4x4 con Arduino

Como he dicho antes, éste pequeño tutorial pretende ofrecer una base de locomoción para un robot, con su chasis, motores, driver de motores y placa Arduino. Digamos que es la parte fundamental para que un robot pueda desplazarse. Una vez que tenemos un sistema el cual somos capaces de controlar (adelante, atrás y giros), podremos ir incluyendo algunos sensores adicionales en función del tipo de robot que deseemos. En éste punto, ya depende en gran medida de la imaginación de cada uno, que puede ir desde un sencillo robot que circule con unos patrones predeterminados y fijos, hasta un completo robot capaz de esquivar obstáculos mediante sensores de distancia o incluso guiado por GPS.

Sin más preambulos, comenzamos!

Las partes fundamentales para un robot de éstas características son las siguientes:

  1. Chasis
  2. Sistema programable de control (Arduino)
  3. Controlador de motores
  4. Alimentación
  5. Conexiones
  6. Código fuente
  7. Video!

El chasis

Por supuesto, podemos realizar un chasis a medida ya sea de madera, PVC o otros materiales ligeros, pero necesitaremos más tiempo y planificación. Además, no siempre se sabe con exactitud qué componentes se van a utilizar con sus respectivas dimensiones y los posibles inconvenientes que van surgiendo. Luego si optamos por contruir el chasis desde cero, necesitaremos herramientas y útiles que muchas veces no tenemos a mano. En mi caso, he optado por utilizar un chasis ya hecho que además es compatible con la placa Arduino Duemilanove o la nueva Arduino UNO. Éste chasis es muy robusto y está fabricado en aluminio, incluye cuatro motores de corriente contínua de 6V con reductora incorporada, ruedas, tornillos, plataforma para añadir sensores, interruptor de alimentación, caja de pilas 5xAA y algunos cables. Con él tenemos la parte mecánica practicamente resuelta y nos podemos dedicar a la siguiente fase del proyecto.

Chasis robot 4x4 Arduino

Chasis robot 4x4 con motores

Sistema programable de control (Arduino)

Obviamente, necesitamos algo que nos permita programar a nuestro antojo el robot. Dado que el chasis ya dispone de agujeros para atornillar un Arduino USB, he utilizado dicho modelo. En mi caso es un Arduino Duemilanove, pero podeis utilizar igualmente un Arduino UNO o Arduino Pro 328 de Sparkfun, ya que las características son iguales y el código es completamente compatible.

Arduino UNO

Arduino UNO

Controlador de motores

Una placa Arduino no puede gestionar directamente motores de corriente contínua, dado que la máxima intensidad que es capaz de proporcionar en sus pines de salida es de unos escasos 20mA. Por lo tanto, necesitamos un controlador de motores que sea capaz de soportar la carga de los motores. Dicho controlador será gestionado a su vez por el Arduino. Debemos seleccionar siempre un controlador con potencia suficiente para los motores que vallamos a utilizar. Los cuatro motores incluidos con el chasis funcionan a 6 V y consumen unos 300 mA a plena carga. Dado que tenemos cuatro motores, obtenemos un consumo aproximado total de 4 x 300 = 1,2 Amperios aproximadamente.

Controlador de motores doble puente H - L298

Controlador de motores doble puente H - L298

Un buen candidato tanto por sus dimensiones como sus prestaciones, es el controlador en doble puente H basado en el conocido driver L298. Con sus dos salidas, tiene potencia suficiente (25W) para alimentar los cuatros motores. Un momento... cómo que dos salidas? pero si tenemos cuatro motores, entonces cómo hacemos?

Pues no pasa nada, ya que a pesar de que éste controlador tan sólo dispone de dos salidas, utilizaremos cada una de ellas para alimentar los motores en parejas. Agruparemos los motores de tal forma que los dos correspondientes a la parte izquierda del chasis serán cableados en pararelo y lo mismo para los dos motores correspondientes a la parte derecha del chasis. Con esto, podremos conectar los dos motores izquierdos a la salida A y los dos motores derechos a la salida B, tal y como se muestra en la imagen:

Debemos prestar atención a cómo cableamos los motores ya que como se puede ver, cada pareja está en sentido opuesto, por lo que debemos cruzar los cables para que giren en el mismo sentido cuando los alimentemos. Antes de continuar, es recomendable aplicar tensión una vez cableados para comprobar el sentido de giro.

Alimentación

La alimentación es bien sencilla ya que disponemos de un zócalo para 5 pilas de tipo AA que nos dan un total de 7,5 Voltios. Esto nos será suficiente para alimentar los motores y nuestra placa Arduino. La dejaremos atronillada a la base de chasis por la parte baja.

Mientras tanto, montamos el Arduino y el controlador de motores en su sitio. Utilizaremos unos soportes de metal con sus respectivos tornillos, ya que nos dará un montaje seguro y fiable.

Conexiones

A continuación, cableamos todo bien colocado con el largo de los cables justo para que no molesten. Fijaros que al cablear los motores en grupos de dos, sólo tendremos cuatro cables, que son los que irán al controlador.

No olvidemos de soldar los cables al interruptor de encendido. El chasis incluye uno de tres contactos, pero yo he preferido montar uno de seis.

Una vez conectados los motores al controlador, es el turno de conectarlo al Arduino. En la imagen de arriba no se muestra, pero no olvideis de contactar también los cables de alimentación que vienen del interruptor! Irán conectados a VMS y GND.

Las conexiones a la placa Arduino serán así:

  • Arduino PIN 8 -> I1
  • Arduino PIN 9 -> I2
  • Arduino PIN 11 -> EA
  • Arduino PIN 6 -> I3
  • Arduino PIN 7 -> I4
  • Arduino PIN 10 -> EB

Éstas son las señales de control ya que además estamos utilizando los pines PWM para luego poder variar la velocidad de los motores. También necesitareis conectar la salida del controlador marcada como +5V al pin de arduino señalado como VIN. Esto hace que el controlador de motores le proporcione corriente a la placa Arduino. No olvideis también de unir las masas con los pines GND.

He utilizado cables de prototipo Macho/Hembra para que sea más fácil:

Set de cables Premium para protoboard (100 Unid.)

Código fuente

No hay mucho que decir acerca del código fuente. He realizado un pequeño conjunto de funciones que permiten hacer avanzar o retroceder a la velocidad y el sentido que queramos. Al inicio del programa, en la función Setup() defino los pines como salidas y luego en el bucle principal, en la función Loop(), he puesto una secuencia de avance durante dos segundos, retroceso durante otros dos segundos, giro izquierda y giroderecha de dos segundos también. Luego el programa vuelve a comenzar. Es una buena forma de hacer las primeras pruebas y ver cómo se comporta el robot. Fijaros que para girar, se necesita hacer girar la parte izquierda al contrario de la parte derecha. Es el mismo sistema que los tanques. Con distintas velocidades podremos girar más o menos según sea necesario.

 

/*********************************************************************************************

  Tutorial: Robot 4x4 con Arduino
  Autor: Oscar Gonzalez - 16 Octubre 2010
  http://blog.bricogeek.com/noticias/tutoriales/tutorial-robot-4x4-con-arduino/

 ********************************************************************************************/
#define MOTOR1_CTL1  8  // I1
#define MOTOR1_CTL2  9  // I2
#define MOTOR1_PWM   11 // EA

#define MOTOR2_CTL1  6  // I3
#define MOTOR2_CTL2  7  // I4
#define MOTOR2_PWM   10 // EB

#define MOTOR_DIR_FORWARD  0
#define MOTOR_DIR_BACKWARD   1

void setup()
{
  // Setup pins for motor 1
   pinMode(MOTOR1_CTL1,OUTPUT);
   pinMode(MOTOR1_CTL2,OUTPUT);
   pinMode(MOTOR1_PWM,OUTPUT);
   
  // Setup pins for motor 2
   pinMode(MOTOR2_CTL1,OUTPUT);
   pinMode(MOTOR2_CTL2,OUTPUT);
   pinMode(MOTOR2_PWM,OUTPUT);   
}

void setSpeed(char motor_num, char motor_speed)
{
   if (motor_num == 1)
   {
      analogWrite(MOTOR1_PWM, motor_speed);
   }   
   else
   {
      analogWrite(MOTOR2_PWM, motor_speed);
   }
}

void motorStart(char motor_num, byte direction)
{
  
   char pin_ctl1;
   char pin_ctl2;
   
   if (motor_num == 1)
   {
      pin_ctl1 = MOTOR1_CTL1;
      pin_ctl2 = MOTOR1_CTL2;
   }   
   else
   {
      pin_ctl1 = MOTOR2_CTL1;
      pin_ctl2 = MOTOR2_CTL2;     
   }
  
   switch (direction)
   {
     case MOTOR_DIR_FORWARD:
     {
       digitalWrite(pin_ctl1,LOW);
       digitalWrite(pin_ctl2,HIGH);          
     }
     break; 
          
     case MOTOR_DIR_BACKWARD:
     {
        digitalWrite(pin_ctl1,HIGH);
        digitalWrite(pin_ctl2,LOW);          
     }
     break;         
   }
}

void motorStop(char motor_num)
{
   setSpeed(motor_num, 0);
   if (motor_num == 1)
   {
     digitalWrite(MOTOR1_CTL1,HIGH);
     digitalWrite(MOTOR1_CTL2,HIGH);     
   }
   else
   {
     digitalWrite(MOTOR2_CTL1,HIGH);
     digitalWrite(MOTOR2_CTL2,HIGH);     
   }
}

void loop()
{
  // Start motors!
  motorStart(1, MOTOR_DIR_FORWARD);  
  setSpeed(1, 200);
  motorStart(2, MOTOR_DIR_FORWARD);      
  setSpeed(2, 200);
  
  delay(2000);
  
  motorStart(1, MOTOR_DIR_BACKWARD);  
  setSpeed(1, 200);
  motorStart(2, MOTOR_DIR_BACKWARD);      
  setSpeed(2, 200);
  
  delay(2000);
  
  motorStart(1, MOTOR_DIR_FORWARD);  
  setSpeed(1, 140);
  motorStart(2, MOTOR_DIR_BACKWARD);      
  setSpeed(2, 140);  
  
  delay(2000);
  
  motorStart(1, MOTOR_DIR_BACKWARD);  
  setSpeed(1, 140);
  motorStart(2, MOTOR_DIR_FORWARD);      
  setSpeed(2, 140);  
  
  delay(2000);  
  
}

 

Más adelante, cuando incorporemos sensores, podremos utilizar las funciones motorStart(), motorStop() y setSpeed() según nos sea necesario en función de los datos leidos por los sensores y lo que queremos que haga el robot.

Video

Ha llegado el momento triunfal en el cual estamos listos para el primer arranque de nuestro robot casero! Sólo nos queda asegurarse de tener las pilas puestas (y cargadas ya que las mias estaban en las últimas...) y conectar la alimentación mediante el interruptor trasero. Aqui os dejo un video del resultado final, aunque durante la gravación del video las pilas estaban más muertas que vivas y apenas tenía fuerza. Pero os puedo asegurar que con pilas nuevas o unas baterías bien cargadas, los motores ofrecen una fuerza no despreciable!

Bueno, pues espero que os halla gustado éste pequeño tutorial y por supuesto, si haceis vuestro própio robot o evolucionais éste, queremos verlo! asi que no dudeis en enviar vuestras fotos y dejar vuestro comentario!

En la tienda

Chasis robot 4x4 con motores Controlador de motores doble puente H - L298 Arduino UNO Batería LiPo 1800mAh / 11.1V 25C


Comparte esto con tus amigos!

Comentarios:


Adrian Martinez
Enviado el 16/10/2010 (20:40)
Excelente tutorial, ahora solo le falta el radiocontrol :)

Sergio Maeso
Enviado el 16/10/2010 (21:16)
Excelente tutorial! Esta fantásticamente explicado...pero leyéndolo me ha entrado una duda... en el tutorial dices que el pin 5v del L298 da energía al arduino... yo tengo el L239 y siempre pensé (estúpido) que el pin era de entrada pero no de salida...se supone entonces que podemos alimentar al arduino con el L298 o en mi caso el L239? Y las masa del arduino y el controlador irían unidas a las de los motores y al polo negativo de la batería de 7,5v?


Oscar Gonzalez Oscar Gonzalez es un colaborador!
Enviado el 16/10/2010 (21:22)
Correcto, puedes conectar hasta un máximo de 9 Voltios en la entrada VIN de Arduino, ya que ese pin pasa por el regulador de tensión interno. La salida 5V del L298 o L239 proporciona suficiente corriente para alimentarlo y de hecho está pensado para eso :)

Saludos!

Miguel ngel de Frutos Carro
Enviado el 18/10/2010 (00:50)
Hola! Me ha gustado tanto el tutorial y ya que tenía los materiales a mano y una tarde larga de domingo me he montado mi propio Rover-4x4.
He utilizado un Arduino UNO, y como driver de motor el SERIAL QIK 2S9V1...
La única novedad es que he añadido un NUNCHUCK de la wii para controlar el robot (de momento solo con el joystick). Creo que es un paso bastante facilito pero que puede dar mucho juego a otros novatos que quieran seguir "trasteando" con su Rover 4X4.
El nunchuck es muy fácil de conectar vía I2C y hay multitud de esquemas y buenas bibliotecas en la red. De todos modos, estoy a vuestra disposición.
Video de Youtube: http://www.youtube.com/watch?v=q3HBQDNPYCE
Zip
Fotos + Código:: http://dl.dropbox.com/u/7085078/Rover%204x4.zip

Miguel Angel Roman Forcada
Enviado el 18/10/2010 (17:21)
Esto es 1 WOW MY GOOD!!
aun no me lo leido detalladamente, PERO IMPRESIONANTE y perfecto para mi proyecto, jeje
Os dejo 1 link de mi blog para que veais, no vereis demasiado ya que aun esta todo muy misterioso jeje ytal. pero jeje.
y como dice Adrian Martinez, solo falta el RadioControl xP
pero Oscar enserio, IMPRESIONANTE, y creo que hablo en nombre de todos, por darte las gracias por todo lo que haceis y aguantarnos a tanto como ami como a muchos de los que te mandamos emails de dudas de materiales de los que dispones etc.

Eres 1 Crack.



Miguel Angel Roman Forcada
Enviado el 18/10/2010 (17:37)
PD: se me olvido el link de mi blog.
http://roma0712.blogspot.com/

Saludos

Oscar Gonzalez Oscar Gonzalez es un colaborador!
Enviado el 18/10/2010 (17:51)
Gracias Miguel, pero no olvides mostrarnos tu proyecto secreto, tiene muy buena pinta y queremos verlo! :)

Saludos

Miguel Angel Roman Forcada
Enviado el 20/10/2010 (09:49)
Oscar una de mis preguntas clave es la siguiente, si lo que tenemos son 2 controladores y 4 motores.
que seria mejor conectar los de alante a 1 controlador o los de 1 lateral.
o indiferente.
y a la hora hacer conexiones en un Mega?

PD: Haber cuando nos haces 1 manual de xbee Radiocontrol ejejej

SAaludos

Oscar Gonzalez Oscar Gonzalez es un colaborador!
Enviado el 20/10/2010 (11:09)
Hola Miguel,
Necesitas conectar siempre dos motores en cada lateral, ya que así podrás girar el chasis invirtiendo los sentidos de giro de ambos. Si conectas las parejas adelante y atras, no podrás girar :)

Y el tutorial sobre XBee está de camino... ;)

Saludos!

kevin lachos
Enviado el 26/12/2010 (20:45)
He Osquitar porfisss haber cuando haces el siguiente tutorial de los sensores ... para la continuacion de este robot e ir ampliando de esa manera sus virtudes

saludos gracias

Juan Dermeyer Martinez Estrada
Enviado el 12/03/2011 (05:03)
grasis


Juan Dermeyer Martinez Estrada
Enviado el 12/03/2011 (05:09)
perdon gracias

José de Jesús Zermeño Escalan
Enviado el 25/05/2011 (22:35)
Hola Oscar , el tutorial me parece muy interesante , de antemano te agradezco por tu granito de arena en este fantastico mundo de la robotica.Espero con ansia el tutorial
sobre xBee,saludos!

Germán Iglesias
Enviado el 10/07/2011 (22:14)
Muy bueno el tutorial, si alguien tiene un Netduino y necesita ayuda yo he pasado el codigo a c# para el Netduino utilizando los mismos materiales que pone el tutorial.

Antonio Ortas
Enviado el 15/09/2011 (13:24)
Yo estoy bastante interesado en el codigo C# para Netduino.

Daniel Pino
Enviado el 09/10/2011 (12:36)
Hola !!
Muy agradecido de la guía y sobre todo de la simplicidad.
Tengo harto conocimiento en programación pero casi nulo en electrónica. Justamente buscaba en Internet alguna guía para armar un robot de carrera usando Arduino y me encanto este blog. Mi pregunta es la siguiente:
Quiero comprar esta placa

http://www.olimex.cl/product_info.php?cPath=76_78_163&products_id=757&product__name=Arduino_Mega_2560

pero me gustaría saber si será compatible con la arduino wifi shield? ya que pretendo controlar el robot utilizando un wii mote mediante comandos desde una Notebook.

Este es el enlace
http://www.olimex.cl/product_info.php?cPath=76_78_155_157&products_id=768&product__name=Arduino_WiFi_Shield_(WIZ610)

y otra consulta, que necesitaría para poder añadir una camara web al robot y así poder ver vía el robot desde el notebook?

De ante mano Muchísimas Gracias !


Oscar Gonzalez Oscar Gonzalez es un colaborador!
Enviado el 11/10/2011 (11:51)
Hola Daniel,
El MEGA 2560 lo tienes aquí:

http://www.bricogeek.com/shop/arduino/306-arduino-mega-2560.html

La Wifly Shield aquí:
http://www.bricogeek.com/shop/arduino/238-arduino-wifly-shield.html

La Wifly Shield es compatible con el mega ya que se comunica por el UART y además, como el Arduino MEGA 2560 tiene 4 puertos, te quedarán aún 3 disponibles para otras cosas. Para la cámara web, mucha gente monta una cámara IP y un pequeño punto de acceso Wifi para emitir su señal.

Saludos!

candid fernandez anello
Enviado el 02/11/2011 (01:59)
Hola Oscar!!
genial tu tutorial..
soy nuevo, muy nuevo en esto y estoy pensando en hacer tu 4x4..
Quiero hacer una Dolly motorizada para time lapse, y me pregunto si el 4x4 podria con una camara de fotos de unos 2 kilos?? y si esos motores me servirian para que se moviera paso a paso de manera muy lenta, mas o menos 1 metro a la hora?
Gracias!!

Oscar Gonzalez Oscar Gonzalez es un colaborador!
Enviado el 02/11/2011 (10:53)
Hola Candid, Es posible que valga pero date cuenta que deberás tener una superficie muy plana y regular para desplazar el robot sino, se te moverá la imagen. Lo suyo es hacerlo sobre un rail pero la idea de utilizar un robot como este no está mal.

Saludos!

Jorge Antonio
Enviado el 03/11/2011 (00:53)
Disculpa, como puedo pedir los motores en alguna tienda de electronica para que me funcionen para este proyecto?

Pablo Novo
Enviado el 05/11/2011 (13:48)
Hola soy un niño de 12 años que estoy haciendo un robot y me gustaría saber como conectar un sensor sharp a una placa arduino y hacer que funcione y el código para utilizar motores con el nunchuck ( tengo el adaptador, y un controlador de motores de doble puente) gracias.

José Miguel Lineros De Haro
Enviado el 08/11/2011 (16:40)
Hola Jorge Antonio, puedes encontrar los motores y el chasis en la tienda;

http://www.bricogeek.com/shop/robotica/283-chasis-robot-4x4-con-motores.html

Un saludo y suerte

Marcelo Rodriguez
Enviado el 02/01/2012 (02:15)
Hola, exelente tuto pero me quedo una duda, si nosotros hacemos el chasis, sirve cualquier placa?. Sirve alguno de estos: Arduino 4 Relay Board - 24v Avr, Pic, Dsp,8051
Arduino ,controlador Dos Motor 2a High Power H-bridge L298n
Arduino Sensor Shield V4 Digital Analog Module & Servos
Arduino Microcontroler Dc 5v Stepper Motor Pic Mcu Diy
Arduino Multi Rotary Sensor Proyectos De Robotica
Arduino Potentiometer Module For Sensor Shied Rotation

Juan Pedro Gallardo Duperier
Enviado el 10/02/2012 (22:40)
Hola:
Estupendo tutorial. Solo tengo un problema. Mis conocimientos de electronica se limitan a que cuando aprieto el interruptor se enciende la luz. Del tutorial lo único que no tengo claro son las conexiones. Me he quedado en que de la alimentación salen dos cables y que una vez cabreados los motores tengo dos pares de cables que son los que van al controlador de motores. Entonces ¿Qué cables se conectan al interruptor de encendido? Dos supongo que salen de la alimentación. Y los otros?. Y cuales son los que van al arduino?

Disculpa mi torpeza, pero es que quiero entender todo el proceso antes de comprar el Rover e intentar copiar el proyecto.
Cuando vas a explicar como poner sensores para que esquive objetos?

Muchas gracias


Sebastián Beceiro
Enviado el 17/02/2012 (13:46)
Hola Gente, les escribo desde Paysandú - Uruguay, mi consulta es la siguiente, quisiera saber si con la Controlador de motores doble puente H - L298n también puedo hacer este proyecto, y cual es la diferencia con la Controlador de motores doble puente H - L298.

Desde ya muchas gracias

Oscar Gonzalez Oscar Gonzalez es un colaborador!
Enviado el 20/02/2012 (09:43)
Hol aSebastián,
Esa controladora es la que se utiliza en éste tutorial y sirve para controlar los motores.

Saludos!

Juan Pedro Gallardo Duperier
Enviado el 06/03/2012 (18:20)
Hola de nuevo.
He vuelto a repasar mi pregunta, y me avergüenzo de mi ignorancia. ya casi comprendo el cableado. Solo me quedan dos dudas.
- veo que al gnd de la placa del motor va un cable negro desde el interruptor de encendido y un cable negro desde el gnd del arduino. ¿como se meten los dos cables en el gnd de, shield de motores?
- si quisiera conectar un par de sensores de posicion necesitaría meter en el pi. de 5v y en el pin libre de gnd del arduino dos cables (uno desde cada sensor). esos empalmes como podría hacerlos?
muchas gracias


Enviar comentario

Debes disponer de una cuenta de usuario para publicar un comentario.

Si aún no dispones de una cuenta, únete a la comunidad de BricoGeek.com y registrate ahora, te llevará tan solo un minuto y es gratis. También puedes identificate si ya dispones de una cuenta de usuario.
rss

Conecta con BricoGeek.com

Canales sociales

Nos gusta mucho estar en contacto con nuestros lectores y saber más acerca de sus proyecto e inventos.


También puedes sugerir una noticia en el blog
Tienda de Electrónica DIY y Arduino

Lo que se cuece...

Comentarios recientes Más comentado Top noticias
Feed de novedades

Tienda BricoGeek.com

Electrónica para tus proyectos!

Estás preparando un proyecto o quieres iniciarte en la electrónica? Encuentra todo lo que necesitas en la tienda.

Visita la tienda BricoGeek!

La familia de BricoGeek.com

Conoce toda la gente que hace que BricoGeek.com sea posible cada día:

Alejandro Mallo
Colaborador
Manuel Jiménez
Colaborador
Pablo Toimil
Colaborador
Puedes hacer click sobre un autor para ver todas sus noticias


Etiquetas más populares:

Descubre todo el contenido de bricogeek.com con las etiquetas más populares:

Páginas amigas:

Aqui tienes una selección de las páginas que más nos gusta visitar


© BricoGeek.com 2005-2012

Demuestra lo que sabes hacer!