miércoles, 27 de febrero de 2013

Tanque controlado por Arduino


Si estáis leyendo ésto, seguramente sepais que es Arduino, si no, os remito a la página del proyecto y a su entrada en wikipedia, creo que con eso nos podemos hacer una buena idea de en que consiste ésta plataforma de desarrollo perfecta para prototipos.

Yo compré uno por primera vez hace un año y medio mas o menos y he hecho muchas tonterías con él. Si os gusta la electrónica es un trasto muy divertido para jugar. Éste verano empecé un nuevo proyecto con él. Comprarme un tanque teledirigido, quitarle toda la electrónica salvo los motores y reemplazarla por un Arduino y otros componentes montados por mi, añadiendo nuevas funciones al tanque y nuevas formas de control; actualmente se puede dirigir con un mando de PS2 inalámbrico, por un móvil Android por Bluetooth, tengo en desarrollo una tercera por internet con una cámara acoplada al tanque y puede que en un futuro un sistema autónomo con sensores de proximidad. No pretendo hacer una guía paso a paso para hacer algo igual, pero si poder servir de inspiración a alguien a quién le surjan problemas parecidos a los míos en algún momento y por supuesto, dejarlo por escrito, para recordarlo yo en un futuro :-)

En éste artículo voy a hablar del tanque en si y del hardware y en el próximo de toda la parte de programación y software.

El tanque es un M41A3 Walker Bulldog a escala a 1:16. A una escala más pequeña sería muy complicado meterle dentro toda la electrónica.

En mi caso hable con un vendedor a ver si tenían algún tanque a esa escala con la electrónica averiada pero con los motores funcionando y tuve la suerte de que si. Me costó 40€ cuando su precio original era de 100€. Eso si, sin batería y sin mando. En cualquier caso la batería de serie era muy flojilla y el mando no pensaba utilizarlo.

Desgraciadamente, no hice fotos durante el proceso de montaje del interior, así que sólo podéis ver el resultado final. Todos los cables y componentes están muy desordenados, para mi próximo proyecto tendré que mejorar ese aspecto. Aquí os dejo un diagrama muy simple de todos los componentes que he metido en el tanque.

Tenemos una batería a 7.4V de LiPo y un regulador de voltaje que consigue sacar 5V estables, independientemente de la carga de la batería. A partir de éste regulador de voltaje se alimentan los circuitos lógicos del Arduino, de los dobles puentes en H, del transistor y del receptor para el mando de la PS2 y del receptor Bluetooth. Los motores van directamente a 7.4V. Paso a explicar brevemente que hace y como funciona cada componente. La mayoría se pueden comprar en cualquier tienda de electrónica o por Ebay.


 




Arduino


Arduino Mega

El Arduino en si. Existen varios tipos, pero yo en éste caso he usado un Arduino MEGA, ya que tiene 3 entradas y 3 salidas serie (TX y RX) y aunque ahora mismo sólo utilizo una, creo que en un fururo necesitaré otra. El típico para iniciarse es el Arduino UNO, que es igual pero con menos conexiones. Se puede comprar en muchos sitios, pero como de costumbre, lo más barato es Ebay.


Arduino UNO




Batería
Baterías Chinas baratas.
Aunque no lo parezca, detrás de la sinta aislante,
los cables están correctamente soldados
En éste caso la batería original del tanque funcionaba a 7.4V, así que decidí utilizar una de éste mismo voltaje ya que supuestamente es el adecuado para los motores. También lo he probado con 9.6V y 12V y funciona bien, pero no es lo más adecuado para alargar la vida de los motores.

Batería de calidad
Primero pedí dos muy baratas (4€ cada una) de NiMH por Ebay. Cada una daba en teoría 1400 mA, así que junté las dos en paralelo para crear una de 7.4V y 2800 mA. El problema es que estas especificaciones estaban muy infladas y el tanque duraba en marcha unos 10 minutos. Como lo barato sale caro, me lanzé a por una de calidad; de LiPo de 7.4V, 4000mA y de una marca conocida. Me costó con el cargador balanceador de carga 40€, pero no tiene nada que ver con las otras. Además el cargador es una gozada, carga todo tipo de baterías de forma precisa, no como esos transformadores con un led que llevan las de NiMH. Con ésta batería puedo tener el tanque en marcha una hora sin problemas. El único problema es que llevaba como conectores bananas, y yo necesitaba Tamiyas, así que tuve que cambiárselos.


Regulador de voltaje


Regulador de voltaje basado en
un LM2596S
Los motores funcionan directamente con el voltaje suministrado por las baterías, pero el Arduino y el resto de componentes electrónicos montados necesitan 5V suministrados de forma estable (que no varien en función de la carga de la batería).

Primero pensé en bajar el voltaje con diodos o resistencias, pero de ese modo el voltaje de salida dependería del de entrada, y la conversión sería poco eficiente. Entonces descubrí éstos reguladores de voltaje ya montados, basados en integrado LM2596S. Simplemente lo conectas a tu fuente de alimentación y con el potenciómetro azul que se ve en la foto ajustas el voltaje de salida. Da el mismo independientemente del de entrada y su eficiencia es del 92%.


Doble Puente en H

L298N montado en el tanque
L298N suelto
Sirven para controlar con una señal PWM y dos señales lógicas (alto o bajo) la velocidad y sentido de giro de un motor. Yo he utilizado basados en un integrado L298N, ya que es capaz de manejar hasta 2A. Para montajes menos potentes podríamos utilizar un L293D que puede manejar hasta 600mA. He utilizado uno montado en una placa, así me ahorro soldaduras y además lleva ya incorporados diodos para evitar retorno de corriente y condensadores para que ésta sea estable. Tiene también un regulador de voltaje incorporado, pero mejor no utilizarlo, es bastante peor que el otro.









Los míos ya estaban montados en el tanque, así que no he podido hacerles fotos, pero aquí dejo uno muy similar con la explicación de para que sirve cada conexión















Transistor


Transistor darlingtop TIP120
Realmente podría haber utilizado otro puente en H, pero sólo tenía dos y el disparo del cañón no necesita ir hacia atrás, así que usé un simple transistor. Cuando le llega corriente lógica del arduino, deja pasar corriente a través de él. Aquí tenéis el artículo en el que me inspiré. Si la señal lógica que le llega fuera PWM, podríamos controlar el voltaje (la velocidad del motor).
Valdría cualquier NPN capaz de manejar cargas elevadas, yo he utilizado los mismos que en la página que enlazo, TIP120. Es un darlington (dos transistores en cascada) y para éste menester resulta ideal. Además tenía unos cuantos por casa.


Receptor bluetooth


He utilizado un receptor bluetooth alimentado a 5V y con interfaz de puerto serie. Se conecta directamente a los puertos RX y TX del Arduino.










Indicador de voltaje bajo.

Si las baterías LiPo se descargan por debajo de cierto voltaje se estropean. Para evitar que ésto pase lo mejor es utilizar un indicador de voltaje bajo. Éstos aparatos monitorizan continuamente la tensión, y cuando llega a niveles peligrosos pitan, avisándonos de que hay que cargarla




Indicador conectado a la batería. Se encienden dos
leds verdes porque la batería es de dos celdas que
están suficientemente cargadas


Mando inalámbrico PS2

Adaptador para mando inalámbrico conectado
Para el sistema de control primero pensé en una mando de wii, pero tiene pocos botones y manejar el tanque con los acelerómetros se me hacía complicado. Entonces pensé en un mando de PS2, por poco dinero tienes un montón de botones con dos joysticks analógicos. De por si no son inalámbricos, pero los venden con un receptor a parte, así que éste es el sistema que decidí utilizar. Para conectarlo correctamente al Arduino me compré un alargador para mando de PS2 y corté el cable, así tengo dentro el conector y puedo enchufarle otro mando en un momento dado.



Y hasta aquí la parte de hardware. Ahora queda mucho cableado y por supuesto programar el Arduino para que todos los componentes funcionen juntos como un reloj. Iba a subir un vídeo del tanque en marcha, pero mi perro no deja de ladrarle... Así que lo subiré en la próxima parte.


Actualización: Ya está la 2ª parte. ¡Con vídeo y todo!

28 comentarios:

  1. Hola Jorge,
    Soy Sergio Crespo y tengo en mente un proyecto como el tuyo me gustaria saber como sigue.
    Gracias.

    ResponderEliminar
    Respuestas
    1. Hola,
      Quería haberlo escrito ya, pero al final nunca me pongo, además como no había tenido ningún comentario que me animara...

      Voy a intentar escribir la 2ª parte hoy o mañana, espero que te guste.

      Y coméntanos algo sobre tu proyecto!

      Eliminar
    2. Hola,
      Si por favor que me estoy volviendo loco y de todos las posibilidades y páginas que hasta ahora he encontrado la tuya es la mas completa y mejor explicada.
      Gracias.
      Mi correo personal es serevalex@hotmail.com por si quiero comentarte algo mas sobre el proyecto.

      Eliminar
  2. Hola,
    Jorge no consigo que los motores me inviertan el sentido de giro, haber si pudieras poner algún esquema de la conexión de cables y de los pins exactos ya que según la librería las conexiones de velcidad són el 6 y el 5 uno para cada motor y los pines de dirección son los 3,4,7 y 8 que estos deberian ir conectados a las entradas DIR 1 y Dir 2 de la placa controladora de motores. Pues ami no me invierte el sentido de giro.
    Gracias de antemano.

    ResponderEliminar
    Respuestas
    1. Funciona tal cual dices, te lo explico para el motor 1: El pin 6 controla la velocidad del motor, se le manda una señal PWM con la función "analogWrite". Los pines 7 y 8 son para la dirección, se les manda una señal alta o baja con la función "digitalWrite", el comportamiento es el siguiente:

      7 y 8 LOW - El motor no se mueve
      7 y 8 HIGH - El motor no se mueve
      7 HIGH y 8 LOW - Hacia alante
      7 LOW y 8 HIGH - Hacia atrás

      El pin 6 debe ir a donde pone algo tipo "Enable" y los pines 7 y 8 a las entrada en las que pone algo tipo: "imput 1 y 2" (Supongo que a donde tu dices dir 1 y dir 2).

      Ya me cuentas si te he resuelto la duda!

      Eliminar
    2. Por cierto, y aprovechando que llevas unos días entrando al blog :D

      No se si te has fijado en que he estado toqueteando un poco los anuncios, cambiando el tipo, la cantidad y moviéndolos de sitio. ¿Que te parece como están? ¿Te parece que resultan molestos o que queda el blog sobrecargado?

      Muchas gracias.

      Eliminar
    3. Para nada me resultan molestos, y tampoco queda sobrecargado. El blog esta muy bien.

      Eliminar
  3. Hola Jorge,
    Una (o otra!) de los cables del receptor del mando veo que solo conectamos el clock(pin13), el command(pin11)y attention(pin 10), data(pin12), porque veo que pones true(pressures?)y true(rumble?)eso no lo entiendo.
    Según he visto los cables que no se conectan son el de color blanco y el de voltaje de los motores de vibración. Pero el verde(acknoledge)?

    ResponderEliminar
  4. Sobre el problema del puente en H que tenia deduzco que es que yo tengo otro diferente, y solo dispone de un pin de dirección. Ya he comprado otro basado en el L298N. El que yo tengo es este: http://www.ebay.es/itm/171012036277?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1497.l2649#ht_2010wt_1037

    ResponderEliminar
    Respuestas
    1. Si, ese es el problema.

      El circuito que me enseñas es es un doble medio puende en H, que tiene el inconveniente de que no permite invertir el sentido de giro de los motores. El que yo uso es un doble puente en H completo.

      Eliminar
    2. ¡Además el que me has puesto maneja hasta 15A por canal nada menos! Pedazo de motores le puedes meter a ese...

      Eliminar
  5. Si no recuerdo mal, Pressures es para que el mando detecte la presión con la que pulsas los botones y rumble para que se pueda activar la vibración. Ahora mismo no se usa ninguna de las dos funciones, pero ahí están.

    El acknoledge no tengo ni idea de para que es, pero estoy mirando el tanque y tampoco lo tengo conectado.

    ResponderEliminar
    Respuestas
    1. Muchas gracias y disculpa la pesadez.

      Eliminar
    2. De nada hombre, me haces una donación con el nuevo botón que he puesto arriba y asunto arreglado :D

      Ahora en serio (aunque lo otro también iba en serio) me gusta contestar a los comentarios.

      Y por cierto, para cuando acabes el proyecto me encantaría verlo.

      Eliminar
  6. Who have code PS2 with arduino?
    If you have.Can you give me.

    ResponderEliminar
  7. Tengo una duda
    No e entendido como esque el control de ps2 es conectado si no es inalambrico
    No se si me puedas explicar paso por paso

    ResponderEliminar
    Respuestas
    1. Si, claro. Es un mando de éste tipo:

      http://www.ebay.com/itm/Black-New-2-4G-Wireless-Dual-Shock-Game-Controller-For-Sony-Playstation-2-PS2-/131007992820

      Aunque de forma nativa el dualshock 2 no dea inalámbrico, existen éstos mandos inalámbricos que funcionan con un adaptador.

      Eliminar
    2. y ese como se conecta al arduino
      No tendras alguna red social donde podamos hablar mas sobre este proyecto bro

      Eliminar
    3. En el segundo artículo está el enlace a la web con la explicación de las conexiones y las librerias necesarias para que el Arduino interprete lo que le llega del mando.

      Arriba hay una pestaña de contacto desde la que me llega un mail a mi, para no poner datos privados por aquí.

      Eliminar
    4. esta el circuito ??? por que no lo e visto

      Eliminar
  8. hola soy novato en esto pero me gustaria aprender, me encanta la electronica lo malo que vivo en mexico y cosas como el ardino no lo puedo encontrar pero puedo buscar la forma de como hacer y ojala puedan aconsejarme me gustaria mucho, gracias :3

    ResponderEliminar
    Respuestas
    1. Supongo que lo podrás comprar por EBay desde China, igual que hago yo desde España ;)

      Un salio y animo!

      Eliminar
  9. hola quisiera hacer lo mismo y me interesa saber como hiciste tu mecanismo de diparo

    ResponderEliminar
    Respuestas
    1. Hola,

      El mecanismo de disparo venía con el tanque, es simplemente un motor de continua que manejo con un transistor que a su vez manejo con una salida lógica del Arduino. (Yo usé un TIP120, que es un BJT NPN en configuración Darlington)

      Eliminar
    2. oooooo va esque kiero diseñar un mecanismo no habra forma de que me puedas mandar una foto de ese mecanismo o algo asi como un diagrama porfa te lo agradeceria muchooo mi correo es antonio-t9@hotmail.com

      Eliminar
  10. Hola! Yo tambien estoy liado con un tanque similar pero con arduino uno, quisiera saber lo mismo que el compañero, como es el sistema de disparo, yo lo he hecho con bombonas de co2 de pistolas de airsoft y una minielectrovalvula pero cuando se descargan las bombonas hay que reemplazarlas y al final sale caro (entre 1€ y 2€) cada bombona, y solo tienes 15 o 20 disparos jajajaja si me pudieras mandar una foto, driagrama o algo para hacerme una idea... Gracias de antemano mi correo es saturhv93@gmail.com

    ResponderEliminar
  11. Hola! Yo tambien estoy liado con un tanque similar pero con arduino uno, quisiera saber lo mismo que el compañero, como es el sistema de disparo, yo lo he hecho con bombonas de co2 de pistolas de airsoft y una minielectrovalvula pero cuando se descargan las bombonas hay que reemplazarlas y al final sale caro (entre 1€ y 2€) cada bombona, y solo tienes 15 o 20 disparos jajajaja si me pudieras mandar una foto, driagrama o algo para hacerme una idea... Gracias de antemano mi correo es saturhv93@gmail.com

    ResponderEliminar