Curso Arduino y robótica: Servomotores – Casos de calibración

Durante este tutorial vamos a mostrar algunos casos que pueden producir algunos errores a la hora de poner en funcionamiento nuestros servomotores.

Es muy posible que nuestros primeros ejercicios no contengan ningún tipo de complejidad y dependerá del tipo de proyecto que queramos poner en marcha. Un servomotor individualmente funcionará tal y como hemos visto en el tutorial anterior, pero a la hora de añadir más motores, observaremos errores de desplazamiento uno respecto de otros, que nos proporcionarán resultados indeseados.

Calibración de posición mecánica

Vamos a abordar el caso de servomotores de posición que vimos anteriormente.

El aspecto más importante para equilibrar la posición de un servomotor es simplemente hacer coincidir el timón o rótula que nos viene con nuestro servomotor con la pieza a la que se va a transmitir su movimiento , no sin antes establecer una referencia.

Siempre que vayamos a instalar un modelo que tenga que girar con respecto a una referencia, tendremos que precargar un programa en el que estableceremos el origen del movimiento y cambiar la posición del timón en esa posición que se corresponderá con el ángulo 0 en adelante hasta cubrir el resto de ángulos.

Tal y como se muestra en la imagen, debemos orientar el ángulo cero del cañon con la horizontal. De esta manera no alcanzará zonas por debajo a las que no debe disparar y a partir de ese valor aumentar el ángulo de giro. También conviene introducir un ángulo tope para no alcanzar valores superiores que no se puede permitir el diseño. Esto suele ocurrir en modelos que hacen presión en esos ángulos de giro.

La mejor manera de calibrar esta posición es; separar el timón del servomotor cuando tengamos la referencia definida y girarlo manualmente hasta su posición correcta.

Calibración de velocidad

La calibración de velocidad es un poco más complicada que la anterior. Ya que los servomotores de rotación continua establecen una conversión en el rango de 0 a 180 grados para la posición, equivalente a una entrada de potencia. La cuestión, es que la misma señal PWM debe permitir movimiento tanto en dirección horaria, como en dirección antihoraria y el sistema de movimiento se define como velocidad máxima cuando se establece el 0 en sentido antihorario, la velocidad máxima en sentido horario para el valor de 180 y parado en el valor medio de 90. De esta manera, los valores intermedios corresponden con un aumento o reducción de la velocidad.

El problema es que para medir la velocidad de giro, necesitaríamos un sensor especial y a diferencia de la posición, nuestros ojos no miden velocidades de forma precisa. Aparentemente podríamos deducir que los valores que separan un sentido de giro de 0 a 90 , evolucionan igual con respecto al sentido contrario 90 a 180 , pero desgraciadamente no es así. Resulta que existe una zona cero que dependiendo del motor, puede estar desplazada desde su referencia de movimiento.

Para eso habría que gastarse un poco más de dinero en motores más fiables.

Calibración de velocidades por Hardware

Si nos fijamos bien, y hemos comprado un servomotor que dispone de un potenciómetro de giro, éste nos permitirá desplazar esa zona de referencia para iniciar el movimiento en la que podrá evolucionar a un giro máximo en sus extremos por igual. Esta es la forma más sencilla y la más conveniente.

Calibración de velocidades por Software

Para calibrar los motores por software, realizaremos un programa que nos permitira almacenar en una variable ésta referencia de la que hablamos y que podremos configurar incluso de forma remota para sistemas más avanzados.

Con el siguiente programa, vamos a realizar una calibración en el que introduciremos un código por el monitor serie seguido de un número.

Para cambiar el parámetro de calibración deberemos escribir CXX, donde XX significa el número que estableceremos como el offset o desvío con respecto a la referencia 0.

Para mover el motor tendremos que escribir MXX, donde XX será el número de grados que queremos que se mueva el motor.

De esta manera observaremos cuando empieza el movimiento, y cuando dejaremos de notar diferencia entre las velocidades a medida que aumentamos el valor de movimiento del motor.


 


#include <Servo.h>

int motor_ref;
int motor_vel;
char mode;

Servo motor;

void setup() {
  Serial.begin(9600);

  motor.attach(10);
  motor_ref = (int)(0);
  motor_vel = (int)(90);
  mode = (char)(('/'));

}

void loop() {
  if (Serial.available()) {
    mode = (Serial.read());
    if (mode == ('C')) {
      motor_ref = ((Serial.readString()).toInt());
      Serial.print("Calibrate:");
      Serial.println(motor_ref);
    }
    if (mode == ('M')) {
      motor_vel = ((Serial.readString()).toInt());
    }
    motor.write((motor_vel + motor_ref));
    Serial.print("Move:");
    Serial.println((motor_vel));
  }

}


Las velocidades máximas hay un punto en el que no aumentan, también lo podemos comprobar a medida que añadimos valores al movimiento del motor por arriba y por debajo de la referencia. Para no engañarnos de que la velocidad aumenta, tiene un tope en ese rango que también dependera de la alimentación en potencia. En este caso alimentamos directamente desde un USB con el ordenador, así que si le ponemos pilas, podremos valorar de nuevo estos máximos y mínimos.

Calibración con varios motores

Cuando tenemos un sistema de dos ruedas, en el que los servomotores pueden ser distintos uno de otro, ocurre que uno de los motores puede correr más rápido que otro aún cuando se le defina el mismo valor para su movimiento, debido al problema anterior de calibración.

El efecto final es que cuando una rueda gira más que otra, el robot empieza a desviarse de su ruta en lugar de seguir una linea recta, tal y como deseamos que haga.

Este es un problema muy común en los coches debido a que los motores no son exactamente iguales. Además cuando instalamos los motores derecha e izquierda, al darle la vuelta con respecto al anterior, el movimiento para avanzar de 0-90 en uno de los motores debe ser el contrario  90-180 para el segundo.

 

Solamente en este momento en el que los dos ceros de referencia de los dos motores estén alineados es cuando podremos empezar a mover los motores en consonancia y el avance de nuestro coche no tenderá a girar.

Se recomienda la creación de una etapa de calibración de cada rueda que podamos modificar en nuestro programa para solucionar este tipo de casos.

 


Una vez completado este tutorial, puedes acceder al siguiente nivel.

 

Los ejercicios de código, proyectos y recursos que desarrollaremos durante el curso se pueden consultar a través de nuestro Github.

Documentacion ZaragozaMakerSpace Github

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

20 + 1 =

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.