|
ArduSoccerBot
|
|
|
1 Propósito
|
|
ArduSoccerBot es un proyecto de tipo didáctico cuyo fin es realizar
un robot de Soccer (al estilo de los de la RoboCup Junior) usando un único controlador Arduino Diecimila USB.
ArduSoccerBot no pretende ser un robot de última generación para la prueba
de Soccer de la RoboCup Junior, el objetivo es implementar el máximo de funciones
posibles con este pequeño controlador.
El resultado que perseguimos es un proyecto de fácil realización
en el que estén integrados aspectos útiles para otros diseños: control de movimiento
localización de luz (infrarroja), orientación (brújula electrónica)...
Con el fin de conseguir un diseño modular y para hacer más sencillo el
desarrollo y la reutilización de este robot y de sus partes, iremos realizando distintas versiones
del mismo que añadirán funcionalidades sobre las anteriores.
|
|
2 ArduSoccerBot versión 1.0
|
|
2.1 El controlador Arduino
|
|
Arduino es un proyecto de "hardware abierto" que se basa en una placa
controladora de pequeñas dimensiones cuyo núcleo es un microcontrolador
Atmega168
(documentación completa del Atmega168).
La placa dispone de hasta 13 entradas/salidas digitales y 6 entradas
analógicas. Sobre las propias entradas/salidas digitales también podemos
tener un puerto serie asíncrono, un puerto serie SPI, un puerto serie I2C
y salidas de conprol por modulación de anchura de pulso (PWM). Todo esto
arropado por un software de control ( WIRING)
que combina la sencillez del lenguaje C con unas funciones de alto nivel para controlar los distintos dispositivos
del microcontrolador.
Además de la entrada de alimentación también dispone de cuatro
conectores para poder acceder a las distintas entradas y salidas.
Existen varias versiones de la placa controladora Arduino, todas con unas características
muy similares presentando variaciones en su conectividad (puerto serie o USB)
y en su tamaño: los modelos más pequeños están pensados
para facilitar su integración en otros sistemas.
De todas ellas nosotros hemos selecionado la Arduino Diecimila que le compramos
a nuestro amigo Oscar de BricoGeek.
Podéis encontrar mucha información sobre Arduino en la
web oficial del proyecto
y en su versión en español.
|
|
2.2 El entorno de desarrollo
|
|
Arduino dispone de un completo entorno de desarrollo (escrito en
processing)
desde el cual podemos editar, compilar y descargar nuestros programas. Dispone,
además, de un terminal donde poder mostrar información procedente
del controlador mediante el propio cable de descarga.
El entorno de desarrollo se puede descargar desde la propia
web oficial del proyecto y está
disponible para tres plataformas: Linux (32 y 64 bits), MAC OS X y Windows.
Resulta fantástico poder trabajar cómodamente con Arduino en un
Mac (lo hemos probado) y realizar cualquier cambio y/o modificación del
programa en un PC con Windows sin que esto suponga problema alguno.
Una de las cosas que más nos ha gustado de este entorno es la cantidad
de información (guia de referencia) y de ejemplos a los que podemos
acceder con toda comodidad, así como las librerias (servo, LCD...) que resultan muy
sencillas de incluir y vienen con varios ejemplos cada una.
El entorno resulta sencillo y claro (algo bueno para los principiantes) aunque
seechan de menos algunas características de otros entornos un poco más
profesionales (como el
MPLAB de Microchip
) como un buen gestor de proyectos.
El código que se muestra en la imagen (se puede hacer más grande
haciendo cilc sobre ella), es un sencillo ejemplo que hemos usado para verificar
el funcionamiento de los sensores IR.
|
|
2.3 Esquema de conexiones del robot
|
|
El esquema del ArduSoccerBot es bastante sencillo. Haciendo uso de la
controladora Arduino como elemento principal del montaje,
solo es necesario añadirle el sistema de alimentación
, formado por una batería de LIPO de 7,4V y un interruptor. El sistema
de movimiento, que lo integran dos servomotores de rotación continua. Y
el sistema sensorial que usa dos fototransistores sensibles al infrarrojo.
|
|
2.4 Estructura del robot
|
|
En esta primera versión del ArduSoccerBot hemos usado una única
placa soporte sobre la que se sujetan todos los elementos del robot (motores, controlador,
batería, sensores...). Dada su resistencia y por su fácil mecanizado hemos
usado una plancha de madera contrachapada de 5mm de espesor de 5 capas (una
mejor opción la encontramos en las tiendas de modelismo
donde hay contrachapado estructural de hasta 4 capas por milímetro
de espesor).
|
|
|
|
Tras proceder al dibujo del contorno del robot y de los huecos que necesitarán
las ruedas, hemos cortado la madera de contrachapado con una sierra de marquetería
tras lo cual hemos lijado los bordes para librarlos de astillas y aristas cortantes.
El taladrado de la base también se realiza con facilidad (igual con demasiada
facilidad) con un taladro vertical o de mano. Para los huecos y cajeados hemos
usado de nuevo la sierra de marquetería y las limas redonda y cuadrada.
Alguno de los elementos, como la batería
hemos preferido sujetarlos con
velcro adhesivo de doble cara. Para el resto usamos tornillería
de M3 y M4 con sus correspondientes tuercas auto-frenantes.
|
|
|
|
2.5 Ruedas y motores
|
|
Para poder conectar los motores directamente a las salidas PWM del Arduino
sin necesidad de utilizar un driver de potencia adicional, hemos utilizado dos
servos de rotación continua HSR1422 de HITEC. A diferencia de los servos
normales que giran un determinado ángulo (de entre 0 y 180 grados) en
función de la anchura de pulso de la señal aplicada, los servos
de rotación continua giran a mayor velocidad en función de dicha
velocidad pudiendo, incluso, invertir su sentido de giro.
Para que este servo se pare, hay que proporcionarle una señal con una
anchura de pulso de 1,5ms, esto es, la que correspondería a una posición
de 90 grados en un servo normal: su posición media.
Aunque la alimentación nominal de este servo es de 4,8v nosotros le
alimentaremos con los 7,4 de nuestra batería (si, tendrá una vida
un poco más corta) con lo que conseguiremos que gire a unas 66 RPM en vacío.
|
|
|
|
Las ruedas que hemos seleccionado para este proyecto son unas de espuma de neopreno
de 76 mm de diámetro que proporcionan un buen agarre sobre cualquier superficie
y una gran suavidad en el movimiento. Además de su idoniedad para este
proyecto, peso el echo de que estuvieran disponibles en nuestro aula.
Para acoplarlas al servo atornillamos una de las mitades de la pieza central de la
rueda sobre el plato de rotación del servo mediante tres pequeños
tornillos de M2,5.
Con este diámetro de rueda de 76 mm y las 66 RPM máximas de giro
del servo, se podría conseguir una velocidad máxima de avance (teórica)
de unos 260 mm por segundo. Unas cuatro veces menos de lo que puede alcanzar
uno de nuestros robots de Soccer de los que usamos en la RoboCup Junior,
aunque lo daremos por bueno ya que se trata de un simple ejercicio y no de un
robot de competición.
Las ruedas motrices se encuentran en la parte frontal del robot, bueno en
realidad unos 10mm pasados el centro del mismo, proporcionándole tracción
delantera.
En la parte trasera del robot hemos colocado una "rueda loca" formada
por una bola como en las que se utilizan en las mesas de transferencia de carga
(las podemos ver en las cajas de algunos supermercados) y que se pueden encontrar
con facilidad en una tienda de venta de rodamientos. La bola loca esta montada
sobre una pequeña placa de fibra de vídreo (resto de algun otro proyecto)
y dispone de dos tornillos con tres tuercas cada uno montados de forma que se
pueda regular la altura de la parte trasera del robot.
|
|
2.6 Sistema de alimentación
|
|
La alimentación del robot se la proporciona una
batería de LIPO (Polimero de Litio) de 2 elementos que proporciona 7,4v y una capacidad
de 1100mA/h. Dicha batería es de muy poco espesor lo que nos permite colocarla
en la parte inferior del robot (entre la placa de contrachapado y el suelo) sin
que dificulte el movimiento del robot y con la ventaja de bajar el centro de
gravedad del mismo.
|
|
|
|
El encendido/apagado del robot se logra mediante un pequeño interruptor
alojado en la propia base de madera que se acciona por la parte superior del
robot pero que se encuentra cableado por su parte inferior.
En este modelo no hemos puesto un fusible de protección pero serí algo
más que conveniente dada la alta corriente de descarga de la
batería de LIPO que hemos usado: xxAmp/hora.
El conector de carga de la batería queda oculto entre la placa soporte
de la rueda loca y la base del robot de forma que pueda ser extraído con facilidad
para proceder a la carga de la batería y que quede colocado sin que se
arrastre o entorpezca el movimiento del robot.
Para alimentar la placa controladora Arduino hemos utilizado un "jack" conectado
a su entrada de alimentación externa. Para los sensores y circuitos que lo requieran
tenemos una salida de 5V estabilizada en uno de los pines de la controladora,
es conveniente verificar que el regulador de 5V del Arduino no se caliente en
exceso ya que este no dispone de ningún radiador disipador de calor.
Para facilitar las conexiones de los cables entre los distintos circuitos y
elementos hemos usado unas clemas rápidas sin tornillos que son muy prácticas
para este tipo de aplicaciones.
|
|
2.7 Sensores de IR
|
|
|
|
Para poder detectar
los infrarrojos que emite la pelota de Soccer, hemos colocado dos fototransistores
del tipo SFH313 como sensores
en la parte delantera del robot. Cada sensor nos proporciona un voltage (0-5v)
proporcional a la distancia/orientación respecto de la pelota.
El resultado de la diferencia del valor de los sensores nos proporciona
información acerca de la colocación de la pelota respecto del robot,
mientras que el valor de cada sensor nos dice lo lejos que se enecuentra la
pelota del robot.
Este tipo de sensor es sensible a todo tipo de radiación infrarroja
por ejemplo a la luz del Sol o a la que emiten las lámparas halógenas.
Para minimizar este problema hemos colocado los fototransistores en la parte
inferior del robot procurando que queden a la sombra de estas emisiones.
|
|
2.8 Programa principal del ArduSoccerBot versión 1.0
|
|
El programa principal
del ArduSoccerBot v1.0 es un sencillo ejercicio donde
pretendemos conseguir que el robot siga una pelota emisora de infrarrojos como
la que se usa en la prueba de Soccer de la RoboCup Junior. Esta pelota emite
luz infrarroja de forma continua mediante una serie de LEDs que hay en su interior.
(Importante, a partir del año 2009 la pelota oficial emitira luz modulada
sobre una portadora de 40KHz).
El programa asigna al robot dos comportamientos distintos:
Modo búsqueda: El robot no ve la pelota por ninguno de los
dos sensores de infrarrojos (el nivel de umbral es ajustable) y gira sobre
su propio eje para localizar la pelota.
Modo Seguimiento: Alguno de los sensores (o los dos) reciben un
nivel de infrarrojos que supera el umbral, el robot avanza hacia la pelota
corrigiendo de forma proporcional la velocidad de las ruedas de forma que ambos
sensores reciban el mismo nivel de señal.
|
|
2.9 Vídeos ArduSoccerBot versión 1.0
|
|
|