Skip to content

Diseño Software

Marina edited this page Dec 21, 2021 · 4 revisions
drawing

Introducción

El diseño de un algoritmo capaz de coordinar y poner en funcionamiento las patas de la hormiga fue un proceso sencillo de abordar en la teoría pero dificil de implementar en la realidad.

Calibración de los servomotores

Una parte fundamental para conseguir que nuestra hormiga se mueva correctamente es la calibración de los servos. El proceso de calibración consiste en mandarle a nuestro servo que se situe en la posición que nosotros deseamos definir como inicial, y una vez hecho esto, incorporarle el cabezal en la posición que nos interesa.

Nosotros hemos definido como ángulo inicial de nuestros servos 90º, ya que así al ser servos de 180º, nos podemos permitir girar el mismo número de grados en ambos sentidos horario y antihorario. Sin embargo, en la realidad al comandarle a los servos el angulo de 90º, pudimos observar como las posiciones diferían entre ellas:

  • En los servos 1 y 3 correspondientes a las patas delanteras y traseras, tuvimos la suerte de que la posición de 90º se alcanzaba en ambos al comandarle 94º.
  • En el servo 2 correspondiente a las patas pivote la posición de 90º se alcanzaba al mandarle 102º.

Coordinación de las patas

Para que nuestra hormiga se mueva adecuadamente, las patas deben hacer movimientos precisos y coordinados. Esto se consigue moviendo las patas delanteras y traseras a la vez mientras que las patas pivote deben esperar a que finalice el movimiento de estas para pivotar hacia el otro lado. Todo esto traducido en código se reduce a lo siguiente:

  • La primera vez que se ejecuta el código, nos encontramos en la posición inicial, con lo que para llegar al ángulo máximo que queremos que se muevan las patas, debemos hacer un bucle desde el inicio hasta esa posición:
for (pos = 94; pos <= 124; pos++) {
    servo1.write(pos);
    servo3.write(pos);
    delay(10);
}

Como podemos observar, giramos los servos de las patas delanteras y traseras 30º en sentido antihorario, este movimiento se vería reflejado solo en las patas que desplazan nuestro robot de la siguiente manera:

drawing drawing

Una vez realizado este movimiento hasta su máxima amplitud, debemos girar el servo de las patas pivote 20º para así elevar un lateral de nuestra hormiga y permitir que en la siguiente ejecución, las patas al arrastrarse en dirección contraria hagan que nuestro robot se desplace:

for (pos = 102; pos <= 122; pos++) {
    servo2.write(pos);
    delay(10);
}

Poniendo a la hormiga en la siguiente situación:

drawing
  • El resto de ejecuciones serán repetitivas constando de 4 pasos diferentes a llevar a cabo, y sin volver a tener en cuenta el punto de inicio de nuestros servos como hicimos en la primera ejecución.

El primer bucle hace que nuestros servos de desplazamiento giren 60º en sentido horario, una vez terminado, volvemos a pivotar con el siguiente bucle:

for (pos = 124; pos >= 64; pos--) {
    servo1.write(pos);
    servo3.write(pos);
    delay(10);
}

for (pos = 122; pos >= 82; pos--) {
    servo2.write(pos);
    delay(10);
}
drawing drawing

A continuación hacemos que nuestros servos de desplazamiento giren 60º en sentido antihorario y una vez terminado, volvemos a pivotar con el siguiente bucle:

for (pos = 64; pos <= 124; pos++) {
    servo1.write(pos);
    servo3.write(pos);
    delay(10);
}

for (pos = 82; pos <= 122; pos++) {
    servo2.write(pos);
    delay(10);
}
drawing drawing

Botón activar/desactivar

Hemos incorporado a su vez un botón que nos permite empezar la ejecución y pararla pulsándolo. Lo hemos implementado mediante interrupciones, que es un mecanismo que permite asociar una función a la ocurrencia de un determinado evento, que en este caso es pulsar el botón. Esta función de callback asociada se denomina ISR y gracias al parámetro RISING, el cual indica que el evento ocurre en el flanco de subida de LOW a HIGH, conseguimos entrar al callback cada vez que se pulse:

void callback_BUTTON()
{
  move_ant = !move_ant;
}

Como podemos observar en el código, cada vez que se pulse el botón, el estado de la hormiga cambiará; si se encontraba en movimiento se parará, y si estaba parada se pondrá en movimiento.

El siguiente gif representa el funcionamiento de nuestro circuito ilustrado en la plataforma Tinkercad, los angulos al haberse calibrado, en tinkercad no salen alineados como en la realidad:

drawing

Arduino Tinkercad

Clone this wiki locally