Cuando se plantea un problema de robótica o, de forma más genérica, de un sistema de control, es necesario un algoritmo. Esta palabra, que da bastante respeto, no hace referencia a un arcano, antiguo y complicadísimo lenguaje. Debemos pensar cómo resolver el problema, pensar en una relación de instrucciones o tareas que lleven a cumplir el objetivo.

La razón de esta entrada es una consulta acerca de cómo hice la programación del cálculo de la gravedad con el péndulo simple. En esta entrada introduje el esquema del algoritmo.

Cuando se está comenzando en el mundo de la programación, la comprensión de estos esquemas puede ser difícil. Intentaremos dar una descripción detallada del algoritmo utilizado en aquella ocasión.

La definición del problema

Este es el enunciado:

Cómo obtener el valor de la gravedad utilizando un péndulo simple, sabiendo que, para pequeñas oscilaciones, es válida la fórmula:

\begin{equation}
T=2\pi\sqrt\frac{L}{g}
\end{equation}

Donde T es el período de oscilación, L es la longitud de la cuerda donde cuelga el péndulo, g es el valor de la aceleración de la gravedad que deseamos medir y pi es la relación que hay entre la longitud de una circunferencia y su diámetro.

El análisis del problema

Conocemos el problema que deseamos resolver, que debe estar definido de forma precisa. Este es el conjunto de pasos que vamos a seguir:

  • Pensamos cómo resolveríamos el problema si tuviésemos que realizarlo a mano. En el caso que nos ocupa es muy sencillo: medir el tiempo de una oscilación completa del péndulo. Esto parece fácil, pero una oscilación, si el péndulo es corto, dura demasiado poco. Por tanto, decidimos hacer 10 oscilaciones, medimos el tiempo y dividimos entre 10, con lo que evitamos los errores.
  • Observamos con detenimiento la fórmula que permite calcular g. Vemos que hay algunas constantes matemáticas, que no ofrecen problema. Tenemos, además, las dos variables que hay que medir: la longitud del péndulo, que medimos nosotros y el período de la oscilación, que es la medida que vamos a pedir a nuestro microprocesador, mucho más preciso que nosotros.

Componentes necesarios y características

Vimos en la correspondiente entrada los componentes (pocos) que hacían falta: la placa arduino, el montaje del péndulo y el sensor de infrarrojos. Nos centraremos en este apartado en las características y los aspectos que es necesario tener en cuenta.

plantear un algoritmo
Péndulo simple de pequeño tamaño para «medir» el valor de g (aceleración de la gravedad)

En una de las primeras versiones que hice para la medición de g, utilicé tablas de madera de casi un metro y una pelota de frontenis. Es decir, materiales bastante grandes. El tamaño de la bola hacía segura la activación de un único sensor de IR situado en la base.

En el modelo que se ve en la fotografía de arriba, he utilizado dos sensores. Este montaje garantiza que no voy a perder ningún paso de la pelota por el punto más bajo.

Si perdemos activaciones, el valor obtenido del período será demasiado alto y la gravedad será demasiado baja. No se puede escapar ni una activación.

Cómo plantear un algoritmo

Analizaremos el siguiente diagrama que representa al algoritmo. Aquí solo tenemos un sensor de infrarrojos que proporciona una entrada digital de alto nivel (es decir, 1 lógico o 5V) de forma permanente hasta que se activa y pasa a valer 0.

Hasta ahora, hemos analizado el problema y el lugar qué ocupa nuestro microcontrolador en la resolución del mismo. Tiene que medir el tiempo y lo tiene que hacer varias veces. Además, debe registrarlo y almacenarlo.

Por otra parte, ¿Cómo voy a realizar el experimento?: cojo la pelota y la retiro de su posición de equilibrio (punto bajo). Después, suelto la pelota, se produce una primera activación y a la vuelta se activará una segunda vez antes de volver a la posición de lanzamiento, para volver a pasar por el punto bajo. La primera oscilación se producirá entre la primera activación y la tercera, es decir, cuando se produce el paso por el punto bajo después de haber completado el ciclo desde que se activó la primera vez.

Toca ahora pensar en cómo llevar a cabo el proyecto: cómo plantear un algoritmo que permita obtener los datos que deseamos.

Explicando el algoritmo

ALGORITMO: Conjunto de pasos necesarios para obtener una medición correcta del valor de la aceleración de la gravedad g (9,8 m/s2). De acuerdo con el diagrama de flujo, que podemos ver numerado más arriba:

  1. Introduzco en una variable la longitud del péndulo que utilizo (1,92m). También grabo el número de activaciones del sensor (21). Ponemos a cero el contador de activaciones.
  2. Cuando el sensor se active por primera vez, registro el tiempo que me da el microcontrolador (t_arranque) y lo llamo tiempo auxiliar. Sumo al contador de activaciones +1.
  3. Verifico si ha sido la primera activación (en el diagrama, en el rombo: si contador = 1). Si es así (ocurrirá una sola vez), introduzco el tiempo auxiliar en una variable llamada tiempo_inicial. Ya tengo el instante desde el cual comienzo a medir el tiempo.
  4. Imprimo por pantalla el valor del contador. Se va a imprimir en cada activación. Esto es opcional, pero muy interesante para el seguimiento del programa (depuración o debugging)
  5. Importante: un retardo de 200 ms, que se puede modular. Recordemos que el delay detiene por completo la ejecución del programa. Debe ser el tiempo para que la pelota deje de activar el sensor (evitar el efecto rebote). Las activaciones falsas son tan malas como las no activaciones. A más activaciones, menos período, más elevado el valor de g. Este delay introduce un pequeño error en la medida final.
  6. Al final de cada activación, tomamos el tiempo que lleva transcurrido, para hacer cálculos intermedios e imprimirlos.
  7. Hacemos todos los cálculos correspondientes a cada activación, el período y la gravedad, tomando el tiempo final – tiempo inicial y el número de activaciones (variable contador). Por supuesto, estos cálculos intermedios serían opcionales y se podrían hacer solo al final (ver apartado siguiente).
  8. Vemos si ya hemos alcanzado el número de activaciones previstas y si es así, paramos el ciclo e imprimimos los resultados finales, que ya teníamos calculados.

Nota de cálculos: el valor del período se obtiene T = (t_final-t_inicial)/ (contador-1)/2. Es decir, 21 activaciones suponen 10 ciclos, ya que se produce un ciclo cada 2 activaciones del sensor.

La programación.

En numerosas ocasiones es preciso corregir por software el caprichoso comportamiento de los sensores, que no funcionan como teóricamente se espera de ellos.

La programación del algoritmo que se ha mostrado está en el enlace indicado.

Si te interesan todos estos temas y quieres saber más, o simplemente comenzar a aprender, ¡ven a nuestros cursos de julio de 2022!