Simulando la Rueda de Barlow en Visual Basic 6

 

Cuando una corriente circula de forma perpendicular a un campo magnético se generará una fuerza perpendicular a ambos. En el caso de la rueda de Barlow, se trata de una rueda de metal (usualmente cobre) con un polo de una batería en su eje y el otro dentro de un líquido conductor (usualmente mercurio) que roza el borde de la rueda. Perpendicular al plano de ésta hay un campo magnético generado por dos imanes. La fuerza generada en teoría debería hacer girar la rueda.

La historia real es que se necesitan imanes realmente grandes y una corriente realmente intensa (un par de amperios no bastan) para mover la rueda. Tan fácil de construir no es. A mí me tocó simularla, y aquí voy a decir cómo lo hice.

Todo sobre la Rueda de Barlow está en esta web, también fue de aquí que saqué las ecuaciones para programarla. 

Primero abrimos el Visual Basic y cargamos un proyecto "exe estándar". Luego le añadimos los siguientes componentes:

1 control Shape con la propiedad Shape=3-Circle

2 controles line: Line1 y Line2

1 control Timer. Timer1. Con la propiedad Interval=150

Al control Shape y a las líneas se les pone la propiedad BorderWidth=3

No interesa dónde se las coloque. El resultado debe ser más o menos éste:

Lo que se hace para simular la rueda que gira es jugar con los extremos de las dos líneas (el círculo o Shape1 es inmóvil) dadas por las propiedades x1, y1, x2 e y2.

En Visual Basic, la coordenada "x" aumenta de izquierda a derecha, y la coordenada "y" aumenta de arriba hacia abajo (al revés de los ejes coordenados que se dibujan en las clases de matemáticas). Para ubicar las dos líneas en sus respectivos lugares se debe ubicar el centro de la circunferencia. La posición de ésta dentro del formulario la dan las propiedades "Left" y "Top" que definen las coordenadas x e y de la esquina superior izquierda (el Visual Basic considera a todos los controles Shape dentro de un rectángulo, la esquina superior izquierda da la ubicación de todos los controles en general). Estas coordenadas están en función de la distancia hasta la esquina superior izquierda del formulario. En cambio la posición del formulario está en función de la esquina superior izquierda de la pantalla. Para ubicar las líneas se ingresa el siguiente código:

CentroX y CentroY son variables globales.

Al correr el programa, se verá así:

Line1 es la línea horizontal, Line2 es la vertical. A la hora de hacerlas girar es importante saber cuál es cuál.

El giro de la rueda está determinado por su masa, la fricción y la corriente. En este caso consideré una rueda de aluminio de 15 cm de radio ¿por qué? porque esa fue la rueda que intentamos hacer funcionar en la facultad, al final no nos salió :(

Se deben añadir también las siguientes variables globales:

"theta" y "w" son la posición y la velocidad angular respectivamente. Las ocho variables de las dos líneas siguientes determinarán los extremos de Line1 y Line2. "longitud" es la longitud media de las líneas. "ang" controlará los índices de los vectores w y theta. Sus valores serán calculados con las ecuaciones que gobiernan a la rueda de Barlow.

En "Sub Form Load()" se añade:

Que inicializa las variables. Inicialmente el control Timer1 debe estar desactivado. para activarlo añadimos un control más: un botón "Command1". También dos cajas de texto donde se ingresará el valor de la corriente y el campo magnético. Las cajas de texto las he llamado "corriente" y "campo" respectivamente, y en la propiedad "text" se coloca el valor de cero. Al correr el programa se verá así:

Al hacer click en Command1 se calcularán los valores de w y theta, los cuales están en función del tiempo. El tiempo está representado aquí por el índice "i", por lo que se vuelve discreto, es así como trabaja la computadora:

El radio de la rueda es de 15 cm. Los vectores w y theta tienen solamente 31 elementos. Experimentalmente he comprobado que después de 31 intervalos de 150 segundos la velocidad se hace constante. La velocidad indica los incrementos en la posición angular, y simplemente incrementando el mismo último valor de w se puede simular el giro de la rueda indefinidamente.

Originalmente en el programa puse el cálculo de la longitud de las líneas junto al de las ecuaciones, pero dado que este valor no varía basta calcularlo una vez, por ello en Sub Form_Load(), al final, después de ubicar las líneas en la circunferencia, se añade este código:

Timer1 controlará el giro de las líneas variando su posición en cada intervalo. Las líneas girarán teniendo como eje su punto medio. Lo que hace en realidad el programa es redibujar las líneas en sus nuevas posiciones, determinadas por las coordenadas de sus extremos, las cuales están en función del centro de la circunferencia y el valor de "longitud". En este punto se hace falta un poco de trigonometría:

No se debe olvidar pasar los ángulos a radianes!

Si se desea, se pueden añadir dos botones más: Command2 y Command3 para detener y continuar la simulación, el código es el siguiente:

Y ya arreglando las propiedades "Caption" de los botones, el resultado es éste:

Ya después de esto es sólo arreglare un poco la cara a la simulación. Con otros Shapes se puede dibujar la base y los soportes. A diferencia de la web de donde saqué las ecuaciones, la variación de la velocidad de la rueda no es muy evidente en esta simulación. En realidad el vector de la posición debería ser mucho más largo y el valor Interval del timer bastante más pequeño. A partir de aquí es cuestión de probar un poco.

Se me podría preguntar porqué definí todo un vector para la velocidad cuando en realidad sólo uso el último valor. La simulación que hice originalmente estuvo programada para un curso de la facultad e incluía la gráfica de la velocidad vs. el tiempo usando un control que viene con el Matlab: MWStrip.ocx, el cual desgraciadamente no es gratuito por lo que no pudo ponerlo aquí para bajarlo. Pero para quienes tienen Matlab aquí está la simulación como se vio al final y el código fuente :)