Seleccionar página

Si os habéis pasado por este blog, habréis comprobado nuestro especial interés con los aspectos relacionados con la gravedad. Es natural, vivimos permanentemente sometidos a nuestro propio peso que, como sabéis, es el producto de nuestra masa por la aceleración de la gravedad (P = m g). En esta entrada encontraremos un nuevo método para calcular la gravedad.

Nos proponemos dejar caer una bola, medir el tiempo que tarda en llegar al suelo y calcular el valor de la aceleración de la gravedad. ¿Por qué no usar un simple cronómetro para medir el tiempo y calcular la gravedad? Como veremos en breve, entra en juego nuestra capacidad de reacción, que hace imposible realizar una medición fiable.

Cómo calcular la gravedad. La fórmula

Nuestro punto de partida será una fórmula muy simple. La ecuación del movimiento de un sistema uniformemente acelerado que es:

Y = Y0 – v0 t + 1/2 g t2

En esta ecuación Y es la distancia recorrida en vertical (en nuestro caso) en un tiempo t. Y0 es la distancia desde donde parte el cuerpo. t es el tiempo que el cuerpo está bajando. v0 es la velocidad inicial del cuerpo al caer. Por supuesto, g es el valor de la aceleración de la gravedad, que vamos a calcular (no decimos medir, porque lo que vamos a medir es el tiempo y la distancia).

Como pretendemos soltar una bola, esta caerá sin velocidad inicial (v0 = 0). Además vamos a medir la distancia a partir de la posición de la bola, por lo que Y0 = 0. Nuestra sencilla ecuación se simplifica aún más:

Y = 1/2 g t2

Esta ecuación ya nos ha salido en alguna otra entrada.

Por lo tanto, para calcular la aceleración de la gravedad:

g = 2 Y / t2

Es decir, bastará medir la altura desde la que soltamos la bola y el tiempo que tarda en caer. La altura es muy fácil de medir: usamos un metro o regla o bien incluimos en nuestro montaje un sensor de distancia.

Nosotros optaremos por el sensor de distancia, lo que permitirá dejar caer la bola cualquier distancia sin tener que modificar la distancia en el programa.

Aspectos básicos del problema

Hay dos elementos críticos para calcular el tiempo. Uno de ellos es saber cuándo se suelta la bola. El segundo es saber cuándo llega al suelo.

Si decidimos soltar la bola con la mano a una cierta altura, apretar con la otra mano un cronómetro y parar el cronómetro cuando oímos el golpe, nuestro método es extremadamente impreciso. He hecho unas pruebas con el cronómetro del móvil y mis dedos a una altura de 1,05 metros. Estos han sido los resultados:

t( s)0,590,530,460,460,590,590,660,530,530,600,590,520,46
tiempo de caída en segundos

Con un promedio de 0,55 s y un valor de la gravedad de 7 m/s2 para ese promedio (el valor real es 9,81 m/s2), se comprende la poca fiabilidad de la medida.

Por lo tanto, hay que idear un mecanismo que permita soltar la bola y que, a la vez empiece a medir el tiempo. A su vez, hay que pensar en un sensor que se active justo al llegar al suelo.

El mecanismo que suelta la bola

Usaremos una bola de hierro que sujetaremos con un electroimán. Parece fácil, lo es, pero presenta algunas complicaciones. El electroimán lo conseguí de un relé de cuadro eléctrico que tenía desde hace muchos años, de la época en la que ejercía como ingeniero. Lo vemos en la foto, en su versión completa. En el montaje he tenido que sacar la carcasa porque lo que me interesaba era el efecto magnético, que el relé usaba para la activación de sus conectores y yo lo uso como imán.

En este vídeo observamos su funcionamiento:

Lo que hago es abrir y cerrar el circuito de manera que se desactive y active el electroimán, como se observa en el vídeo.

El sensor que se activa al llegar al suelo

Este mismo experimento lo realicé hace algún tiempo, con menos medios y tiempo. La idea del electroimán se me había ocurrido, pero no tenía a mano un sensor de sonido.

Así pues, pensé que si algo caía con cierta fuerza, podría cerrar dos contactos, algo así como poner un botón en la llegada. Pero no usé un botón porque implicaba apuntar. En su lugar, utilicé papel de aluminio, buen conductor e improvisé dos contactos que se cerrarían cuando la bola llegara al suelo. Por supuesto, fue un rotundo fracaso. veamos el vídeo de aquella época (hace unos 6 años).

Experimento fallido de medición de la gravedad

El sensor de sonido, por el contrario, funciona de manera impecable, activándose incluso cuando está lejos el punto de impacto, lo que permite probar a varias alturas.

Cómo hacemos el montaje mecánico y eléctrico

En primer lugar, hay que decidir qué materiales utilizamos. Es decir, lo que podríamos llamar la parte mecánica del trabajo. Hace unos meses, El País lanzó un curso de robótica con piezas de tipo lego, que son las que he ido utilizando, como se puede ver en las fotos que he ido añadiendo. El montaje, ya cableado, ha quedado así:

En esta foto llama la atención un conjunto de cables que salen «de la cabeza» de la construcción. Hay que tener en cuenta que el electroimán consume demasiada energía, lo que introduce dos dificultades:

  • Un pin de salida de la placa de arduino no va a poder proporcionar la intensidad suficiente para que el electroimán funcione correctamente
  • Sería interesante activarlo el menor tiempo posible. Para ello, hemos añadido una plataforma que se mueve con un servo. En la plataforma, la bola espera espera hasta la activación del electroimán, cuando este actúa, inmediatamente retiramos la plataforma y desactivamos el electroimán

El primer problema justifica el cableado que vemos salir de la parte alta y cuya finalidad es alimentar la bobina del electroimán. Este es el aspecto que tienen los componentes utilizados:

Hemos introducido un transistor 2N2222 y colocado un diodo entre los contactos de la bobina, para protección. El diodo LED lo utilizamos para informar de que se ha producido la medida y puede dar comienzo un nuevo experimento.

La utilización de la plataforma introduce asimismo una pequeña complicación en la programación, que obliga a utilizar la función millis() en el setup.

Haciendo el algoritmo de cálculo

Recordemos que el algoritmo de cálculo (palabra ahora muy de moda) no es más que el procedimiento dividido en instrucciones que seguiremos para conseguir nuestro objetivo, esencialmente, obtener la medida del tiempo de caída. tenemos que tener en cuenta:

  • colocación de la plataforma para la bola
  • activación del relé para activar el electroimán
  • tomar la medida del sensor de distancia
  • activación del sensor de sonido
  • impresión de los resultados, por ejemplo, el tiempo y el valor de g calculado

Es un buen ejercicio elaborar el esquema del algoritmo utilizado. Se puede utilizar el código que reproduzco más adelante, aunque hay que acostumbrarse a hacer primero el algoritmo.

Programando la placa

Hemos programado la placa en una primera versión para obtener los valores de medición por el puerto serie. En este vídeo vemos cómo funciona todo el experimento:

La primera versión del código definitivo (he prescindido de la asignación de variables a los pines, la práctica habitual en programación):

// Librerías. El servo-motor
#include <servo.h>
int finPrograma = 1;
int impacto;
float tiempo_inicial, tiempo_final, t;
int impresion = 0;  //se activa cuando lo hace el sonido, imprime los datos 1 vez
float d;
// mi motor servo (objeto tipo Servo)
Servo miMotor;
// NOTA: PARA CADA MEDIDA SERÁ NECESARIO PULSAR EL BOTÓN DE RESET
// DE LA PLACA ARDUINO
void setup() {
  pinMode(2, INPUT);    //echo
  pinMode(3, OUTPUT);   //trigger
  pinMode(5, OUTPUT);   // electroimán
  pinMode(10, OUTPUT);  //LED
  miMotor.attach(9);    //pin de conexión del servo
  miMotor.write(180);
  pinMode(4, INPUT);  // sensor de sonido
  Serial.begin(9600);
  digitalWrite(10, LOW);  //pago LED
  miMotor.write(180);  //muevo la plataforma para colocar la bola
  delay(5000);
  digitalWrite(5, HIGH);  //activa el electroimán, sujeta la bola
  delay(1000);
  miMotor.write(20);     //retira la plataforma
  delay(500);            // necesario para que actúe correctamente el imán
  digitalWrite(5, LOW);  //cae la bola
  // ahora nada más desactivar el electroimán suelto la bola
  // este punto garantiza que en t = 0, v0 = 0
  tiempo_inicial = millis();  // nada más desactivar el electroimán
}
void loop() {
  impacto = digitalRead(4);
  if (impacto)  //se activa el sensor de sonido: la bola ha llegado a la base
  {
    tiempo_final = millis();
    digitalWrite(10, HIGH);  // señal de activación del sensor, fin medida
    impresion = 1;           //bandera que permite hacer una única impresión de los datos
  }
  // este código sucede solo si el sensor se activa
  if (impresion) {
    miMotor.write(180);  // sitúo la plataforma en su posición original
    t = (tiempo_final - tiempo_inicial) / 1000.;
    d = distancia(3, 2) / 100;
    Serial.println(t);  // a efectos de control
    Serial.println(d);  // a efectos de control
    Serial.println(tiempo_inicial);
    Serial.println(tiempo_final);
    Serial.print("g= ");
    Serial.println(2 * d / (t * t));
    delay(500);
    impresion = 0;  //se resetea la bandera
  }
}
//subprograma clásico para el sensor de distancia
float distancia(int disparador, int eco) {
  long duracion, distancia;
  digitalWrite(disparador, LOW);
  delayMicroseconds(2);
  digitalWrite(disparador, HIGH);
  delayMicroseconds(10);
  digitalWrite(disparador, LOW);
  duracion = pulseIn(eco, HIGH);
  distancia = duracion / 2 / 29.1;
  return distancia;
}

Obteniendo valores

Con todo preparado, obtuvimos una serie de 10 mediciones

Datos12345
t (s)0,2360,2370,2370,2360,236
Y (m)0,270,270,260,270,26
g (m/s2)9,709,619,269,709,34
Datos678910
t (s)0,2370.2360.2360.2360.236
Y (m)0.260,270,260,280,27
g (m/s2)9,269,709,3410,059,70

La Y se ha medido con el sensor de ultrasonidos, el tiempo se ha obtenido de la placa y el valor de g se ha calculado con la ecuación (2).

Se deja como tarea realizar un estudio estadístico simple de los datos obtenidos.

Una interesante mejora

Es un poco pesado el tener que conectar permanentemente el microcontrolador al portátil para poder leer los datos por el puerto serie. Nada mejor que utilizar una pantalla LCD para que podamos leer directamente los datos sin estar conectados.

Y el resultado definitivo, con varias mediciones, podéis verlo en el siguiente vídeo, que cierra esta entrada:

Materiales necesarios

En este apartado únicamente pondré los elementos propios de la placa arduino y sus componentes. El montaje mecánico lo dejo a la imaginación de cada cual. Como podéis ver, no es imprescindible que sea con piezas tipo lego, aunque puede facilitar la labor.

El sistema más complicado es el giro del servo. Se puede prescindir de él, basta poner un aviso con un LED que te informe de que puedes colocar la bola en el electroimán, dar un retardo suficiente y dejarla caer. Tampoco es imprescindible el sensor de ultrasonidos, si el experimento (como es el caso) tiene una altura definida. Esta altura habrá que incluir en el programa como dato fijo.

Materiales (con enlaces de afiliado):

  • Arduino UNO R3
  • Shield arduino UNO (no es imprescindible, se puede cablear directamente usando cables apropiados)
  • Sensor de distancia HC-SR04, en este enlace hay 5 unidades y varios cables
  • Servo de posición (3 unidades, siempre viene bien tener unidades de más)
  • Pantalla LCD con interfaz I2C, el interfaz I2C es imprescindible para ahorrar cables y pines. Recordad que en la versión que he puesto (del programa) utilizamos el puerto serie, no usamos la pantalla, aunque eso obliga a tener conectada la placa a arduino.
  • sensor de sonido, imprescindible para medir con precisión el tiempo (por lo menos en la solución que he propuesto)
  • electroimán. No he visto un relé similar al que yo utilicé (desmonté uno que tenía muchos años), sí que he visto este electroimán para arduino que se se podría utilizar. Ahora bien, he visto que el consumo es relativamente elevado (350 mA). Si no fuera suficiente habría que incorporar una fuente externa al montaje, lo que no es difícil pero complicaría el cableado.
  • Transistor 2N2222, necesario para alimentar el electroimán desde la placa y poder controlar su activación y desactivación
  • Diodo para proteger el circuito (a colocar en la bobina con los terminales en sentido contrario)

En resumen, componentes electrónicos imprescindibles: solo la placa de arduino, el sensor de sonido, el electroimán, diodo y transistor.

(Fotografía de portada: la imagen que encabeza este post ha sido generada mediante inteligencia artificial, bajo mis instrucciones. He usado Image Creator de Microsoft Bing)