Inicio » Aula » Tanque-DYOR teledirigido

Tanque-DYOR teledirigido

En esta entrada se va a documentar el diseño de un tanque basado teledirigido basado en los robots DYOR

Diseño

El aspecto del robot partió de la idea de construir un tanque, pero para no complicar demasiado el proyecto con orugas, se decidió montar las ruedas como un DYOR normal.

A la hora de diseñar el robot, pretendí que cupiese todo el material en la base y luego, mediante pestañas en la madera, poder colocar una carcasa que se podría poner y quitar para facilitar el acceso al hardware. La  torreta con el cañón, se tenía que montar con un servo, pero la base estaba muy lejos del techo, así que tuve que se tuvo que añadir una madera que atraviesa el tanque y se apoya en la carcasa para elevar el servo y que quedase a la altura del techo. Todo esto se ve en los planos y en el ensamblaje en SolidWorks.

Vista del interior de la carcasa
Vista completa en SolidWorks del diseño del tanque

Material

Todo el material utilizado finalmente ha sido:

  • Arduino UNO R3
  • Batería lipo 2s 7.4 V 550 mAh
  • Regulador BEC 5 V
  • Servo SG90 9g
  • 2 motores DC + 2 ruedas Smart Car
  • Rueda loca de 37 mm de diámetro
  • Driver DRV8833 (puente en H) para el control de velocidad los motores
  • Sensor sonar HC-SR04 y un soporte
  • 2 sensores de infrarrojos TCRT500
  • TZT-Mini puntero láser 650 nm
  • Buzzer activo
  • Módulo Bluetooth HC-05
  • Protoboard
  • 3 resistencias 8K8 (divisor de tensión 5 -> 3.3) y 1 resistencia 220R (buzzer)
  • Carcasa de madera cortada a láser y cilindro (para el cañón) impreso en 3D.

Planos

El diseño de la carcasa del robot tiene forma de base de pirámide con base rectangular, en el techo de esta carcasa hay un agujero por el que cabe la cabina con el cañón.

A continuación se muestran los planos de corte láser:

Planos para el corte láser

 

Implementación

Durante el proceso de montaje y programación fueron surgiendo problemas que a continuación se describen como fueron superados.

Hardware

La alimentación de la lipo (8.4 V nominal) se utiliza para el driver de los motores directamente. Además, el regulador BEC de 5 V proporciona una tensión estable a partir de la lipo para el servo, los sensores y el Arduino, todos funcionando a 5 V.

El driver de los motores se debía pinchar en una protoboard, por eso mismo se ha aprovechado para conectar la alimentación, un buzzer e implementar un divisor de tensión de 5 V a 3.3 V para el pin RX del módulo bluetooth.

El USB utiliza el puerto Serie para comunicarse con el Arduino, así que para actualizar el código debía desconectar el pin de TX en el módulo bluetooth cada vez, ya que por motivos de incompatibilidad entre las librerías SoftwareSerial.h y Servo.h, se conectó el propio bluetooth al mismo pin que utiliza el Arduino al cargar código.

Vista de las conexiones de la protoboard

La conexión de los pines fue generalmente por orden, menos algunas excepciones. Por ejemplo, como se ha comentado anteriormente, si no ponía en los pines RX y TX, el bluetooth no podía funcionar con SoftwareSerial porque el servo entonces funcionaba mal. Todos los pines del puerto digital tienen posibilidad de PWM en el Arduino UNO, así que para controlar los motores y el servo no había problema. El buzzer se conectó al pin 13 porque, al resetear el Arduino, se pone automáticamente el pin en nivel alto, perfecto para una señal acústica que indique cuándo se ha reiniciado la placa.

Y finalmente los pines analógicos A0 y A1 para la medida de luz de los sensores de infrarrojos.

Vista de las conexiones del Arduino

Programación

El código fue pensado para poder implementar los modos que hiciese falta y todos controlados por una aplicación por bluetooth, hay distintos archivos ‘.h’ con funciones básicas de cada modo y una función principal que ejecuta todo el rato el modo en cuestión. Además el código principal se trata de un switch que ejecuta el modo que toca según se controle con la aplicación.

A continuación se adjunta el código utilizado:

AppInventor

Para la aplicación se ha utilizado la herramienta de AppInventor y su programación con bloques que facilita mucho la tarea de comunicarse por bluetooth y la disposición de botones.

Como funcionalidades extra, se ha incluido un joystick que permite manejar el robot en modo manual, y un espacio donde se van imprimiendo los valores que envía el robot y la posibilidad de enviar mensajes, estos mensajes de por si no hacen nada a menos que se envíe alguno de los códigos programados. Por ejemplo, si se envía @231*, el robot empezará a disparar intermitentemente el láser, y con @230* apagará el láser, se pueden programar más códigos de la misma manera, pero hasta la fecha solo se han implementado estos.

 

Aplicación hecha con AppInventor

También se incluye el archivo ‘.aia’ con la aplicación utilizada.

Funcionamiento

Finalmente, de manera general, el tanque tiene tres modos de funcionamiento:

  • El modo manual, en el que se puede mover el cañón a una posición fija, utilizar el joystick para mover el robot y disparar con el láser, este modo no utiliza los sensores, por lo que no imprime nada por pantalla.
  • El modo sigue líneas, primero de todo lee el valor de los sensores infrarrojos y con esta lectura sigue una referencia de luz intermedia, que será una línea negra sobre un fondo blanco, este modo devuelve la luz medida por los sensores infrarrojos.
  • El modo evitar paredes, ejecuta una serie de instrucciones para evitar las paredes e imprime la distancia medida por el sonar.

Los botones de control quedan totalmente inútiles en los modos que no son el modo manual, además cada vez que se cambia de modo, se entra en una especie de pausa que imprime los valores de los sensores pero no ejecuta ninguna acción excepto el disparo, es el mismo estado en el que entra cuando se presiona el botón de stop. Para seguir con cualquiera de los modos mencionados valdría con presionar el botón de ejecutar.

A continuación se incluye un vídeo con el funcionamiento de los distintos modos.