Laboratorio de Sistemas Digitales Departamento de Tecnología Electrónica ETS de Ingenieros de Telecomunicación MICROBOT FUTBOLISTA ANA FERNÁNDEZ DOMÍNGUEZ DAVID GARCÍA BERENGUER JUAN CARLOS GONZÁLEZ DELGADO 3º B 0 INTRODUCCIÓN Los objetivos fundamentales de la práctica consisten en desarrollar un microbot que sea capaz de encontrar una pelota situada en cualquier punto de un campo y meterla en la portería contraria. Para la realización de la práctica hemos contado con un microbot Tritt con las modificaciones hardware que se estimaron oportunas. ESQUEMA HARDWARE Y CONEXIONES CON EL MICROBOT En principio empezamos a trabajar con la estructura básica del Tritt pero debida a la pérdida de tiempo en montar y desmontar los sensores y en comprobar su correcto funcionamiento, decidimos añadirle una estructura nueva con el fin de agilizar el intercambio del microbot. Posteriormente, por problemas con el mantenimiento de los encoders, ya que compartíamos el microbot, y la poca precisión de los motores de continua, optamos por utilizar motores paso a paso con lo que nos vimos obligados a construir una estructura totalmente nueva e independiente a la inicial. Además de las dos placas que incorpora el microbot Tritt, hemos diseñado e implementado una tercera placa de circuito impreso que incluye los dos drivers de los motores, la conexión con el puerto B y el regulador de tensión. 1 Estructura La primera estructura era de Meccano. Tras varios intentos fusionando Meccano, lego y chapón llegamos a lo siguiente: Esta es la estructura definitiva, que como se puede observar en las fotografías está formada de: cinta aislante, lego, chapón, plástico, tornillos, elástico y SuperGlue®. En la parte frontal hemos colocado una tabla de chapón que sirve para golpear la pelota y, además, lleva incorporado los sensores CNY70. Además, finalmente le hemos añadido una especie de guardabarros para proteger las ruedas de la pelota. En la parte trasera izquierda hemos colocado los dos sensores de distancia para detectar la pelota mientras recorremos el campo sin tener que realizar ningún giro. Por ello, hemos tenido la precaución de girar en sentido tal que el sensor siempre mire hacia el interiore del campo. La rueda loca está fabricada con un roll-on de desodorante. De esta forma conseguimos reducir el rozamiento y los errores en los giros. Para las ruedas probamos varias opciones, que se ven a continuación: Finalmente, como el CD de 80 mm no proporcionaba el agarre suficiente, pero sí la altura adecuada, optamos por fabricar ruedas de chapón de este mismo tamaño y rodeadas por una cinta elástica rugosa pegada al contorno. Con esto conseguimos una velocidad adecuada y una adherencia superior a la del CD. Por último, para unir el motor a la rueda usamos dos tornillos y una pieza de lego. 2 Motores Hemos utilizado motores paso a paso unipolares de 12V. Para controlarlos usamos dos drivers ULN2003A que proporcionan la corriente suficiente para el funcionamiento de los motores. Este tipo de motores tienen la ventaja de tener más precisión en los movimientos que los de continua, pero necesitan más corriente. Además, su implementación software es más complicada y requiere más memoria. Esto se debe a que necesitan estar recorriendo una secuencia de movimiento constantemente para que permanezcan girando. Por el contrario, en continua, para permanecer en movimiento, tan sólo es necesario introducir un valor en el puerto A sin necesidad de refrescarlo. Los motores paso a paso unipolares suelen tener 6 o 5 cables de salida, dependiendo de su conexionado interno (en nuestro caso 6). El conexionado para controlar el motor sería: El driver ULN2003A consta de 7 transistores tipo Darlington capaces de manejar cargas de hasta 500mA. Las entradas de activación (Activa A, B , C y D) son directamente activadas por el microcontrolador conectado al puerto B, usando 4 bits para cada uno de los motores. Los bits del puerto B se distribuyen de la siguiente manera BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 D2 C2 B2 A2 D1 C1 B1 A1 Existen tres secuencias posibles para este tipo de motores. En un principio utilizamos la que proporciona más potencia y menos velocidad. Pero hemos optado por otra secuencia que ofrece más velocidad pero menos potencia. 3 Nuestra secuencia es la del tipo paso normal. En ella se activan las bobinas de dos en dos. Como vemos en la tabla la secuencia completa consta de 4 movimientos en lugar de 4. La secuencia es cíclica, por lo que cuando llega al paso 4 vuelve al 1. PASO Bobina A Bobina B Bobina C Bobina D 1 ON ON OFF OFF 2 OFF ON ON OFF 3 OFF OFF ON ON 4 ON OFF OFF ON Como comentario final, cabe destacar que debido a que los motores paso a paso son dispositivos mecánicos y como tal deben vencer ciertas inercias, el tiempo de duración y la frecuencia de los pulsos aplicados es un punto muy importante a tener en cuenta. Si la frecuencia de pulsos es muy elevada, el motor puede reaccionar en alguna de las siguientes formas: • • • • Puede que no realice ningún movimiento en absoluto. Puede comenzar a vibrar pero sin llegar a girar. Puede girar erráticamente. O puede llegar a girar en sentido opuesto. Para obtener velocidades mayores debemos acelerar los motores. Esto se consigue con una frecuencia de pulso baja, y gradualmente, ir aumentándola hasta la velocidad deseada, sin superar la máxima tolerada. Sin embargo, no hemos realizado aceleraciones porque la pérdida de potencia al ir más rápido, hacía que el microbot se parara al chocar con la pelota. En el laboratorio hemos realizado una serie de medidas para saber el consumo de corriente de los motores en movimiento. Comprobamos que cada uno requería unos 200mA, La velocidad que conseguimos es adecuada pero tenemos que utilizar un generador externo a unos 20V. Esto se debe a que al girar el motor a tanta velocidad, necesitamos aumentar el voltaje para mantener la misma potencia. 4 Sensores de distancia Para poder detectar la pelota hemos insertado en la estructura dos Sharp a distintas alturas. Los hemos colocado en una placa para fijarlos con precisión. El inferior detecta un objeto y el superior decide si se trata de la pelota o el contrario, para ir o no a por él. Estos sensores nos permiten saber a la distancia que se encuentra el objeto, pero debido a nuestro algoritmo de juego no es necesario conocerla con exactitud. Para alimentar los sensores hemos utilizado un regulador de tensión (L7805) que nos proporciona 5V para reducir el ruido. Para conectarlos a la placa hemos usado unas resistencias de pull-down de 1k conectadas a VRL. Los valores de salida del sensor están comprendidos entre los 0 y 2,5 voltios, por lo que para conseguir una mejor exactitud en nuestras medidas, situaremos el nivel de referencia VRH (puerto E) en torno a esos 2,5 voltios obtenido con un divisor de tensión a la salida del regulador. Sensores de infrarrojos El algoritmo de juego recorre la línea negra y por ello hemos utilizado 4 sensores CNY70 alineados. Los dos centrales irán asociados a los sensores 3 y 4, y son los encargados de seguir la línea; los laterales van conectados a los sensores 1 y 2 que a su vez, van conectados a los capturadotes de entrada 3 y 2 para provocar interrupción al detectar los cruces del campo. La distribución de los sensores es la siguiente: : Sensor 1 : Sensor 3 : Sensor 4 : Sensor 2 5 DIAGRAMAS DE FLUJO Aquí vemos el diagrama de flujo de nuestro algoritmo principal: Inicio Configuración Inicial Andar un paso SI ¿Alineado con línea negra? NO Cargar Adelante ¿Desviado a la derecha? NO ¿Sensor permitido? NO SI NO SI ¿Desviado a la izquierda? ¿Detecta pelota? Cargar Izquierda SI NO Cargar Izquierda SI ¿Detecta microbot contrario? Cargar Derecha NO SI Encontrado = SI SI ¿Hago algoritmo caja? NO Golpea Algoritmo caja 6 Aquí vemos el diagrama de flujo de la rutina de atención a interrupción de los capturadores 3 y 2 Inicio Miramos Tabla SI ¿Fin de nuestro campo? NO SI SI Cargar Campo Gol ¿Hemos encontrado la pelota? NO ¿Fin del campo de gol? NO Cargar Campo Nuestro Encontrado = NO Cargar Dirección a Seguir Avanzar RTI 7 DESCRIPCIÓN DEL CÓDIGO Plan de juego El algoritmo diseñado se basa en recorrer el campo siguiendo la línea negra y en cada cruce actualiza la posición, accediendo a una tabla que contiene la información sobre las tareas a realizar en el tramo de campo. La tabla global está formada por otras dos, una para cada campo. Cada byte de la tabla contiene información sobre: la dirección a seguir en el cruce (bit 0 y bit 1), si debe o no buscar la pelota (bit 5), es decir, que estén permitidos los sensores de distancia; y la forma en la que debe golpear la pelota (bit6); zona de incertidumbre (bit7). BIT 7 Incertidumbre BIT6 BIT5 0 X BIT 6 Modo golpe BIT 5 Sensor Golpea 1 X Caja X 0 Sensor desactivado X 1 Sensor activado BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 Dirección BIT1 BIT0 Dirección 0 1 Izquierda 1 1 0 1 Derecha Recto Combinando los dos modos de golpeo de pelota conseguimos meter gol. En cada tramo del campo efectuamos una acción distinta, o bien caja, o bien, golpea. GOLPEA El microbot se desplaza en dirección perpendicular a la línea del campo y empuja una distancia fija la pelota hacia la zona central. Con ello se consigue colocar la pelota en un pasillo imaginario de la anchura de la portería. Antes de ejecutar este movimiento retrocede unos pasos para alinearse con la pelota. µBot CAJA El microbot traza una caja alrededor de la pelota de forma que esta se dirija hacia donde estaba el microbot inicialmente. 8 Las tablas de los campos serían: 1 2 3 4 5 6 7 8 9 10 11 12 Dirección Recto Izquierda Izquierda Izquierda Derecha Derecha Derecha Izquierda Recto Izquierda Izquierda Recto Sensor Activo Activo Activo Inactivo Inactivo Activo Inactivo Inactivo Activo Inactivo Activo Activo Modo de golpeo Golpea Golpea Golpea Caja Caja Golpea Golpea GOL GOL 1 18 1 12 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Dirección Derecha Derecha Derecha Izquierda Izquierda Izquierda Izquierda Derecha Derecha Derecha Izquierda Recto Izquierda Izquierda Izquierda Derecha Derecha Derecha Sensor Inactivo Inactivo Activo Inactivo Activo Activo Activo Inactivo Activo Inactivo Inactivo Activo Activo Activo Activo Inactivo Activo Inactivo Modo de golpeo Caja Caja Golpea Golpea Golpea Golpea Golpea Golpea Caja Caja 9 Hemos desarrollado un algoritmo pensado para prescindir de una ampliación de memoria y, por lo tanto, inferior a 512 bytes. Para ello, nos hemos basado en el algoritmo de seguir línea negra que es simple y eficiente. Además, es fácilmente extensible a campos de distinta dimensiones, ya que actualiza la posición únicamente al llegar a cada nodo, de forma que no tenemos que llevar un constante control sobre la posición del microbot en el campo. Esto último facilita el plan de pruebas en campos de menor tamaño. La combinación línea negra y tabla nos permite recorrer el campo con menor riesgo de perdernos, ya que los errores no son acumulables. Descripción del código Al comienzo del código inicializamos todos las interrupciones, sensores, definimos tablas y etiquetas. Empezamos siguiendo línea negra. En los casos en los que tengamos que rectificar la posición deshabilitamos las interrupciones para asegurarnos de que no detectemos más de una vez el mismo cruce. Entonces cuando avanzamos es cuando se pueden ocasionar las interrupciones, que sólo llegarán cuando el microbot se encuentre con un cruce. Es decir, que cualquiera de los sensores de infrarrojos 1 y/o 2 (laterales) detecten línea negra. Cuando ocurra esto, se cargará de la tabla el movimiento a realizar y lo ejecutará durante un número de pasos fijo. Luego avanzará un poco hacia delante, para que los sensores centrales queden sobre la línea negra. Nos vemos obligados a hacer esto porque los sensores no están en el eje de giro, sino más adelantados. Sólo podremos detectar la pelota cuando avanzamos sobre línea negra, nunca en una interrupción ni durante una rectificación. Pero habrá tramos de recta donde los sensores de distancia estén desactivado hasta la nueva llegada de cruce, para evitar que envíe la pelota fuera del campo. También se desactivan cuando estén mirando al exterior del campo, para evitar que detecten a un intruso. Consideramos que hemos detectado un objeto cuando este se encuentra a una distancia menos de los 40 cm. Entonces, una vez detectado un objeto, tendremos que determinar si se trata del esférico o del defensa. Para ello, disponemos de un segundo sensor de distancia situado a mayor altura para poder distinguir entre ambos (suponiendo que el microbot es más alto que la pelota). Si efectivamente se trata del defensa, seguirá su camino en busca de la pelota. Por el contrario, si se trata del esférico decidirá cómo golpearlo dependiendo del contenido de la tabla y pondrá a 1 el bit encontrado. Cuando termina de recorrer el campo de gol y si no ha detectado la pelota, se dirigirá hacia el otro campo. Si ha detectado, seguirá por el mismo campo hasta conseguir meter gol. Siempre que termine de recorrer un campo se pone a 0 el bit de encontrado para evitar quedarnos en el campo de gol, habiéndola enviado a la otra mitad por error. Cuando la pelota sea encontrada en nuestro campo será golpeada y seguirá su camino; pero esta vez no se quedará en él, sino que volverá al campo de gol, ya que es 10 muy probable que el esférico este ahora en él. Por lo que nunca recorrerá más de una vez consecutiva nuestro campo. 9 6 Hemos añadido al código la zona de incertidumbre. Esto se corresponde con una zona del campo donde el microbot echaba la pelota fuera (zona sombreada). Para solucionarlo, hemos evitado que realice una caja en la zona 9, si la ha hecho antes en la zona 6. Con ello aseguramos que golpearemos previamente desde la banda, y antes de hacer la caja de nuevo en la zona 9, la pelota se encontrará entre los palos de la portería. 11 CONCLUSIONES La puesta a punto del microbot ha resultado bastante más lenta de lo que esperábamos. Hemos encontrado muchos problemas mecánicos que han retrasado el desarrollo del algoritmo. Posiblemente, el reto más grande ha sido buscar una estructura que nos facilitara el intercambio de microbot sin que supusiera mucha pérdida de tiempo. En principio, pensamos en un algoritmo con una gran base matemática, basada en trigonometría, pero debido a la escasa capacidad de memoria, decidimos desecharla. Posteriormente, probamos un algoritmo basado en ir realizando cajas, con lo que sólo teníamos que realizar giros de 90 grados. Una vez más, las restricciones mecánicas (giros de 90 grados con motores de continua, mantenimiento de los encoders,…) nos obligaron a cambiar de estrategia. Finalmente, buscamos un algoritmo más sencillo de implementar. Para solucionar la precisión de los giros optamos por motores paso a paso. Hemos eliminado de nuestro algoritmo la opción de buscar la pelota fuera del campo, ya que en el campo real no es posible realizar esta parte de código por sus limitadas dimensiones. Destacamos algunas formas para mejorar el algoritmo: 1. Añadir un bumper o un tercer sensor de distancia para evitar chocarnos de frente contra otro microbot. 2. Mejorar la interacción con otro microbot. Para ello se podrirá añadir una rutina para esquivar en caso de posible colisión. 3. Resolver el problema de la incertidumbre de una forma más rápida. Se podría detectar cuando estamos entre los palos de la portería y cuando no. Por otro lado, nos gustaría resaltar algunas dificultades adicionales que se han presentado: 1. Las pruebas realizadas en casa siemrpe han resultado más satisfactorias que las del laboratorio. Hemos concluido que los sensores se ven muy afectados por las condiciones de luz del entorno y del material de los objetos sobre los que se refleja. 2. Los sensores de infrarrojos CNY-70 fallaban detectando cruces donde no los había. Creemos que puede deberse a los distintos desniveles que presenta el campo, ya que en casa, sobre cartulina, nunca nos ha dado ningún problema. 3. La placa de baquelita, que teníamos inicialmente para controlar los motores, nos daba muchos problemas debido a falsos contactos. Así que nos decidimos a fabricar una placa de circuito impreso. La práctica de este año nos parece más compleja que la de años anteriores, también es cierto que hemos contado con más documentación que las anteriores promociones. Pero aún así, la dificultad ha sido mayor debido a la práctica en sí y la reducción a la mitad del tiempo efectivo de posición del microbot. De todas formas, no dudaríamos en volver a optar por el microbot frente a la Promax. 12