Escena clasica del taller: el estudiante escribe un buen codigo, llama a goForward() y espera que el robot vaya recto como una flecha. En cuanto arranca, curva a izquierda o derecha como si una pierna fuera mas corta.
El codigo esta bien. Las ruedas no se traban. Entonces, que pasa?
La verdad dura: ningun par de motores es gemelo
Es la pelea entre ordenes digitales perfectas y una fisica imperfecta. En el codigo das el mismo PWM a ambos motores (ejemplo: 255). En el mundo real, ni dos motores DC de la misma fabrica son identicos.
- Un bobinado de cobre puede ir un milimetro mas apretado
- La otra caja de engranajes puede llevar un poco mas de grasa
- La friccion de una rueda o el contacto con el suelo puede diferir
Les dices a ambos que corran a 100; uno corre a 100 y el otro a 95. El robot gira hacia el lado mas lento.
El truco: doma el hardware con software
Un buen robotista acepta el fallo del hardware y lo corrige con software. Eso es la calibracion de motores.
1) No vayas a tope
No des el valor maximo directo (ejemplo: 255). Deja margen (ejemplo: 200) para poder bajar o subir un lado.
2) Usa variables de velocidad
int velIzq = 200;
int velDer = 200;
3) Ajuste fino por prueba
Pon el robot en suelo plano y avanza.
- Tira a la izquierda: El motor derecho va mas rapido. Baja un poco
velDer(ejemplo: 190). - Tira a la derecha: El motor izquierdo va mas rapido. Baja un poco
velIzq.
Ajusta a pasos pequenos hasta que vaya recto. A veces bastan 5 unidades.
void goForward() {
motorIzq(velIzq);
motorDer(velDer);
}
Nota de taller: Calibra sobre el suelo de la pista de competicion. Otra friccion cambia el resultado. Con bateria baja el desvio puede aumentar; prueba tambien con bateria llena.
Resumen
Hacer un robot no es solo juntar piezas; es lograr que trabajen juntas. Cubre el fallo del motor con software. Velocidades izquierda/derecha correctas = robot que va recto.