Trucar servo a rotación continua

Los servos de modelismo son sumamente útiles a la hora de dotar de movimiento a nuestros proyectos, son económicos y fáciles de utilizar. Se pueden encontrar en un amplio rango de tamaños, desde los más pequeños con un peso de 1g y un torque de unos gramos a monstruos de 100Kg de torque.

Una de sus características más interesantes es su gran desmultiplicación en su juego de engranajes, motivo por el cual pueden, con un motor muy pequeño, mover cargas muy pesadas.

Comercialmente están disponibles en tres versiones: normales (con una rotación de 180º), rotativos (limitados a unas pocas vueltas) y de rotación continua. Estos últimos son interesantes porque añaden a la característica de poder mover cargas pesadas la de poder girar de forma continua en un sentido u otro, lo que los hace ideales para utilizarlos como elementos de tracción.

Se pueden comprar, evidentemente, servos de rotación continua y los podemos añadir a nuestro proyecto para que muevan unas ruedas y formar un sencillo vehículo autónomo o un robot.

Pero la verdad es que cualquier servo puede trabajar como servo de rotación continua con unas pocas modificaciones, es más, yo recomiendo el uso de servos normales modificados por dos motivos: son más baratos y trucándolos aprendemos.

Básicamente se pueden modificar de dos formas muy parecidas y aquí las vamos a ver las dos. Empezaremos por coger un servo, yo para las ilustraciones he utilizados servos de 9 gramos.

servo 9 gr arduino ardutienda
servo 9 gr

Procedemos a quitarle los tornillos que sujetan la tapa superior y la inferior, los guardamos con cuidado para que no se nos pierdan.

servo abierto arduino ardutienda
servo abierto

Queda así, con los engranajes al aire y la electrónica también expuesta. Vamos a ver los engranajes con más detalle:

detalle engranajes arduino ardutiena servo
detalle engranajes

Estos pequeños engranajes tienen una relación de reducción de aproximadamente 200:1, lo que significa que por cada 200 vueltas que da el motor el último de todos los engranajes sólo da una, este es el secreto de su gran par de giro. Y sin perder velocidad en la salida, pues los motores DC consiguen altas rpm cuanto más pequeños son y, aunque no lo he medido, el motor que hay dentro de este pequeño servo puede superar perfectamente las 20.000 rpm.

engranajes fuera servo arduino ardutienda
engranajes fuera

Extraemos toda la piñonería con cuidado y la guardamos. Un truco: podemos disponer los piñones en un orden similar al que les corresponde en el montaje, de modo que cuando los tengamos que devolver a su sitio recordemos con facilidad donde va cada uno y en que posición, también puede ser muy útil dibujar un esquema.

tope mecánico arduino servo ardutienda
tope mecánico

Aquí se ve uno de los motivos por los que un servo normal no puede rotar mas de 180º, tiene un tope mecánico en el engranaje de salida. Con unos alicates de corte y una lima lo eliminamos para que este piñón pueda girar libremente.

Ahora viene una parte que variará según servos: en estos modelos pequeños el potenciómetro está unido al engranaje de salida mediante un rebaje en su eje. En modelos más grandes el potenciómetro puede tener su propio piñón separado del resto.

eje del potenciometro arduino servo ardutienda
eje del potenciómetro

Nos interesa que el engranaje de salida pueda girar libremente sobre el eje del potenciómetro, así que dejaremos este como está y modificaremos el engranaje. Es fácil:

broca engranaje servo arduino ardutienda
broca en el engranaje de salida

El engranaje se mantiene fijo sobre el eje simplemente por presión (es un poco más estrecho que el eje) y por el rebaje del eje que en el interior del piñón tiene su correspondiente forma para que encaje. Pasamos una broca de 1’5mm por el piñón (el eje tiene un diámetro de 1’3mm) y todo solucionado, el piñón girará libremente.

Ahora es cuando nos tenemos que decidir por un método u otro, el del loctite o el de las resistencias.

Método del loctite

Lo veremos primero por que es el más sencillo… en teoría.

potenciometro servo arduino ardutienda
vista del potenciómetro

Como vemos en la foto del potenciómetro salen tres cables: uno negro, uno blanco en el centro y uno rojo. Cogeremos un multímetro y nos armaremos de paciencia, mediremos la resistencia entre el cable negro y el blanco y luego la compararemos con la resistencia entre el cable blando y el rojo, es decir, un extremo con el centro y el centro con el otro extremo del potenciómetro. Es un potenciómetro normal de 5K Ohms, por lo que el valor central tiene que ser de 2500 Ohms.

Cuando el valor de ambos extremos sea idéntico, repito IDÉNTICO, podremos darle la vuelta al potenciómetro.

potenciometro servo arduino ardutienda
vista superior del potenciómetro

Y con mucho cuidado añadiremos loctite, o cualquier otro pegamento con base de cianoacrilato, al mecanismo del potenciómetro para fijarlo e impedir que gire.

Lo volvemos a montar y ya podemos probar:

Método de las resistencias

Partiendo de las mismas modificaciones mecánicas hechas al principio este otro método pasa por anular el potenciómetro y sustituirlo por dos resistencias iguales.

Cortamos los cables del potenciómetro y soldamos dos resistencias del mismo valor en la placa de control del servo.

resistencias servo arduino ardutienda
resistencias soldadas a la placa de control

Aquí lo he hecho a lo bestia para que se vea bien. Posteriormente corté las patas de las resistencias y lo volví a soldar todo para que se pudiese meter dentro de la carcasa del servo.

El único punto importante de este método es que las resistencias tienen que tener el mismo valor, por que el circuito de control del servo compara la resistencia a uno y otro lado y hace que el motor gire en un sentido u otro y a más o menos velocidad según la diferencia entre los dos valores leídos.Yo utilicé resistencias de 2K Ohms con una tolerancia del 1% y el resultado ha sido perfecto.

Conclusión:

El método del loctite es sencillo pero el calibrado del potenciómetro en su punto central es muy delicado, el más mínimo error hace que el servo gire despacio sin detenerse nunca.

El método de las resistencias es un poquito más laborioso, hay que hacer tres soldaduras, pero el resultado es excelente. Como se puede apreciar en el vídeo parar el servo con el potenciómetro conectado a Arduino y el ejemplo Knob es difícil, pero su comportamiento por software es impecable.

Otra posible modificación sería cortar los cables del potenciómetro interno e instalar un potenciómetro externo para centrar el servo mecánicamente, aunque personalmente lo veo poco práctico quizá alguien lo prefiera.

Aclaración:

En el vídeo se ve que el servo está conectado directamente a un Sensor Shield de Tinker. Esto es posible por que yo he modificado el orden de los cables en el conector del servo para hacerlo compatible con el Sensor Shield de Tinker.

La disposición normal de los cables de un servo es distinta al sistema Tinker y no se puede conectar directamente un servo a una Sensor Shield.

La modificación es sencilla:

conector servo arduino tincker ardutienda
conector servo modificado

Basta con invertir los cables positivo y señal ( rojo y naranja en este caso, rojo y blanco para otros cables) y tener cuidado de conectar el lado que se ve en la foto hacia la lengüeta del conector en el Sensor Shield, esto último es de vital importancia, ya que si lo hacemos al revés invertiremos la alimentación de la placa de control del servo y eso no es nada bueno para el servo.


Si este tutorial te ha sido de utilidad puedes considerar hacerme un donativo, por pequeño que sea estarás contribuyendo a que siga con esta labor.


6 comentarios en “Trucar servo a rotación continua”

  1. Soy nuevo, y hasta ahora tengo 0 idea del mundo Arduino.
    Me resulta interesante el hecho de poder controlar un pequeño motor como este.
    Espero encontrar mas guias como estas, para usuarios nulos, como yo en tu sitio.

    Gracias por compartir!

  2. Hola. Fantástica web!!!!

    Yo también soy novato en esto del Arduino. He probado el método de las resistencias y funciona perfecto. Al principio no conseguía detenerlo porque se conoce que las resistencias no son exactamente iguales (5% tolerancia) pero he conseguido averiguar el valor del ángulo correspondiente al cero (con un potenciómetro y salida al monitor serial) y va perfecto.

    Muchas gracias!!!!

  3. Respecto del comentario de Juankar, estaba pensando justo en eso. Si las resistencias no son iguales o si pegamos el potenciómetro levemente asimétrico, solo tenemos que buscar el valor que corresponde a el servo detenido y usar ese como “0” en nuestro código. Lo malo es que los servos no son intercambiables ya que cada uno tendrá un “0” distinto, pero funciona, no?

Deja un comentario

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