miércoles, 1 de agosto de 2012

Como trucar servomotores paso a paso

Generalmente los servomotores giran 180º el objetivo con este artículo es enseñar como se puede hacer girar 360º el servomotor. Trucando los servomotores vamos a hacer un vehículo aunque eso lo comentaremos en otro artículo más adelante. Os dejo una foto de mi primer prototipo aunque más adelante evolucionó en un vehículo simple para Arduino.




Alguno se preguntará ¿para que quiero hacer eso si con un motor de corriente continua se puede hacer?. Las ventajas de trucar un servomotor respecto respecto a un motor dc son:
  • No se necesita montar un circuito de potencia para alimentar el servo ya que lo trae internamente.
  • Es muy barato los de tipo 9g rondan los 2 euros.
  • El servomotor tiene su propia estructura para amarrarlo a cualquier chasis
  • Los servomotores suelen venderlos con accesorios para poder amarrar elementos al eje.
Como no todo son cosas buenas tiene alguna pega que hay que tener en cuenta.
  • Trucar los servos no es complicado pero hay que hacerlo con cuidado ya que todo es muy pequeño.
  • Los motores giran 360º pero no van a grandes velocidades.

Características del servomotor


La principal característica de un servomotor sin trucar es que se puede controlar el ángulo de giro de su eje entre 0º y 180º. El servomotor en su interior tiene un motor dc normal, una circuitería que controla la posición del eje del servomotor y engranajes para disminuir la velocidad de giro del motor.


Generalmente suelen tener 3 elementos que hacen que solo giren 180º:
  • La circuitería que controla que no gire más de 180º, corrigiendo automáticamente los posibles desvíos.
  • Un potenciómetro como eje que no puede gira una vuelta completa. (algunos potenciómetros si giran 360º).
  • Un tope mecánico en los dientes de los engranajes que imposibilita que gire completamente el engranaje.
Ya tenemos una idea de lo que tenemos entre manos, pero la primera duda suele ser, ¿Donde compro un servomotor? Como busques en una tienda convencional sale caro, como poco 3 o 4 veces más caro. Yo todo el desarrollo lo he hecho con este servomotor TowerPro SG90. Es un poco carito por lo que los siguientes los compré en ebay mucho más baratos simplemente buscando servo 9g ojo!! marca que te busque en todo el mundo que los chinos son los baratos ;) yo no suelo pujar y voy directamente a los "compralo ya" o si voy a comprar unos cuantos, le pido un precio a alguno de los vendedores que suelen estar encantados de vender y contestan siempre.

Trucar servomotor


Una vez que tengamos algún servo 9g para trucarlos hay que modificar los 3 elementos que hacen que solo gire 180º comentados anteriormente, como se muestra a continuación:

Paso 1: Cortar la pestaña del engranaje

Hay que cotar con un cutter las dos pegatinas que trae el servo (una a cada lado), para luego poder separar con facilidad la carcasa. Otra posibilidad es quitar la pegatina, según lo pegadas que estén elijo uno o lo otro.

A continuación soltamos los 4 tornillos que trae con un destornillador adecuado para que no se estropeen las cabezas de los tornillos. Hay que tener cuidado porque la rosca es la propia carcasa y si lo forzamos se puede dañar la rosca.


Una vez desenroscados los 4 tornillos, separamos la tapa que protege los engranajes del cuerpo del servo. Sacamos el engranaje del eje, como suele estar duro hay que hacer fuerza pero sin pasarse para que no salga todo volando.


Separamos el engranaje que trae la pestaña que bloquea el giro de 360º y cortamos con un cutter la pestaña con mucho cuidado de no dañar los dientes del engranaje.



Paso 2: Romper el tope del potenciometro

Hay que sacar todos los engranajes y dejar el eje del potenciómetro a la vista. Este servo tiene un potenciómetro que no gira los 360º porque tiene un tope mecánico, en algún otro servo he visto que no trae este tope. No se aprecia muy bien en la foto pero la base el eje del potenciómetro tiene una arandela fina para que haga tope en la carcasa del potenciómetro y no gire más de 180º. Con unas tijeras, una punta y unos alicates de punta fina hay que ir cortando y quitando la arandela fina hasta que deje girar los 360º al potenciómetro en los dos sentidos.


Después montamos todos los engranajes en el orden que le corresponde y le ponemos la tapa para protegerlos.

Paso 3: Trucar sistema de control

Sacamos completamente los 4 tornillos y separamos la tapa trasera del cuerpo. De esta manera tendremos acceso a la placa de control de giro y al potenciómetro (por ahora no sacaremos la tapa de los engranajes). Sacamos la tarjeta de control de giro y comprobamos que hay 2 cables que van al motor de continua y otros 3 al potenciómetro.


Cuidado con la manipulación de estos cables si se les mueve mucho se suelen cortar los hilos de cobre sobre todo los que están soldados a la placa. En mi caso los cables eran de diferentes colores por lo que es más fácil saber cual es cual pero por ahorrar muchas veces suelen ser todos los cables rojos. En este punto hay que sacar una foto porque algún cable (si no son 2 o 3) se nos soltará por descuido y la foto nos ayudará a volver a montarlo.

Ahora lo que tenemos que hacer es sustituir el potenciómetro por 2 resistencias del mismo valor. El valor de la resistencia no importa cual sea (yo he usado de 3300 ohm) pero las dos resistencias tienen que tener el mismo valor. Mis resistencias tienen una tolerancia del + - 5% por lo que su valor oscilará entre 3135 ohms y 3465 ohms. Por ese motivo suelo usar resistencias del 1% de tolerancia. Para encontrar dos resistencias iguales mido las resistencias con el polímetro, esto es fundamental para conseguir parar el servomotor por software. A la derecha tenemos el esquema del potenciómetro y a la izquierda su sustitución por las 2 resistencias que tenemos que hacer.


Al sustituir el potenciómetro por 2 resistencias iguales, engañamos al potenciómetro haciéndole creen que siempre está el potenciómetro girado a 90º.

Al soltar los 3 cables del potenciómetro hay que fijarse cual de los cables esta conectado a la pata del centro del potenciómetro. Ese cable tendrá que conectarse a la unión de las 2 resistencias. A mi me gusta añadirle cable termorretractil para proteger el circuito de posibles cortocircuitos, aunque le da más volumen y se complica luego meterlo todo en la cajita del servo.



Algunas recomendaciones:
  • Usa resistencias pequeñas de 1/4 wattios como mucho.
  • Usa estaño con plomo sino te va a costar mucho.
  • Marca con algo el cable que va al centro del potenciometro.
  • Usa cable termorretractil para que no se produzcan cortos al darle marcha.
  • Manipula lo mínimo posible los cables para que no se te suelten.
  • Agranda con unos alicates el termorretractil que une las resistencias (mira la foto).
  • Paciencia porque este paso cuesta horrores la primera vez.

Una vez soldadas las resistencias a los 3 cables, con un mechero se calienta el cable termorretractil, contrayéndose y quedando protegidas las soldaduras. Ahora hay que meter todo en el minúsculo espacio que hay en la caja del servo. Para hacer un poco de sitio suelo cortar las 3 patas del potenciómetro que no sirven para nada.


Ahora solo falta montarlo todo y cerrar la tapa. Entra muy justo y hace falta maña y un poco de fuerza para poder volver a montarlo todo. Los cuatro tornillos van a entrar a presión por ese motivo es importante al soltarlos no romper la rosca. Es muy posible que en este proceso se vayan soltando las soldaduras de los cables con la placa o con el motor dc, por lo que tendremos que reacerlo. Este paso le produce frustración a más de uno.

Una vez que hemos conseguido roscar y cerrar la tapa del servomotor completamente hay que ver si el servo gira en los dos sentidos continuamente, porque sino habrá que soltar y comprobar las soldaduras.

Para comprobar si funciona yo uso el microcontrolador Arduino UNO cargándole el sketch Sweep 

#include <Servo.h> 
 
Servo myservo; 

int pos = 0; 
 
void setup() 
{ 
  myservo.attach(9);   
} 
 
void loop() 
{ 
  for(pos = 0; pos < 180; pos += 1)   
  {                                  
    myservo.write(pos);              
    delay(15);                       
  } 
  for(pos = 180; pos>=1; pos-=1)      
  {                                
    myservo.write(pos);              
    delay(15);                      
  } 
} 

Mediante este programa el servo tiene que girar un rato en una dirección luego se desacelerará hasta pararse y volverá a girar hacia el otro lado. Como solo es para comprobar que funciona se puede ajustar el tiempo de los delay para  que no vaya muy rápido, ni sea muy lento y aburrido.

Un alumno ha hecho un video comentando todos los pasos, los comentarios están en euskera, si puedo más adelante lo traduciré pero hasta en verano ando un poco liado ;)


6 comentarios:

  1. Hola, muy bueno tu blog, he hecho esto con un servo q tenia en casa y ha "funcionado" pero tengo dudas, bueno el funcionamiento es un poco confuso y la verdad es q puedo hacerlo girar en ambos sentidos pero no se como hacerlo detenerse, podrias explicarme? he intentado sacandolo del ciclo con alguna condicion extra, pero no se detiene.
    bueno saludos

    ResponderEliminar
  2. Lo de pararlo es lo más complicado, sobre todo conseguir que se pare completamente. Creo que lo expliqué aquí:http://elektronikadonbosco.blogspot.com.es/2012/08/vehiculo-simple-para-arduino.html

    Aun y todo resumidamente tienes que buscar el punto de paro en cada servo suele rondar el 90. Yo lo que suelo hacer es enviar ángulos entre 70 y 100 al servo y por serie al pc. Cundo veo que se ha parado miro con que número se ha parado en la pantalla del pc.

    ResponderEliminar
    Respuestas
    1. oooo excelente muchas gracias ya lo estoy checando, le aviso los resultados.

      de nuevo muchas gracias

      Eliminar
    2. Hola, como aporte para nuevas generaciones , lo que se me ocurrio a mi es utilizar la función detach(), que permite "quitar" los pines asignados en tú código , esta función no lleva parámetros , solo utiliza el nombre del objeto (myservo por ejemplo) seguido de la palabra detach, ejemplo: myservo.detach();

      Saludos !

      Eliminar
  3. Hola muy buen blog. Tengo un servo y lo he trucado como se explica pero cuando pongo el programa solo va hacia una dirección no consigo que vaya hacia la otra porque?

    ResponderEliminar
  4. Hola Adai no te sabría decir porque el servomotor sin trucar se desplaza a los 2 lados, por lo que al trucarlo lo único que hacemos es que no tenga fin y vaya en ese sentido sin parar. Yo igual probaría a mirar que las resistencias están bien y hacía un programa en el que solo meto una posición myservo.write(pos); donde pos sería un valor de 0 a 180. Hazlo a mano y mira los resultados, haber si puedes ver que es lo que está pasando. Salu2

    ResponderEliminar