Grupo 13 – Robo-Tracing
Integrantes:
Luis León Gámez – GII + GIS
Oscar Ballesteros Izquierdo – GII + GIS
Germán Alonso Azcutia – GII+GIS
Introducción al Proyecto:
Nuestro proyecto consiste en un robot que se controla con una aplicación móvil mediante bluetooth, desde la cual puedes controlar el robot con los distintos modos implementados:
Modo Manual: Dirigido como si fuera un mando con los comandos hacia delante, hacia atrás, girar izquierda y girar derecha.
Modo Acelerómetro: Controlado con el acelerómetro del móvil.
Modo por Coordenadas: Se dirige hacia las coordenadas enviadas.
Modo freelance: El robot se mueve de manera autónoma hasta que reciba un cambio de modo.
Componentes y precios:
Los componentes utilizados para su montaje han sido los siguientes:
Componente | Precio |
Arduino uno | 21€ |
Base, motores y ruedas traseras | Gratis |
Bluetooth HC-06 | 9€ |
Ultrasonido HC-SR04 | 4,5€ |
Compas HMC588L | 6€ |
Zumbador YL-44 | 2,5€ |
Laser | Gratis |
Puente-H l293d | 3,5€ |
Rueda delantera | 2,5€ |
Pilas | 9€ |
Cables | 4€ |
Alambre | 1€ |
TOTAL | 63€ |
Esquema hardware:
Esquema software:
Problemas y soluciones:
El primer problema que hemos encontrado fue el control que teníamos sobre los motores. Estos motores, al ser reutilizados y no poder calcular el giro con exactitud, no pudimos elaborar un código mediante el cual se pudiera mover mediante coordenadas X e Y (haciendo giros de 90º.
La solución que encontramos fue comprar un compás magnético para poder conocer el ángulo concreto en el que se situaba el robot en cada momento. Con el valor del ángulo y la distancia recorrida podemos obtener las coordenadas X e Y en el plano (siendo el eje X positivo el norte, y el Y positivo el Oeste).
Tras ello, nos encontramos con un nuevo problema: si queremos ir de unas coordenadas a otras de manera automática hay que averiguar cuántos grados girar para apuntar hacia esas nuevas coordenadas y avanzar en esa dirección. Nos llevó bastante tiempo pero al final conseguimos implementar un algoritmo que mediante operaciones trigonométricas obteníamos el ángulo respecto esas nuevas coordenadas, la dirección de giro más rápida (izquierda o derecha), y los grados que nos faltaba en cada momento para apuntar en esa dirección. Para probar el algoritmo creamos un programa en ‘c’ que simulaba los movimientos y giros del robot, y luego conseguía ir sólo desde un punto a otro en el sistema de coordenadas.
Para hacer la primera prueba del compás se conectó por separado el Arduino y se probó su correcto funcionamiento. El siguiente problema surgió cuando al conectarlo con el robot la brújula nos empezó a dar valores muy extraños, y no conseguíamos comprender qué pasaba. Mil y una pruebas después nos dimos cuenta de que el campo magnético que provocaban tanto el circuito eléctrico (cables y resto de componentes) como las pilas afectaban a los resultados de la brújula (ya que está es un magnómetro que basa sus cálculos en los campos magnéticos de la tierra).
Para solucionarlo intentamos muchas posibilidades: ponerlo a una altura considerable para alejarlo del campo magnético (utilizando para ello una caja), forrar la caja usada con papel de aluminio para aislarlo, o elevar aún más el compás mediante un par de alambres. Al final del proceso conseguimos que las coordenadas nos las dé relativamente bien, excepto cuando apunta hacia el sur o cuando gira demasiado rápido. Debido a estos errores, y a que la distancia que recorre en 2 segundos no es proporcional a la que recorre, por ejemplo, en 4 segundos (debido a aceleraciones y deceleraciones de los motores), el modo coordenadas no funciona del todo bien. Una posible solución a este problema sería usar servomotores, pero no dispusimos del tiempo suficiente para ello.
Una dificultad más añadida ha sido la longitud del código, que debido al uso de distintos algoritmos y a la implementación de métodos de los cuatro modos de ejecución, fue creciendo de manera exponencial hasta acabar siendo un código de aproximadamente 1500 líneas. El código aun así está completamente comentado para que navegar por él sea más sencillo.
Trabajo de cada miembro
Realmente hemos quedado casi siempre los tres y hemos realizado el trabajo de manera conjunta, aunque separándolo en lo que más ha trabajado cada uno:
Germán Alonso: Montaje hardware y código modo manual.
Óscar Ballesteros: Aplicación Android y código modo acelerómetro
Luis León: Código modos coordenadas y “freelance”
Posibles Mejoras:
Como posible mejora, nos hubiera gustado realizar un mapa de paredes para el modo autónomo haciendo un checkeo de la distancia hacia las paredes en una vuelta completa, guardando una distancia hacia un objeto cada 15 grados aproximadamente. De esta manera podríamos hacer un algoritmo realista de movimiento autónomo.
Conclusión:
Realizar este proyecto nos ha gustado bastante ya que realmente hemos aprendido a trabajar con arduino y con componentes electrónicos. Sin embargo, nos hubiera gustado de disponer de más tiempo para la realización de la práctica ya que creemos que para este tipo de proyectos se aprende más según vas realizándolo.
Fotos y vídeo:
Vídeo funcionamiento: https://youtu.be/iihuwmoV1nQ
Apéndice:
Código: https://github.com/ice6294/SEyTR-2016-Grupo-13
Memoria en pdf: https://dl.dropboxusercontent.com/u/50718367/SEyTR_GII_Mostoles_2015-16_Memoria_Grupo_13.pdf
presentación: https://dl.dropboxusercontent.com/u/50718367/SEyTR_GII_Mostoles_2015-16_Presentacion_Grupo_13.pdf