Los motores presentan un máximo y mínimo de posible velocidad. Pero muchas veces nos encontramos en situaciones en las que necesitamos más potencia o más velocidad de la que nuestros motores pueden ofrecer. Una solución poco práctica es utilizar diferentes motores, pero esto exige complicar la mecánica excesivamente. Una posible solución es hacer uso de una caja de cambios. Exploremos cómo realizar un cambio de marchas automático NXT en LeJOS.
Las cajas de cambios permiten disponer de una velocidad de giro diferente en las ruedas del vehículo pese a mantener la misma velocidad en el motor. Consecuencia de ello es la modificación de la relación existente entre la velocidad y el par del motor. Esta relación es inversamente proporcional, es decir, si disminuimos la velocidad, aumentamos el par, lo cual viene muy bien para poner el vehículo en marcha, y cuando ya no necesitamos tanta potencia debido a la inercia, podemos aumentar considerablemente la velocidad.
Las cajas de cambios están formadas por un árbol primario que recibe el giro del motor, un árbol intermedio o intermediario, formado por engranajes de diferentes tamaños y que se desplaza para engranar el árbol primario con el árbol secundario, formado también por engranajes diferentes y que transmite el movimiento al árbol de transmisión del vehículo, y éste a las ruedas. La diferente relación entre los engranajes del intermediario y del árbol secundario es la que causa la variación de velocidad y par.
Hemos realizado un pequeño experimento con una caja de cambios de dos marchas. Y lo hemos acoplado a un vehículo sencillo. Uno de los motores se emplea en tracción. El segundo motor es el encargado de gestionar la relación de cambio entre el árbol primario y el secundario, para lo que desplaza el árbol de engranajes intermedio.
Para probar el vehículo y aprovechando nuestros recientes artículos relacionados con el giróscopo decidimos hacer un programa que cambia automáticamente de marchas según la inclinación que detecte. El objetivo es emular lo que hacemos nosotros manualmente cuando subimos una cuesta con el coche: reducir a una marcha más corta para ganar potencia, y alargarla cuando necesitamos más velocidad. Por tanto el vehículo irá en marcha rápida en llano, mientras que cambiará a la marcha corta pero más potente en las cuestas. Puesto que el programa reviste de cierta complejidad, hemos decidido programarlo en LeJOS (la plataforma Java para Mindstorms). Se ha programado en dos clases diferentes, la clase Principal (que es la que ejecutará el NXT), y la clase Marchas. El código es el siguiente:
import lejos.nxt.Button;
import lejos.nxt.LCD;
import lejos.nxt.Motor;
import lejos.nxt.SensorPort;
import lejos.nxt.addon.GyroSensor;
public class Principal {
/**
* @param args
*/
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
GyroSensor gyro = new GyroSensor(SensorPort.S4);
Marchas m = new Marchas();
float med = 0;
int ginicial, gactual, nummarcha = 1;
for(int i = 0; i <= 9; i++){
med = med + gyro.readValue();
}
med = med / 10;
med = med + 600;
gyro.setOffset((int)med);
ginicial = gyro.readValue();
LCD.drawInt(ginicial, 6, 4);
Motor.A.backward();
m.marchaUp(Motor.C);
nummarcha++;
while(!Button.ESCAPE.isPressed()){
gactual = gyro.readValue();
LCD.drawInt(gactual, 6, 4);
if ((gactual < (ginicial – 30)) || (gactual > (ginicial + 30))){
if (nummarcha == 1){
m.marchaUp(Motor.C);
nummarcha++;
}else{
m.marchaDown(Motor.C);
nummarcha–;
}
}
}
}
}
Y éste para la clase Marchas:
import lejos.nxt.Motor;
public class Marchas {
public void marchaUp(Motor m1) throws Exception{
m1.rotateTo(m1.getTachoCount() + 52);
Thread.sleep(500);
}
public void marchaDown(Motor m1) throws Exception{
m1.rotateTo(m1.getTachoCount() – 58);
Thread.sleep(500);
}
}
La primera función que realiza el programa es calibrar el giróscopo, y a continuación pone el motor en marcha y cambiar a marcha rápida, puesto que empezamos en llano. En cuanto detecta un cambio en el giróscopo (lo que significa un desnivel) cambia a la marcha corta. Podéis ver en estos vídeos el funcionamiento del vehículo y de la caja de cambios: