Menu
in

Servomotores: El primer paso hacia tu Robot

Estos dispositivos son considerados una de las materias primas en el diseño y la construcción de los robots. Si combinamos y administramos los movimientos en un montaje mecánico adecuado, un grupo variable de servomotores puede dar motricidad y locomoción a sistemas controlados de manera local o remota. Desde pequeñas aplicaciones didácticas hasta el más complejo diseño robótico. Los límites son tu imaginación y tus ganas de aprender.

Dadme un punto de apoyo y moveré al mundo” habría dicho Arquímedes de Siracusa, arrastrado quizá por un entusiasmo desmedido ante su descubrimiento de la ley de la palanca. A partir de allí comienza la historia de las máquinas simples, y el dispositivo que veremos y aplicaremos hoy en este artículo es un buen ejemplo de ello.

Un servomotor es básicamente un actuador mecánico basado en un motor y un conjunto de engranajes que permiten multiplicar el torque del sistema final, el cual posee elementos de control para monitorear de manera constante la posición de un elemento mecánico que será el enlace con el mundo exterior. Es decir, ante una acción inducida electrónicamente a un servomotor, obtendremos por resultado una respuesta mecánica controlada. Por ejemplo, los motores que forman parte de una impresora, junto a los sistemas de control de avance o retroceso del papel, forman un servomotor.

Las aplicaciones de estos sistemas esclavos se pueden observar mayormente en aeromodelismo y robótica, pero no son exclusivos de estos usos. Cualquier sistema que requiera un posicionamiento mecánico preciso y controlado dependerá de un servosistema o servomecanismo, actuado, por supuesto, por un servomotor. El zoom de una cámara, el autoenfoque de un conjunto óptico, un sistema de movilización de cámaras de vigilancia y hasta las puertas automáticas de un ascensor son sencillos ejemplos de su aplicación.

El motor posee la característica de girar a una buena velocidad, la cual disminuye por los juegos de engranajes de la caja reductora que aprovechan esta velocidad para transformarla en fuerza de trabajo. Al girar el último engranaje acoplado al eje de salida obtenemos una velocidad notablemente reducida, a pesar de que, dentro del sistema, el motor está girando a altas velocidades.

Además, en esta última rueda de acoplamiento encontraremos topes o límites de recorrido para entregarnos en la salida final un giro de 180° del brazo actuador. En la mayoría de los servomotores, este desplazamiento angular es “copiado” por un potenciómetro incorporado al sistema de control y solidario en forma mecánica al eje externo. Este sensor resistivo se encargará de informarle al sistema la posición que posee el actuador exterior para así controlar con exactitud que la instrucción de posicionamiento enviada esté siendo ejecutada fielmente.

Conectando un servo

Las conexiones son muy sencillas y se basan en una normativa de colores muy elementales que involucran al Rojo como positivo de la alimentación principal, junto a otro cable que puede ser de color Negro o Marrón y que, por lógica, podemos deducir que se trata del negativo de alimentación. Un tercer cable, correspondiente al control de posicionamiento del actuador mecánico, es Amarillo o Blanco. En la primera imagen se puede apreciar el conjunto de colores Rojo – Negro y Amarillo para la conexión en servomotores de la marca HITEC.

La tensión de trabajo de los servomotores suele estar comprendida entre los 3 y los 7 Volts, siendo 5 Volts la tensión que se utiliza en la mayoría de las aplicaciones fijas donde interviene una fuente de alimentación conectada a la red de energía domiciliaria, y 6 Volts para los casos de alimentación a baterías cuando se trata de equipos móviles. En todos los casos, siempre se requiere de una señal de control de 5 Volts de amplitud.

La señal de control del servo

Como mencionamos al principio, los servomotores se controlan mediante impulsos de ancho variable que deben refrescarse periódicamente. Esto significa que si dejamos de enviar la señal de control en el tiempo en el que el servomotor lo necesita, éste (a pesar de estar energizado) dejará de mantenerse en la posición preestablecida y adoptará cualquier orientación regida por el esfuerzo al que esté sometido. Es decir, si no mantenemos la señal de control en forma efectiva todo el tiempo que sea necesario, el sistema quedará a merced de las fuerzas externas a la que sea sometido. Por ejemplo, un brazo de palanca dejará de sostener un objeto y se dejará caer todo el trayecto mecánico que pueda recorrer, o un sistema erguido en vertical se caerá hacia atrás o hacia adelante al momento en el que el servomotor deje de “sostener” la aplicación en la posición preestablecida.

Para bloquear al servomotor en una posición es necesario, entonces, enviarle continuamente la señal con la posición deseada. De esta forma, el sistema de control seguirá operando y el servo conservará su posición y se resistirá a las fuerzas externas que intenten cambiarlo de posición.

El refresco se realiza habitualmente con una frecuencia de 50 veces por segundo, pero es normal y efectivo trabajar entre los 10 y los 30 milisegundos, tal como muestra el diagrama. Por otro lado, el ancho del impulso, es decir, su tiempo de duración, dará la posición u orientación del actuador mecánico. En este punto en particular, es decir, cuando se está constantemente atento a enviar un impulso de duración exacta para evitar oscilaciones mecánicas indeseadas, se centra la complejidad y la cautela al trabajar con servomotores.

Si para el control de uno de estos sistemas utilizamos un microcontrolador que además de actuar sobre el servomotor deba realizar otras actividades, se nos planteará siempre el temor de no lograr actuar en los tiempos requeridos por estos sistemas. Sin embargo, la clave de un funcionamiento satisfactorio y de una realización sin mayores complicaciones se basa en la utilización de un cristal de alta frecuencia (20 Mhz) para poder ejecutar todo el trabajo adicional que sea necesario hasta que llegue el momento de refrescar nuevamente el impulso de control del servomotor. Esto debe ir acompañado, por supuesto, de la observación cuidadosa del diagrama de tiempos de nuestra aplicación.

Moviendo un servo en BASIC

Este trabajo es extremadamente sencillo de realizar en este lenguaje. Bastará con escribir la instrucción SERVO Pin, Posición y el sistema se posicionará de manera automática con la orientación indicada. Pin corresponderá a la I/O digital del microcontrolador donde conectaremos la señal de control requerida por el servomotor, mientras que Posición corresponderá a una variable del tipo WORD, siendo valores habituales para esta variable los siguientes: 1500 para el centro, 500 para el extremo de inicio y 2500 para el extremo de final de carrera del actuador.

Por ejemplo, un listado muy sencillo sería el siguiente:

A partir de un simple listado como el anterior, podemos controlar cámaras de vigilancia, llaves de paso de fluidos, cambios de vías en ferromodelismo y un sinfín de aplicaciones. Incrementando o decrementando la variable POS, según el pulsador que actuemos, lograremos un movimiento hacia un lado o hacia el otro, manteniendo los límites expresados en el párrafo anterior. Por último, tenemos un tercer pulsador que nos permite reiniciar rápidamente el movimiento recuperando la posición central del actuador.

En los videos de demostración veremos en acción la instrucción SERVO. La primer reforma que se nos viene a la mente es la de acelerar el movimiento, reemplazando las instrucciones INC y DEC, que varían de a una unidad, por otras variantes más rápidas como POS = POS + 5, por citar un ejemplo.

Tu sistema de vigilancia comienza aquí

Movilizar dos servomotores nos permitirá lograr una prestación de movimientos muy importante, ya que sabiendo combinar mecánicamente los dos dispositivos intervinientes, el recorrido pasará de una trayectoria lineal a otra 2D (dos dimensiones), con las grandes ventajas que ello significa.

En la imagen puedes apreciar que el servo inferior (o de azimut) está fijo y asentado a una base y que moviliza un pequeño trozo de aluminio en forma de “L”. Este primer servo nos dará la movilidad en el eje cartesiano “x”, entregándonos un paneo de 180° a izquierda y derecha.

Luego continúa hacia arriba una sección en forma de “U” recta a la que se asegura el brazo de palanca del segundo servo, el cual, gracias a esta disposición, nos dará el movimiento sobre el eje cartesiano “y”, aportando al sistema el ajuste de altura, también conocido como elevación o tilt. El detalle a destacar en este desarrollo constructivo lo ofrece este segundo servo que, en lugar de movilizar su brazo de palanca para accionar los desplazamientos, es el propio cuerpo del servo el que se moviliza mientras el brazo actuador permanece fijamente atornillado a la estructura inferior.

Para comprender mejor la complejidad de movimiento que posee el sistema y el alcance que puede tener dentro de un sistema de cámaras de vigilancia o de simple observación, te recomendamos ver el siguiente video donde podrás comprender el sistema móvil empleado y, a su vez, podrás imaginar y desarrollar tus propios arreglos mecánicos:

Combinando de forma apropiada los movimientos de los actuadotes de los servos, seguramente podrás lograr un mejor sistema del que te mostramos o, tal vez, otros diseños más complejos como pueden ser brazos robóticos, articulaciones para hacer caminar un androide bípedo o algún hexápodo, que siempre son tan interesantes de desarrollar por el gran desafío que significa programar una rutina que logre coordinar el movimiento de patas, las que seguramente involucrarán a varios servos y ninguna de ellas se deberá tropezar con la otra para lograr que nuestro “insecto” camine, es decir, se traslade de un lugar a otro como si fuera un insecto real.

Programando servos con BASIC

En el desarrollo de este artículo utilizaremos un tema que ya hemos visto: el uso de los módulos de radio de UHF que nos permitirán utilizar el sistema de manera remota o a distancia. Sin duda alguna, esta posibilidad expande notablemente las aplicaciones potenciales que puede tener esta rama de la electrónica llamada también “mecatrónica”.

Manejar y operar sistemas electromecánicos a distancia como el que aquí veremos son el preludio de aplicaciones más complejas, como puede ser la manipulación de material radioactivo dentro de un reactor nuclear. Es decir, en todos aquellos lugares donde las manos del ser humano no puedan acceder, allí estarán los servomecanismos operados de manera inalámbrica. Obviamente, la complejidad de los mecanismos y la precisión en los movimientos serán muy superiores a las expuestas aquí, pero no te quepan dudas que los principios elementales son exactamente los que verás en este artículo.

Como siempre, en el encabezado del programa definiremos el dispositivo a utilizar y la frecuencia del reloj o “clock” del sistema. Para este ejemplo hemos seleccionado el 16F628A a una frecuencia de 20 Mhz, que son valores aptos para el programa compilador BASIC que utilizamos en la programación de los microcontroladores (Proton Lite). También en la parte inicial definiremos las variables que indicarán la posición que adopte cada servomotor que, para hacerlo bien comprensible, hemos seleccionado las palabras GIRO y ALTO.

Es decir, la variable GIRO determinará la posición del servo inferior que brinda el movimiento en el eje “x”, mientras que ALTO lo hará con el encargado del movimiento de elevación, movilizando la webcam por el eje de las ordenadas (eje “y”). Una vez comprendido esto, pasamos a definir los pines del microcontrolador que manejarán los servomotores, es decir, los pines que llevarán los impulsos de ancho variable a cada servomotor, los que de manera muy original hemos bautizado como AZIMUT y ALTURA, para facilitarte la comprensión.

Le indicamos al microcontrolador que trabajaremos en modo digital con la instrucción ALL_DIGITAL, con la que anulamos el funcionamiento de los comparadores del 16F628A. Esto es lo mismo que colocar CMCON = 7, sintaxis a la que muchos están más acostumbrados pero que significa lo mismo y causa el mismo efecto sobre el microcontrolador.

A partir de este punto definimos los valores iniciales de las variables y las condiciones de los pines de cada puerto del microcontrolador. Como dijimos anteriormente, un valor de 1500 equivale a un posicionamiento en el centro del recorrido del actuador del servomotor. De aquí surge que al conectar el sistema a la fuente de alimentación, ambos actuadores adoptan la posición central de su recorrido. Con las instrucciones TRIS definimos los pines que serán entradas y los que serán salidas. Podemos ver que en ambos puertos tenemos los tres primeros pines como entradas y el resto como salidas.

Luego viene el lazo principal (MAIN) del programa donde se desarrolla todo el recorrido y lectura de los pines de entrada. Vemos que el pin 1 del puerto A es el encargado de llevar al sistema a la posición inicial o de “RESET” que le decimos en los videos, colocando en las variables que definen el ancho del impulso un valor de 1500. Luego chequeamos los pines que activan los incrementos o decrementos de las variables y, si observas bien, notarás que ya no varían de a una unidad sino que lo hacen de a dos. GIRO = GIRO + 2 y GIRO = GIRO – 2. El valor que exista en las variables GIRO y ALTO se reflejará en movimiento por parte de los servomotores, adoptando la posición que elijamos.

Por supuesto que la mayoría de las mentes brillantes que visita NeoTeo ya estará ideando y pensando la forma de realizar la toma de datos correspondientes a las variables a partir de los mapas de bits de la misma imagen que nos devuelva la webcam, para comenzar a desarrollar una Sentry-Gun … ¡ya los imagino!

Optimizando las velocidades de acción del sistema, puedes transformar este simple sistema de orientación de cámara webcam en lo que desees. ¿Alguien dijo seguidor de cuerpos celestes para telescopio? ¿O me pareció escuchar que están preparando un sistema de dirección para aeromodelos? Cualquier aplicación es posible, sólo hay que soñar.

Acoplando el módulo UHF

De la misma forma que cuando ensayamos con sencillos LEDs para experimentar con módulos de radio UHF, ahora trabajaremos basándonos en el mismo estilo de programa para el 12F675, pero, en vez de encender LEDs, cada estado lógico alto que obtengamos en sus salidas ahora nos servirá para activar transistores NPN, según el siguiente circuito:

Entonces, cada estado alto a la salida de un pin del 12F675 provocará un estado bajo en el Colector del respectivo transistor, lo que equivaldrá a un pulsador activado respecto a GND para el 16F628A encargado de controlar los servos. Cuando a la salida del 12F675 existe un estado bajo, el transistor no conduce a su salida y entonces aparece un estado alto en su Colector. Todo esto como si se tratara de un pulsador ubicado en cada pin de entrada del 16F628A.

Naturalmente, en el gráfico hemos dibujado un solo transistor pero tú deberás colocar la cantidad equivalente a los pulsadores que quieras emular. El transmisor no varía respecto al artículo anterior por lo que no merece mención alguna. Por último, recuerda alimentar al módulo receptor y al 12F675 con los mismos 5 Volts que utilizas para el 16F628A. Recuerda también que los motores de los servomecanismos generan mucho ruido eléctrico que puede provocar funcionamientos inestables en el sistema. Trata de filtrar muy bien la alimentación en el receptor y en los PIC de esta sección con capacitores cerámicos de 100 nanofaradios (100 nF) ubicados lo más próximo posible a los microcontroladores. Un par de capacitores electrolíticos de 100uF repartidos en el circuito también serán bienvenidos.

¿Quieres verlo en acción con la webcam? Aquí lo tienes bien detallado.

Sería muy interesante y enriquecedor para nosotros saber qué aplicaciones se te ocurren a partir de un sistema de estas características. Deja volar tu imaginación y compártela con nosotros. Tal vez nos entusiasmemos y te ayudemos a desarrollarla. ¿Te gustaría?

Escrito por Mario

Leave a Reply