Grupo 4 – Maze Runner

Integrantes:
          José Antonio Rodríguez García (GII)
          Cristina López Pizarro (GII)
          Alexey Sorokin (GII)
CONTENIDOS
  1. Memoria del proyecto
  2. Presentación
  3. Código fuente
  4. Vídeo del proyecto:                                                                                                                                                                                           
A continuación relatamos un resumen del proyecto, para información más completa y detallada, por favor consulte la memoria adjunta a esta entrada.
Introducción

Con
motivo de la práctica impuesta en la asignatura de Sistemas Empotrados y de Tiempo
Real, enmarcada en el itinerario de Grado de Ingeniería Informática, el grupo 4
hemos construido un robot capaz de resolver un laberinto. Para ello se ha
utilizado un arduino y diversas placas bases para realizar las conexiones entre
los diferentes componentes utilizados.
    Además,
p
ara hacer el proyecto más interesante, hemos
decidido añadirle ciertas capacidades extras: como la capacidad de sortear
obstáculos y hacer sonar una melodía de triunfo cuando alcanza la meta.
Componentes y precios

NOMBRE
UNIDADES
PRECIO/UNIDAD
Arduino
1
Cedido
Placa base
2
Cedido
Fotointerruptor
5
1.07 €
Sensor de Proximidad Ultrasonidos
1
3.51 €
Rueda 90x10mm
2
4.34 €
Motor pequeño 3..6 V 180:1
2
6 €
Rueda Loca metálica 9.5 mm
1
3.14 €
Resistencias varias de 470 Ω, 1k y 10 KΩ
11
Cedidas
Cables
Cedidos
Packs de 10 pilas
2
2 €
Interruptor
1
1.15 €
Corcho y madera 8×11 cm
2
1.10 €
Circuito integrado L293D
1
4.50 €
Placas de madera escenario
2
8 €
PRECIO TOTAL

59.43 €

Esquema hardware-software

  • Etapa 1: Capacidad para moverse

            Para
que esto fuese posible, primero montamos un Puente H utilizando pines PWM
(permiten regular la intensidad de la energía que
se envía a los motores, útil para acelerar o frenar el aparato en etapas
posteriores).
            El Puente H hace posible que el
aparato se alimente del paquete de pilas de 9 V directamente, en vez del
arduino. De esta forma el robot es capaz de moverse de forma autónoma.
            Por otro lado, añadir que hay que
tener muy en cuenta la circulación de la energía a lo largo del circuito; ya
que depende de ella que las ruedas giren en una dirección u otra.


                                                              Ilustración 1: Puente H

                                               Ilustración 2: Montaje real del
puente H
  • Etapa 2: Capacidad para detectar
    y seguir una línea

Para
ello hemos utilizado cinco sensores infrarrojos colocados en una posición
semejante a una punta de flecha que mira al frente. El sensor más adelantado se
encarga de detectar el fin del camino que tiene delante. Los sensores de los
lados, por otra parte, poseen otra función: detectar cuándo se abre un camino a
cualquiera de los lados. Finalmente, los dos sensores centrales más atrasados
se encargan de detectar posibles desviaciones del camino por parte del aparato.
Para más información referente a
el control de las desviaciones, consultar la memoria completa adjunta a este
resumen.
                                                            Ilustración 3: Sensores IR

                                         Ilustración 4: Montaje real de
los sensores infrarrojos
  • Etapa 3: Capacidad para tomar
    decisiones

La
idea principal es que el robot sea capaz de resolver un laberinto, es decir,
que sea capaz de recorrer distintos caminos hasta alcanzar la meta sin repetir
ninguno. Para conseguir esto, el aparato sigue una lógica muy simple: si existe
un camino que tuerza a la derecha, escoge ese camino; si no, sigue de frente; y
si no existe ninguno de los dos, entonces gira a la izquierda. El robot
entiende que ha alcanzado la meta cuando todos sus sensores perciben el color
negro.
Los
sensores laterales junto al sensor frontal son los encargados de percibir los
distintos caminos y activar la lógica correspondiente para la toma de
decisiones.

  • Etapa
    4: Capacidad para detectar obstáculos


Para lograr esta capacidad se ha
usado un sensor de ultrasonidos en la parte frontal del aparato. Cuando este
sensor detecta que hay un objeto a menos de 10 cm, envía la orden de detener el
robot hasta que el objeto desaparece de su vista o se aleja.
A continuación, se muestra una
imagen de las conexiones de este componente con el arduino. El código asociado
a este componente aparece en el Apéndice adjunto a esta entrada.
                                    Ilustración 5 Sensor
ultrasonidos y piezoeléctrico


                                      Ilustración 6 Sensor
ultrasonidos montado

  • Etapa 5: Capacidad de reproducir
    sonidos

Para
esta última etapa hemos utilizado un zumbador conectado debidamente al arduino.
Cuando el robot inicia o llega a la meta, se envía una señal desde el arduino
al zumbador con una determinada frecuencia. Tocando los tiempos de espera
(delay), se pueden crear melodías completas.
En
nuestro caso, hemos descargado las melodías ya creadas de internet y hemos
ajustado la duración de la misma en base a su uso.

                                                    Ilustración 11 Zumbador montado
Problemas
y soluciones

  1.          
    Grandes desviaciones al seguir una trayectoria: En un principio, pensamos que para ser capaz de no
    salirse del camino sería suficiente con poner dos sensores que avisaran de
    cuando el cuerpo del robot se salía de la línea… pero pronto quedó claro que
    aquello no era suficiente. Después de todo, el aparato se dedicaba a hacer
    correcciones muy bruscas, constantemente, en cuanto se salía mínimamente de la
    línea. Eso al final se solucionó haciendo uso, además, del sensor frontal.
  2.          
    Posicionamiento erróneo al hacer los giros: A veces se daba el caso de que, al realizar un
    giro, el aparato giraba de más, quedando mal posicionado sobre la línea y dando
    lugar a posteriores lecturas erróneas por parte de los sensores infrarrojos.
    Para solucionar este problema retocamos el código de los giros, permitiendo que
    el aparato se enderezase haciendo lecturas durante un breve período de tiempo
    justa tras el giro. Además, también tuvimos más cuidado al calibrar la
    velocidad y potencia con la que realizaba el giro permitiendo un mayor control.
    Además, hemos implementado un giro haciendo uso de las dos ruedas a la vez,
    para que el giro se produzca de forma rápida y eficaz -una rueda avanza y la
    otra retrocede- y consumiendo el menor radio posible.
  3.          
    Componentes problemáticos: Uno de los principales inconvenientes detectados
    está relacionado con el uso de las ruedas y el movimiento general del robot. Al
    parecer, las ruedas no se encuentran perfectamente perpendiculares al suelo,
    esto hace que la máquina, al moverse y al girar, se desvíe visiblemente de la
    trayectoria a seguir. También influye el reparto del peso general del robot, el
    cual no se distribuye de manera equitativa. Para solucionar este problema
    definimos en el código una variable de velocidad para cada motor y realizamos
    pruebas ajustando dichos valores hasta que el robot avanzase perfectamente
    recto.
  4.          
    Problemas menores: Introducir un interruptor para mayor facilidad de
    uso, utilizar una “rueda loca” junto a dos ruedas normales para disminuir
    costes, la necesidad de reformar el cuerpo del robot cada cierto tiempo para
    ajustarlo mejor a los cambios físicos producidos al añadir los componentes
    -destaca el cambio del paquete de pilas de 6V por uno de 9V-, gran dependencia
    de energía dada por las pilas, ya que nos hemos encontrado grandes cambios en
    el funcionamiento del aparato según se van gastando más o menos. Y, por
    supuesto, la necesidad de investigar concienzudamente cada componente y su uso
    para poder aplicarlos a nuestras necesidades.

  
NOTA: Para más información
respecto al código, consulte el Apéndice adjunto a esta entrada.

También te podría gustar...

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *