Robot con Arduino aprende a construir y controlar un tanque robot

Construye y controla un tanque robot con Arduino

Continuamos en este tutorial con uno de los proyectos del artículo 10 proyectos sencillos de Arduino y que puedes encontrar en el libro Arduino Workshop. Esta vez vamos a aprender a construir y controlar un tanque robot, vamos allá.

Aunque el control de la velocidad de un motor puede ser útil, vamos a adentrarnos en un territorio aún más interesante. Vamos a controlar dos motores a la vez para controlar al robot en su velocidad y dirección. En este tutorial vamos a describir la construcción y el control básico de nuestro tanque.

Nuestro tanque va a tener dos motores, cada uno de ellos va a controlar una banda de rodadura, lo que permitirá al tanque subir y salvar pequeños obstáculos, girar en una posición, y no chocar contra obstáculos que se vaya encontrando a medida que se mueve. Gracias a este tutorial seremos capaces de controlar la velocidad y dirección de su movimiento, y también aprenderás cómo agregar partes para evitar la colisión y controlarlo remotamente.

Lista de componentes

  • Un módulo de chasis de tanque Pololu RP5 módulo de chasis de tanque Pololu RP5

El chasis

La base de cualquier robot es un sólido chasis en el que estarán colocados los motores, los controladores de dirección y la fuente de alimentación. Un robot Arduino también necesita tener espacio para colocar la placa Arduino y varias partes externas. Se puede elegir entre muchos modelos de chasis disponibles en el mercado, pero para este proyecto utilizaremos un chasis de tanque de la serie Pololu RP5 que contiene dos motores.

Dos fuentes de alimentación

El chasis Pololu incluye un soporte para seis pilas AA, que utilizaremos para los motores. El soporte de la batería se asienta en la base del chasis entre los motores y da al robot un bajo centro de gravedad.

Aunque la fuente de alimentación es grande, necesitamos usar una fuente de alimentación suplementaria para nuestra placa Arduino, ya que necesitará seguir operando incluso si fallan los motores. La energía para el Arduino en este proyecto viene de una batería de 9 V, que se puede conectar al Arduino usando el siguiente cable.

La placa de montaje

La última parte de nuestro chasis es la placa de montaje, la placa de montaje cubre la parte superior del chasis y permite colocar pernos en la parte superior utilizando espaciadores y tornillos M3 coincidentes. Estos componentes nos va a permitir tener montado sin que se mueva nuestro microcontrolador Arduino.

El Esquema

El objetivo final es crear los circuitos para controlar los dos motores colocados en el chasis. Para ello utilizamos un motor shield. Un motor shield contiene los circuitos que necesitamos para manejar la corriente sacada para los motores y también acepta comandos para el Arduino para controlar la velocidad y la dirección de ambos motores. Para nuestro tanque, usaremos un motor shield 2A para Arduino de DFRobot.

Conexión del Motor Shield

Hacer las conexiones necesarias para el Motor Shield es simple: hay que conectar los cables de la batería al bloque de terminales en la parte inferior izquierda del escudo. El cable negro (negativo) debe estar en el lado derecho y el cable rojo a la izquierda.
A continuación, conecte los dos pares de cables de los motores. En la siguiente imagen se ven las distintas conexiones del motor shield.
Conexión del Motor Shield

Conexión de los jumpers

La tarea final para configurar el shield es conectar los puentes o jumpers apropiados. Hay que mirar entre la conexión de alimentación de CC y la fila inferior de tomas en el shield, entonces debes ver seis pernos con dos puentes negros. Conectar horizontalmente para que cubran los cuatro pines de la izquierda, como se muestra aquí

Conexión de los jumpers

Por último, asegúrate de que los cuatro puentes estén conectados verticalmente a través de los jumpers PWM, como se muestra en la siguiente imagen.

jumpers PWM

Si los cables de su motor no están codificados por colores, es posible que tenga que intercambiarlos después del primer intento para determinar cuál es el correcto para moverlo hacia delante o hacia atrás. Después de conectar el cableado y los jumpers, hay que colocar la batería, montar el Arduino y el shield a la placa de montaje y en el chasis quedando tal que en la siguiente imagen.
robot tanque con Arduino

Tienes más información del funcionamiento de este motor shield en su página de DFrobot siguiendo este enlace.

El código

Ahora vamos a conseguir que se mueva nuestro tanque. Para empezar, vamos a crear algunas funciones para simplificar los movimientos. Debido a que dos motores están involucrados, necesitaremos cuatro movimientos

  • Movimiento hacia adelante
  • Movimiento inverso
  • Rotar en sentido a las agujas del reloj
  • Girar en sentido contrario a las agujas del reloj

Nuestro motor shield controla cada motor con dos pernos digitales: Un perno es para el control de velocidad usando PWM , y el
otro determina la dirección en que el motor girará.

Cuatro funciones en nuestro código coinciden con estos cuatro movimientos: goForward (),
GoBackward (), rotateLeft () y rotateRight (). Cada uno acepta un valor en milisegundos, que es el tiempo requerido para realizar el movimiento. Y un valor de velocidad PWM entre 0 y 255. Por ejemplo, para avanzar durante 2 segundos a toda velocidad, usaríamos goForward (2000,255).
Copia y guarda el siguiente código pero no lo cargues aún:

// Construir un tanque robot
int m1speed=6; // digital pins for speed control
int m2speed=5;
int m1direction=7; // digital pins for direction control
int m2direction=4;
void setup()
{
 pinMode(m1direction, OUTPUT);
 pinMode(m2direction, OUTPUT);
 delay(5000);
}
void goForward(int duration, int pwm)
{
 digitalWrite(m1direction,HIGH); // forward
 digitalWrite(m2direction,HIGH); // forward
 analogWrite(m1speed, pwm); // speed
 analogWrite(m2speed, pwm);
 delay(duration);
 analogWrite(m1speed, 0); // speed
 analogWrite(m2speed, 0);
}
void goBackward(int duration, int pwm)
{
 digitalWrite(m1direction,LOW); // backward
 digitalWrite(m2direction,LOW); // backward
 analogWrite(m1speed, pwm); // speed
 analogWrite(m2speed, pwm);

delay(duration);
 analogWrite(m1speed, 0); // speed
 analogWrite(m2speed, 0);
}
void rotateRight(int duration, int pwm)
{
 digitalWrite(m1direction,HIGH); // forward
 digitalWrite(m2direction,LOW); // backward
 analogWrite(m1speed, pwm); // speed
 analogWrite(m2speed, pwm);
 delay(duration);
 analogWrite(m1speed, 0); // speed
 analogWrite(m2speed, 0);
}
void rotateLeft(int duration, int pwm)
{
 digitalWrite(m1direction,LOW); // backward
 digitalWrite(m2direction,HIGH); // forward
 analogWrite(m1speed, pwm); // speed
 analogWrite(m2speed, pwm);
 delay(duration);
 analogWrite(m1speed, 0); // speed
 analogWrite(m2speed, 0);
}
void loop()
{
 goForward(1000, 255);
 rotateLeft(1000, 255);
 goForward(1000, 255);
 rotateRight(1000, 255);
 goForward(1000, 255);
 goBackward(2000, 255);
 delay(2000);
}

En el código, determinamos la dirección de desplazamiento de cada motor utilizando
digitalWrite(m1direction,direction);
El valor para la dirección es ALTO para avanzar o BAJO para retroceder. Por lo tanto, para hacer avanzar el tanque, ponemos ambos motores de la misma manera, en concreto en digitalWrite(m1direction,HIGH); // forward y digitalWrite(m2direction,LOW); // backward .
A continuación se establece la velocidad del motor utilizando lo siguiente:
AnalogWrite (m1speed, pwm);
El valor de pwm es la velocidad, entre 0 y 255. Para hacer que el tanque gire hacia la izquierda o hacia la derecha, los motores deben estar en direcciones opuestas, como se muestra en digitalWrite(m1direction,HIGH); // forward y en digitalWrite(m1direction,LOW); // backward .

Cuando estés listo para cargar el código, coloca el tanque manteniéndolo sobre la superficie de trabajo o apoyándola de modo que sus bandas de rodadura no estén en contacto con una superficie; Si no haces esto, entonces cuando termine la carga del código, el tanque se moverá y puede caer si no está agarrado.

Bien, hay que cargar el código, quitar el cable USB y conectar la batería y el cable a la toma de corriente Arduino. Luego coloca el tanque sobre una alfombra o una superficie lisa y limpia, y deja que se mueva libremente alrededor. Ya solo queda experimentar con las funciones de movimiento.

Recordar que tanto este tutorial como el resto del artículo 10 proyectos sencillos son un extracto del libro Arduino Workshop que su autor ha puesto en descarga gratuita, podéis conseguir el libro completo en Amazon. Este proyecto en concreto lo podéis ver aquí.

ELEGOO Kit de Coche Robótico Educativo y Stem de Juguete para...
  • Coche robot inteligente ELEGOO: un kit educativo para que los principiantes adquieran experiencia...
  • Más de 10 mejoras: como sensor IR integrado en la placa, 3 módulos de seguimiento de líneas en...
  • Fácil de montar: toda la interfaz del módulo tiene puertos Xh2.54, lo que hace mucho más fácil y...

Última actualización el 2023-05-17 / Enlaces de afiliados / Imágenes de la API para Afiliados

Pin It on Pinterest

Shares